операторы if else

Семенюк Роман
Offline
Зарегистрирован: 11.09.2019

Доброго времени суток. Только начинаю работать с Arduino. Есть вот такой скетч (для работы через консоль)

byte val;
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
  val = Serial.parseInt();
  if (val == 1) {
  Serial.println("You enter 1");
  } else if (val == 2){
    Serial.println("You enter 2");
    } else if (val == 3){
Serial.println("You enter 3");
    } else if (val == 4){
    Serial.println("You enter 4");
    } else if (val == 5){
    Serial.println("You enter 5");
    } else {
      Serial.println("Error");
}  
}
}

После компиляции при введении в консоль цифры от 1 до 5 имеет вывестись соответствующее сообщение, а если ввести что-то другое то выбьет ошибку. Но в моем случае результат на картинке (оператор else выполняется в любом случае). Буду искренне благодарен за подсказку.

Как я понимаю если быстро вводить нужную цифру то ошибка не выполняется. А если ввести цифру и подождать то освещается "Error". Я понимаю что в функции Loop все выполняется бесконечно. Поэтому скажите это нормальная реакция?

b707
Offline
Зарегистрирован: 26.05.2017

прочитайте соседнюю тему до конца

http://arduino.ru/forum/programmirovanie/ne-mogu-ostanovit-serialreadstringuntil

И вообще хороший тон - это сначала поискать на форуме похожие вопросы, а уже потом постить свой

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Семенюк Роман пишет:
оператор else выполняется в любом случае

Не выполняется, если введено число. Чтобы убедиться в этом, поставьте Печать чего-нибудь между строками №№ 6 и 7 и сразу увидите, что на самом деле числе и Error печатаются в разные проходы loop.

Ваш error печатается тогда, когда в Serial что-то есть, но это что-то не является нужным Вам числом.

Семенюк Роман
Offline
Зарегистрирован: 11.09.2019

Спасибо буду знать.

MaksVV
Offline
Зарегистрирован: 06.08.2015

распечатайте переменную val после parseInt()  как вы говорите в "консоль"