INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 1 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Brauche Hilfe bei Arrays
02.07.2019, 20:16
Beitrag #9
RE: Brauche Hilfe bei Arrays
(02.07.2019 20:07)Tommy56 schrieb:  
(02.07.2019 19:59)mega-hz schrieb:  d.h. eine 7 wäre auch eine 7+'\0' also 2 zeichen?
dann müssten die ergebnisse um eins gekürzt werden?
Du hast den Unterschied zwischen Zeichen, Zeichenketten und Zahlen nicht begriffen.

'7' ist das Zeichen 7, die Byterepräsentation ist 0x37
7 als Zahl ist als Byte 0x7

"11" als Zeichenkette ist als Byterepräsentation 0x31,0x31,0x0
11 als Zahl ist als Byte 0xB

Dir hilft kein Kürzen, Du musst Umwandeln und langsam mal die einfachsten Grundlagen lernen.

Gruß Tommy

gute Seite hast Du da erstellt!

demnach müsste es heissen:

Code:
CH[atoi(ptr)] = 0;
?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.07.2019, 20:22
Beitrag #10
RE: Brauche Hilfe bei Arrays
(02.07.2019 20:16)mega-hz schrieb:  demnach müsste es heissen:
Code:
CH[atoi(ptr)] = 0;
?
Immer noch falsch.

Code:
CH[index]=atoi(ptr);
Wobei index eine globale (oder static) Variable ist, die zu Anfang auf 0 initialisiert wird und nach jedem Schreibvorgang um 1 erhöht wird. Also die Stelle im Array CH, an die Du als nächstes schreiben willst.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.07.2019, 20:32 (Dieser Beitrag wurde zuletzt bearbeitet: 02.07.2019 20:47 von mega-hz.)
Beitrag #11
RE: Brauche Hilfe bei Arrays
(02.07.2019 20:22)Tommy56 schrieb:  
(02.07.2019 20:16)mega-hz schrieb:  demnach müsste es heissen:
Code:
CH[atoi(ptr)] = 0;
?
Immer noch falsch.

Code:
CH[index]=atoi(ptr);
Wobei index eine globale (oder static) Variable ist, die zu Anfang auf 0 initialisiert wird und nach jedem Schreibvorgang um 1 erhöht wird. Also die Stelle im Array CH, an die Du als nächstes schreiben willst.

Gruß Tommy

Warum soll "index" immer um eins erhöht werden?
Das darf nicht sein denn es sollen nur die Kanäle aus der seriellen Eingabe,
also 1,2,7,8,11 z.B. auf 0 oder 1 gesetzt werden!
Es kann nämlich sein, daß z.B. Kanäle 3 und 29 gesetzt sind und dies soll so bleiben. Zum löschen / setzen aller Kanäle habe ich einen anderen Befehl / Routine

für diese Routine (die ja OPEN... abfragt) ist vorgesehen, daß

OPEN(@1,2,7,8,11) = Kanal 1,2,7,8,11 öfnnen (MOSFETs aus) - alle anderen Kanäle bleiben unangetastet!
CLOSE(@22,23,30) = Kanl 22,23,30 schliessen (MOSFETs an) - alle anderen Kanäle bleiben unangetastet!
OPEN ALL = alle Kanäle öffnen
CLOSE ALL = alle Kanäle schliessen

leider kann ich jetzt nichts testen, da der Controller nicht zuhause ist..
aber ein Compiler Error gibt es nicht mehr, morgen mehr sehen.

Danke schon mal für die Hilfe !!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.07.2019, 21:08
Beitrag #12
RE: Brauche Hilfe bei Arrays
Ok, dann hatte ich Dein Anliegen nicht verstanden.
Du willst also den übergebenen Pin Ein-/Ausschalten. Wozu brauchst Du dann das Array?

Code:
// Open oder Close ermitteln (dass musst Du sowieso)
byte pin = atoi(ptr);
// mit Array
CH[pin] = 0; // bei aus oder 1 bei an
// oder direkt
digitalWrite(pin, 0); // oder 1 bei an

