2017-01-25 15 views
0

У меня есть этот код:Arduino Serial.readStringUntil не правильно обнаружить терминатор обугливает

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); 
    } 
} 

Ожидаемый сценарий I/O: IN: L020 OUT: ок L 20

Actual I/O сценарий: IN: L020 OUT: Ошибка связи. Read: L020

Что я делаю неправильно?

ответ

0

Try:

Serial.readStringUntil('0') так, как в docs он принимает char

Else Я хотел бы предложить, чтобы изменить характер прекратить говорить \n (ENTER),

затем серийный номер: "L\n20" будет дать правильный результат.

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

Подождите, вы говорите, что на самом деле существует разница между «х» и «х»? Хорошо, хорошо, сегодня я кое-что узнал ... Я имею в виду, это может быть причина, по которой чешский программник имеет оба ключа ... –