Чтение Arduino из серийного дает нежелательный ввод - PullRequest
0 голосов
/ 06 июля 2019

Я пытаюсь создать небольшую программу для управления 3 светодиодами. Светодиоды подключены к контактам 11 (красный), 12 (желтый) и 13 (зеленый).

По некоторым неизвестным мне причинам следующий код, похоже, не работает. Если я введу 1 в последовательный вход, загорится желтый светодиод. Но примерно через 1 секунду он снова выключается и включается красный светодиод. Мне кажется, на последовательном входе всегда 0, но это не может быть правдой, не так ли?

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  if(Serial.available() > 0) {
    changeLed(Serial.parseInt());
  }
}

void changeLed(int color) {
  turnAllLedsOff();
  turnOnLed(color);
}

void turnOnLed(int ledPin) {
  enum ledControl {RED, YELLOW, GREEN};
  if(ledPin == RED) {
    digitalWrite(11, HIGH);
  }
  if(ledPin == YELLOW) {
    digitalWrite(12, HIGH);
  }
  if(ledPin == GREEN) {
    digitalWrite(13, HIGH);
  }
}

void turnAllLedsOff() {
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
}

1 Ответ

2 голосов
/ 06 июля 2019

Я считаю, что настройка окончания строки вашего Serial Monitor установлена ​​на Both NL & CR. Один вызывает Serial.parseInt(), а другой - другой Serial.parseInt(). Итак, на каждом последовательном входе вы вызываете функцию дважды. А второй всегда возвращает 0, поскольку только перевод строки (или только возврат каретки) не являются действительными цифрами. Вот почему ваш красный светодиод включается. Попробуйте другие настройки окончания строки.

...