Oder willst Du sowas machen?
Code:
// lesen
// Open oder Close ermitteln
byte action = 0;
bool all = false;
if (strstr(input,"OPEN")) action = 1;
if (strstr(input,"ALL")) all = true;

...
if (!all) {
  // in der strtok-Schleife
  byte pin = atoi(ptr);
  CH[pin] = action;

}
else {
  for(byte i=0; i<33;i++) CH[i] = action;
}
// danach
for(byte i=0; i<33;i++) digitalWrite(i,CH(i));

Alles ungetestet, nur als Anregung zum Nachdenken.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.07.2019, 22:47
Beitrag #13
RE: Brauche Hilfe bei Arrays
Zitat:@MartinZ: Du liegst völlig falsch mit Deiner Erklärung.

Vielleicht eine etwas krasse Formulierung deinerseits? Zumal sie (sorry) nicht stimmt.

Worauf ich mit meiner Erklärung hinweisen wollte, war nur dass die strtok-Funktion eine Adresse (einen pointer) zurückliefert.

Wenn man diese Adresse (also im allgemeinen eine recht große Zahl) als Index in die [ ] setzt, wie der ThreadOwner, dann ist das nicht nur formal falsch, weil der Typ nicht passt (Der Compiler erwartet in den eckigen Klammern ja eine Indexzahl z.B. vom Typ "int" o.ä. und nicht einen Wert vom Typ "Zeiger auf char" (Typ "char *").
Sondern die Zahl wäre auch viel zu groß. Denn als Index dürfen in dem dargestellten Programm nur Werte von 0 bis 32 verwendet werden, da das Array nur mit 33 Zeichen definiert wurde.

strtok liefert aber (wirklich!) eine Speicheradresse zurück. Dass dein
Code:
Serial.print(ptr)
dann Zeichen anzeigt, liegt daran, dass die print() -Funktion so intelligent ist, bei Typ "Zeiger auf char" (char*) die char-Zeichenkette auszugeben, auf welche die Adresse verweist!

Ich habe hier mal einen Screenshot vom Debugger gemacht mit Breakpunkt nach dem ersten Aufruf von strtok:


   



Dort sieht man diese Adresse (0x20087f94) und dass dort der Text "Ein" liegt.
Du hast recht, dass strtok nach dem "Ein" ein \0-Zeichen (String-Terminator) in die Quellzeichenkette einbaut. Das macht die Funktion strtok deshalb, damit eine separate Zeichenkette beginnend bei Adresse 0x20087f94 und endend beim \0-Zeichen ensteht.
Man muss daher nicht manuell ein \0-Zeichen in das Quellarray schreiben.
Wenn man es aber tun möchte, dann macht man das (wie ich schrieb) mit dem Befehl
Code:
*ptr=0
oder
Zitat:*ptr='\0'
.
Allerdings erst nach dem 2. Aufruf von strtok. Denn sonst würde das \0-Zeichen direkt am Anfang in das Quellarray geschrieben, so dass das 'E' von "Ein" überschrieben würde.
Nach dem 2. Aufruf von strtok hat ptr den Wert 0x20087f98 und zeigt damit auf "Teststring". Daher (da war ich nicht exakt genug!!) müsste man dann *(ptr-1)='\0' schreiben, um das \0-Zeichen hinter das "Ein" und vor das "Teststring" zu schreiben und damit das Leerzeichen zu überschreiben.

(Falls sich einer über die hohen Adresswerte wundert: Ich habe es mit einem Arduino Due probiert. Der hat wirklich so viel Speicher...)

Wäre also nett, Tommy, wenn du nicht so pauschal schreiben würdest "völlig falsch". Wink
Was du ansonsten geschrieben hast, ist ja weitgehend gut und richtig.
strtok haut \0-Zeichen in den Quellstring.
Aber es liefert eben auch bei jedem Aufruf die Anfangsadresse des Teilstrings zurück, den es grade mit \0 terminiert hat.


Gruß und nichts für ungut,
Martin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.07.2019, 22:55
Beitrag #14
RE: Brauche Hilfe bei Arrays
Ich hatte ja breits ergänzt, dass ich Deine Beschreibung etwas missverstanden haben könnte. Sie war auf alle Fälle für mich nicht klar verständlich, woraus meine Einschätzung resultierte. Sollte diese zu krass gewesen sein, entschuldige ich mich dafür.

Den Compilerfehler Adresse anstelle von Index hatte ich ja bereits beschrieben, wobei ich Deine Entgegnung als Widerspruch dazu verstanden hatte.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.07.2019, 18:52
Beitrag #15
RE: Brauche Hilfe bei Arrays
(02.07.2019 22:55)Tommy56 schrieb:  Ich hatte ja breits ergänzt, dass ich Deine Beschreibung etwas missverstanden haben könnte. Sie war auf alle Fälle für mich nicht klar verständlich, woraus meine Einschätzung resultierte. Sollte diese zu krass gewesen sein, entschuldige ich mich dafür.

Den Compilerfehler Adresse anstelle von Index hatte ich ja bereits beschrieben, wobei ich Deine Entgegnung als Widerspruch dazu verstanden hatte.

Gruß Tommy

Ähmm, du meintest sicher Martin, nicht mich, oder?
Egal, ich danke Dir (und allen anderen!) für die Hilfe, nun funktioniert alles wie es soll!

Da die Platine die ich layoutet habe einen "nackten, neuen" 2560 drauf hat und nicht Arduino ist, muss ich per ISP diesen flashen.
Dachte das geht auch mit nem Nano als Arduino-ISP Flasher, aber der will nicht.
Also doch mit AtmelStudio7 und USB Flasher...
Liegt wahrscheinlich an den FuseBits, standartmäßig sind die ja ab Werk mit 1Mhz internen RC Oszillator eingetellt.

Gruß,
Wolfram.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.07.2019, 18:54 (Dieser Beitrag wurde zuletzt bearbeitet: 03.07.2019 18:56 von Tommy56.)
Beitrag #16
RE: Brauche Hilfe bei Arrays
Ja, ich meinte Martin. Schön, dass es funktioniert und danke für die Rückmeldung.

Es wäre für die Nachwelt gut, wenn Du das funktionierende Ergebnis hier noch einstellen würdest.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Hilfe für Kita-Projekt gesucht. cyberiss 8 500 06.08.2019 07:57
Letzter Beitrag: Der Hobbyelektroniker
  Hilfe benötigt bei der folgenden Aufgabe hanneswave 10 746 01.07.2019 18:08
Letzter Beitrag: Wochenendprogrammierer
  Oled 0.91 wechselnde Anzeige . Benötige hilfe MotD 6 809 24.03.2019 22:48
Letzter Beitrag: Bitklopfer
  Simon Says bzw. Senso - Spiel bitte Hilfe Riddle 3 694 15.03.2019 13:46
Letzter Beitrag: Tommy56
  Arbeiten mit Arrays Jan99 23 1.658 08.03.2019 10:10
Letzter Beitrag: MicroBahner
  Hilfe benötigt beim Verknüpfen von Klassen Batucada 7 786 02.03.2019 23:47
Letzter Beitrag: georg01
  Hilfe bei Formulierung der Frage Matt 3 823 23.02.2019 12:45
Letzter Beitrag: Tommy56
  Hilfe bei Fehlermeldung Badboy89 9 1.087 13.02.2019 15:23
Letzter Beitrag: Tommy56
Sad Neuling verzweifelt braucht Hilfe delay durch timer ersetzen Lois 1 785 06.02.2019 16:15
Letzter Beitrag: Tommy56
  Kann auf A.Uno nichts hochladen - Anfänger sucht Hilfe ardeche 25 2.051 21.01.2019 22:06
Letzter Beitrag: ardeche

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste