Arduino 不会一直循环

Arduino does not keep looping

大家好,首先我是 Arduino 的新手。但是我在 Java 方面有一些经验。

我得到了一个无效设置和一个无效循环。我想要的是它不断循环我的 LED 模式。如果我向 arduino 发送 1 或 2,它会告诉他 运行 一个 LED 模式。但我希望它一直循环选择的模式。在无效循环中,我得到了 val = Serial.read() - '0';我认为循环中的这个东西会一直将它设置回 0。但是如果我把它放在全局变量中,我就不能将 1 或 2 发送到 Arduino Uno 控制器。

到目前为止,这是我的代码:

//Pins initaliseren in de setup d.m.v. for loop.
int ledPins[] = {2,3,4,5,6,7,8,9,10};
int pinCount = 9;

//Patronen voor de knipper leds
int patroonEen[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4, 3};
int patroonEenLength = 16;
int patroonTwee[] = {2,3,4,5,6,5,4,3};
int patroonDrie[] = {10,9,8,7,6,7,8,9};
int patroonTweeDrieLength = 9;

int val = 0;

void setup() {
  Serial.begin(9600);

  //Inladen van de pins die we gebruiken.
  for (int i = 0; i < pinCount; i++) {
     pinMode(ledPins[i], OUTPUT); 
  }
}

void loop() { 
  while (Serial.available() == 0);
  val = Serial.read() - '0';

  if ( val == 1) {
    for (int i = 0; i < patroonEenLength; i++) {
      digitalWrite(patroonEen[i], HIGH);
      delay(100);
      digitalWrite(patroonEen[i], LOW);
    }  
  } else if (val == 2) {
    for (int i = 0; i < patroonTweeDrieLength; i++) {
      digitalWrite(patroonTwee[i], HIGH);
      digitalWrite(patroonDrie[i], HIGH);
      delay(100);
      digitalWrite(patroonTwee[i], LOW);
      digitalWrite(patroonDrie[i], LOW);
    }  
  } else {
    Serial.print("Ongeldige input");
  }
  Serial.flush();
 }

我期待很快收到任何人的来信 :)。欢迎任何评论。

您的代码

while (Serial.available() == 0);

阻塞主循环,除非串行接口有数据可用。因此它不会继续循环。您需要在不阻塞的情况下解析串行输入。例如像这样:

while (Serial.available() > 0) {
    val = Serial.read() - '0';
}

在我的博客中可以找到更多如何无阻塞解析的示例。

Parsing Numbers, Parsing different modes of operation