【问题标题】:<Arduino> Serial monitor auto-inputs 0 after a loop iteration<Arduino> 循环迭代后串行监视器自动输入 0
【发布时间】:2021-03-05 05:48:51
【问题描述】:

在 YT 教程之后,我已经学习了 3 天的 Arduino 使用方法。我目前正在学习串行监视器的输入输出。

运行一次循环后,串行监视器自动输入一个 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;
}

【问题讨论】:

    标签: arduino integer arduino-uno serial-monitor


    【解决方案1】:

    对此很陌生。在这个问题上挣扎了 4 个小时。

    在串行监视器的底部有一个复选框。选择“No new line”而不是“New line”,问题就解决了。

    如果您输入例如 80。它会保留 80 并且不会将其重置为 0。

    是的

    【讨论】:

    • 这就是答案。谢谢。
    【解决方案2】:

    我认为串行端口可能正在读取空终止符 ('\0'),或者输入缓冲区中留下了一些 垃圾

    在你的while循环之后使用Serial.flush(),看看是否能解决你的问题。

    编辑:我忘了提到我建议使用SerialEvent()(阅读this)而不是检查主循环中的串行输入。这种方法更可靠,因为它基于中断。

    继续学习!

    【讨论】:

    • 我会试试的。会回来更新哈哈哈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多