首先,我是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();
}
我很期待很快收到任何人的消息:)。欢迎任何评论。
答案 0 :(得分:2)
您的代码
while (Serial.available() == 0);
阻止主循环,除非串行接口有数据可用。因此它不会保持循环。您需要在不阻塞的情况下解析串行输入。例如:
while (Serial.available() > 0) {
val = Serial.read() - '0';
}
有关如何在不阻止情况下进行解析的更多示例,请参阅我的博客。