Последовательный монитор автоматически вводит 0 после итерации цикла

#arduino #integer #arduino-uno #serial-monitor

#arduino #целое число #arduino-uno #последовательный монитор

Вопрос:

Я изучал, как использовать Arduino в течение 3 дней после учебных пособий YT. В настоящее время я изучаю ввод-вывод с последовательным монитором.

После выполнения цикла один раз последовательный монитор автоматически вводит 0 и регистрируется как ввод, затем возвращается к принятию пользовательского ввода.

Скриншот того, что я имею в виду:

введите описание изображения здесь

Ниже приведен код:

 //inputs
int blinks;
String question = "How many times would you like the LED to blink? ";

//LED
int LEDPin = 8;

//while loop
int i = 1;

//delay
int delayTime = 500;

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

void loop() {
  // put your main code here, to run repeatedly:
  Serial.print(question);

  //this waits for an input <while serial is empty>
  while (Serial.available() == 0) {
  };

  //this reads the input
  blinks = Serial.parseInt();
  Serial.println(blinks);

  //output
  while (i <= blinks) {
    digitalWrite(LEDPin, HIGH);
    delay(delayTime);
    digitalWrite(LEDPin, LOW);
    delay(delayTime);
    Serial.println(i);
    i  ;
  };

  i = 1;
}
 

Ответ №1:

Я полагаю, что последовательный порт может считывать нулевой терминатор (») или во входном буфере остается какой-то мусор.

Используйте Serial.flush() после цикла while и посмотрите, решит ли это вашу проблему.

РЕДАКТИРОВАТЬ: я забыл упомянуть, что я бы предложил использовать SerialEvent() (прочитайте это) вместо проверки последовательного ввода в вашем основном цикле. Этот подход более надежен, поскольку он основан на прерываниях.

Продолжайте учиться!

Комментарии:

1. я попробую. вернется для обновления, хахахха

Ответ №2:

Новое в этом. 4 часа боролся с этой проблемой.

В нижней части последовательного монитора есть флажок. Выберите значение «Нет новой строки» вместо «Новая строка», и проблема решена.

Если вы введете, например, 80. Он сохраняет значение 80 и не сбрасывает его на 0.

Да

Комментарии:

1. Это ответ. Спасибо.