Arduino不会保持循环

时间:2015-02-07 19:18:31

标签: arduino global-variables arduino-uno

首先,我是Arduino的新手。但我有一些Java经验。

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

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

//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();
 }

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

1 个答案:

答案 0 :(得分:2)

您的代码

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

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

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

有关如何在不阻止情况下进行解析的更多示例,请参阅我的博客。

Parsing NumbersParsing different modes of operation