2017-01-25 2 views
0

ich diesen Code haben:Arduino Serial.readStringUntil nicht richtig erkennen Terminator verkohlt

void setup() { 
    Serial.begin(9600); 
    while (!Serial){} 
    Serial.println("Connected"); 
    Serial.println("L"); 
    Serial.println("R"); 
    Serial.println("B"); 
    Serial.println("S"); 
    Serial.println("T"); 
} 

void loop() { 
    evalComms(Serial.readStringUntil("0")); 
} 

void evalComms(String recv){ 
    if (recv == "L"){ 
    Serial.println("ok L " + String(Serial.parseInt())); 
    } else if (recv == "R"){ 
    Serial.println("ok R " + String(Serial.parseInt())); 
    } else if (recv == "B") { 
    Serial.println("ok B " + String(Serial.parseInt())); 
    } else if (recv == "S") { 
    Serial.println("ok S"); 
    } else if (recv == "T"){ 
    Serial.println("ok T"); 
    } else if (recv != ""){ 
    Serial.println("Comm error. Read: " + recv); 
    } 
} 

Erwartete I/O-Szenario: IN: L020 OUT: ok L 20

tatsächliche I/O Szenario: IN: L020 OUT: Komm Fehler. Lesen: L020

Was mache ich falsch?

Antwort

0

Versuchen:

Serial.readStringUntil('0') da als je docs es eine char

akzeptiert Else würde ich vorschlagen, die kündigen Zeichen ändern \n zu sagen (ENTER),

dann auf Serien: "L\n20" wird geben Sie korrekte Ausgabe.

void loop() 
{ 
    if(Serial.available() > 0) 
    { 
     evalComms(Serial.readStringUntil('\n')); 
    } 
} 
+0

Warten Sie, dass es tatsächlich einen Unterschied zwischen "x" und "x" gibt? Okay, nun, heute habe ich etwas gelernt ... Ich meine, das könnte der Grund sein, warum das Layout des tschechischen Programmierers beide Schlüssel hat ... –