问题描述
所以我这里有一个包含三种不同 LED 循环模式的程序,代码在 if 语句中,我注意到即使 if 语句在 void 循环中,它也不再循环。我试过在 void 循环中放置一个 void 循环,但它不起作用。我不能在一定程度上循环代码,因为当我尝试它并将数量设置为 50 个循环时,即使用户在第三个循环输入另一个输入,它也完成了所有 50 个循环。我是 arduino 的新手,非常感谢有关如何解决此问题的新信息。这是我的代码:
int prevIoUsLED;
void setup(){
Serial.begin(9600);
Serial.println("Enter desired Pattern Number: ");
for(int i=2; i<=9; i++){
pinMode (i,OUTPUT);
}
}
void loop(){
if (Serial.available()){
char serialdata = Serial.read();
//Serial.print("You have entered Pattern ");
//Serial.println(serialdata);
//Serial.print(" in BINARY:");
//Serial.println(serialdata,BIN);
if (serialdata == '1'){
Serial.println("LED Pattern 1 has been triggered!");
//
for(int ledPin = 2; ledPin<=9; ledPin++){
digitalWrite(prevIoUsLED,LOW);
digitalWrite(ledPin,HIGH);
delay(200);
prevIoUsLED = ledPin;
}
for(int ledPin = 9; ledPin>=2; ledPin--){
digitalWrite(prevIoUsLED,HIGH);
delay(200);
prevIoUsLED = ledPin;
}
}
if (serialdata == '2'){
Serial.println("LED Pattern 2 has been triggered!");
for(int ledPin = 2; ledPin<=9; ledPin++){
digitalWrite(ledPin,HIGH);
delay(700);
}
delay(3000);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
delay(1000);
}
if (serialdata == '3'){
Serial.println("LED Pattern 3 has been triggered!");
for (int k = 0; k<=5; k++){ //
for(int ledPin = 2; ledPin<=9; ledPin++){
digitalWrite(ledPin,HIGH);
}
delay(200);
for(int ledPin = 2; ledPin<=9; ledPin++){
digitalWrite(ledPin,LOW);
}
delay(200);
} //
}
}
}
解决方法
尝试这样的事情。这可能不是一个确切的答案,但你可以得到一个想法。
if (serialdata == '1'){
while(!Serial.available()) {
if(ledpin==2){
//for loop
}
if(ledpin==9){
//for loop
}
}
}
,
让我们从一些术语开始。
我尝试在 void 循环中放置一个 void 循环,但它没有 工作。
这句话没有多大意义。
每个 Arduino 草图都必须实现 void loop() {}
,它是一个名为循环的函数,它没有返回值 (void
) 并且没有参数 (()
)。
当您启动 Arduino 时,它将调用 setup
一次,然后运行一个无限循环,在每次迭代中调用 loop
。
另一方面,循环是一种控制结构。有多种类型,例如 for 循环或 while 循环。但是它们都与函数 loop
所以你不能把“空循环内的空循环”。
我在一定程度上无法让代码循环,因为当我尝试时 并将数量设置为 50 个循环,它完成了所有 50 个循环,即使 用户在第三个循环中输入了另一个输入
您不会在循环中更新用户输入。那么你怎么能期待回应呢? 如果您想提前中止循环,则必须经常读取循环中的用户输入。