Почему срабатывает else?

alk90
Offline
Зарегистрирован: 07.08.2019

Всем привет. Только начал разбираься с ардуино, но не могу зажечь диод с помощью клавиатуры. Точнее он зажигается. Но сразу же тухнет. Потому что циклы loop выполняется повторно, данные из порта не приходят и срабатывает else. 
Но ведь я пишу условие Serial.available() > 0, которое вроде как не должно пустить программу внутрь условия.

Помогите плз разобраться. Вот мой код:

int led = 13;

void setup() {
  pinMode(led, OUTPUT);
  Serial.begin(9600);
}

void loop(){

  if(Serial.available() > 0){
    
      char i = Serial.read();
      
      Serial.println(i);
      if(i == '1'){
         digitalWrite(led, HIGH);
      }else{
        digitalWrite(led, LOW);
      }
  }

}

 

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

потому что при отсылке символа '1' вы нажимаете на клавиатуре "Enter", а эта клавиша тоже имеет код, котрый передается на Ардуину. Вот этот служебный код ваш диод и гасит

PRC
Offline
Зарегистрирован: 03.02.2019

Потому что еще отправляется символ перевода строки

alk90
Offline
Зарегистрирован: 07.08.2019

Спасибо за отклик. Попробовал нажимать "отправить" в мониторе порта, но ситуация та же

alk90
Offline
Зарегистрирован: 07.08.2019

О, всем спасибо. Нашел... У меня в выпадающем списке в мониторе порта, стояло NL (новая строка)

 

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

alk90 пишет:

О, всем спасибо. Нашел... У меня в выпадающем списке в мониторе порта, стояло NL (новая строка)

 

не самое лучшее решение. Правильнее было бы чуть поменять код, чтобы нагрузка включалась символом "1", а выключалась, к примеру, "0" - и это будет работать независимо и от перевода строк, и от любого другого "мусора" в линии