2016-02-10 2 views
4

У меня есть arduino, подключенный к моему компьютеру (COM9), и у меня есть 3 скрипта python. Первый отправляет «1» по серийному номеру. Второй отправляет «0» по серийному номеру. Третий посылает слово, которое вы ему даете.check string to be 1, 0 else print string

ser.write("1") 

После этого на моем arduino у меня есть код. Если запущен скрипт python 1, он включит светодиод. Если запустить 2-секундный скрипт, он отключит светодиод. Если запускается скрипт python 3, он будет печатать слово в lcd.

Все оборудование настроено правильно. Проблема в том, что при запуске скрипта 1 не только включается светодиод, но также будет 1 на lcd. Другие 2 скрипта работают так, как ожидалось.

Это часть кода на моем ардуине.

if (Serial.available()) 
    { 
    wordoftheday = Serial.readString(); 
    if (wordoftheday == "1"){email = true;} 
    if (wordoftheday == "0"){email = false;} 
    else { 
     lcd.clear(); 
     lcd.print(wordoftheday); 
     } 
    } 

    if (email == true){digitalWrite(9, HIGH);} 
    if (email == false){digitalWrite(9, LOW);} 
+2

Вы хотите 'else if (wordoftheday ==" 0 ")'? – chux

+0

@TristanT неясно, что вы хотите, чтобы светодиод работал, когда получен третий тип текстового сообщения. –

+0

@ Наберите, когда получен третий тип текстового сообщения. руководителю ничего не нужно. Если это нужно, нужно продолжать. Если он выключен, ему необходимо остановиться –

ответ

5

Вы не можете сравнивать строки с помощью ==

if (wordoftheday == "1"){email = true;} 

должен быть

if (strcmp(wordoftheday, "1") == 0){email = true;} 

И (как указал @chux), кажется, что вы забываете else:

if (strcmp(wordoftheday, "1") == 0) 
    email = true; 
else 
if (strcmp(wordoftheday, "0") == 0) 
    email = false; 
else { 
    lcd.clear(); 
    lcd.print(wordoftheday); 
} 
+0

. Существует еще одна логическая ошибка: как упоминалось в @chux, отсутствует 'else'. –

+0

@WeatherVane, правда, отредактирован. Благодаря! –

+0

Это было очень полезно. Но это вызывает ошибку. 'не может преобразовать 'String' в 'const char *' для аргумента '1' to 'int strcmp (const char *, const char *)'' Я знаю, что он говорит. Но почему это так? –

2

Помимо предыдущего ответа о сравнении, вы неправильно настроили ifs. Когда первое, если верно, вы попадаете в другое из второго, если.

if (Serial.available()) 
{ 
    wordoftheday = Serial.readString(); 
    if (strcmp(wordoftheday, "1")) {email = true;} 
    else if ((strcmp(wordoftheday, "0")){email = false;} 
    else { 
     // Enters here only if both of the above are false 
     lcd.clear(); 
     lcd.print(wordoftheday); 
    } 
}