0

所以我在这里有一个程序,它具有三种不同的 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,LOW);
    
                digitalWrite(ledPin,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);
            
          }     //
    
        }   
      

    }

}
4

2 回答 2

1

尝试这样的事情。这可能不是一个确切的答案,但你可以得到一个想法。

if (serialdata == '1'){
 while(!Serial.available()) {
      if(ledpin==2){
        //for loop
        }
      if(ledpin==9){
        //for loop
        }
    }
} 
于 2021-04-20T07:52:20.053 回答
1

让我们从一些术语开始。

我尝试在 void 循环内放置一个 void 循环,但它不起作用。

这句话没有多大意义。

每个 Arduino 草图都必须实现void loop() {}一个名为 loop 的函数,它没有返回值 ( void) 并且没有参数 ( ())。

当你启动你的 Arduino 时,它会调用setup一次,然后运行一个loop在每次迭代中调用的无限循环。

另一方面,循环是一种控制结构。有多种类型,例如 for 循环或 while 循环。但它们都与功能无关loop

所以你不能把“一个 void 循环放在 void 循环内”。

我不能在一定程度上有代码循环,因为当我尝试它并将数量设置为 50 个循环时,即使用户在第三个循环中键入了另一个输入,它也会完成所有 50 个循环

您不会在循环内更新用户输入。那么你怎么能期望回应它呢?如果您想提前中止循环,则必须经常读取循环中的用户输入。

于 2021-04-20T07:55:07.353 回答