1

在 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;
}
4

2 回答 2

1

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

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

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

继续学习!

于 2020-11-22T10:37:37.137 回答
1

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

在串行监视器的底部有一个复选框。将其选择为“无新行”而不是“新行”,问题就解决了。

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

是的

于 2021-09-22T19:24:31.417 回答