Go Down

Topic: Problem Switch-Case (Read 548 times) previous topic - next topic

michael_x

Wie gesagt, hab ich mir nur den Skech in #7 angeguckt, und wenn auf Serial mehr als nur ein einzelnes 'a' ankommt,  und sei es nur ein kaum sichtbares neueZeile - Zeichen '\n' , wird auch der default - Zweig ausgeführt.

Tommy56

Er braucht sich doch einfach nur alle gelesenen Zeichen mal als HEX auszugeben, dann sieht er ja, was ankommt.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

basketball175

Er braucht sich doch einfach nur alle gelesenen Zeichen mal als HEX auszugeben, dann sieht er ja, was ankommt.

Gruß Tommy
Hab das jetzt mal ausgeben lassen, siehe Bild im Anhang.

Die ersten beiden Ausgaben von 'a' kann ich noch nachvollziehen. Danach scheitert es, weil ich nicht weiß, woher er nun die zwei "leeren" Eingaben und anschließend eine "10" (Dezimal) nimmt. Ich habe lediglich 'a' eingegeben.

MicroBahner

#18
Jul 16, 2019, 08:55 am Last Edit: Jul 16, 2019, 09:01 am by MicroBahner
Tommy meinte, Du sollst das in HEX ausgeben. Nur dann siehst Du, was da wirklich ankommt.
Füge mal unmittelbar hinter das Serial.Read diese print Anweisungen ein:
Code: [Select]
   State = Serial.read();
    Serial.print(">>> ");Serial.println(State,HEX);
    switch (State)


Dann bekommst Du etwa so eine Ausgabe:
Code: [Select]
Bitte geben Sie die Fahrstraße ein!
>>> 61
13A.(13N1) mit D1
Fahrstraße aufgelöst!
>>> D
Fehler
>>> A
Fehler

 Hex '61' ist dein eingegebenes 'a'.
Das Hex 'D' und Hex 'A' sind die oben schon angesprochenen 'Carriage Return' und 'New Line'. Die fügt der serielle Monitor automatisch an deine Eingaben an. Im seriellen Monitor unten in dem dropDown Menü links neben der Baudrate kannst Du das abschalten ( 'Kein Zeilenende' )

Alternative wäre, diese Zeichen explizit zu behandeln (nichts tun), und nicht als Fehler zu sehen. Dann bist Du von der Einstellung im seriellen Monitor unabhängig.

P.S. Texte bitte immer hier als Text (in code-Tags) einstellen, und nicht als Bild.
Gruß, Franz-Peter

basketball175

Tommy meinte, Du sollst das in HEX ausgeben. Nur dann siehst Du, was da wirklich ankommt.
Füge mal unmittelbar hinter das Serial.Read diese print Anweisungen ein:
Code: [Select]
   State = Serial.read();
    Serial.print(">>> ");Serial.println(State,HEX);
    switch (State)


Dann bekommst Du etwa so eine Ausgabe:
Code: [Select]
Bitte geben Sie die Fahrstraße ein!
>>> 61
13A.(13N1) mit D1
Fahrstraße aufgelöst!
>>> D
Fehler
>>> A
Fehler

 Hex '61' ist dein eingegebenes 'a'.
Das Hex 'D' und Hex 'A' sind die oben schon angesprochenen 'Carriage Return' und 'New Line'. Die fügt der serielle Monitor automatisch an deine Eingaben an. Im seriellen Monitor unten in dem dropDown Menü links neben der Baudrate kannst Du das abschalten ( 'Kein Zeilenende' )

Alternative wäre, diese Zeichen explizit zu behandeln (nichts tun), und nicht als Fehler zu sehen. Dann bist Du von der Einstellung im seriellen Monitor unabhängig.

P.S. Texte bitte immer hier als Text (in code-Tags) einstellen, und nicht als Bild.
Danke, das hat geholfen! Wie wäre denn ein möglicher Ansatz um die Eingabe unabhängig von der Einstellung im DropDown-Menü zu realisieren?

Tommy56

Code: [Select]

   case 0xa:
   case 0xd:
     // nichts tun
     break;

    default:    // wenn keine Uebereinstimmung mit "State"  <--- Dein Default
 


Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Go Up