【问题标题】:Void loop inside a void loop doesn't work. What does?无效循环内的无效循环不起作用。有什么作用?
【发布时间】:2021-07-14 06:42:18
【问题描述】:

所以我在这里有一个具有三种不同 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);
            
          }     //
    
        }   
      

    }

}

【问题讨论】:

  • 使用中断;在 if 语句中或使用 switch 语句代替 if。

标签: arduino arduino-uno arduino-ide serial-monitor


【解决方案1】:

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

if (serialdata == '1'){
 while(!Serial.available()) {
      if(ledpin==2){
        //for loop
        }
      if(ledpin==9){
        //for loop
        }
    }
} 

【讨论】:

  • 哇这工作!我想我做错了什么是我使用了 if 语句而不是循环,这就是为什么它不会不断检查可用的串行数据
【解决方案2】:

让我们从一些术语开始。

我尝试在 void 循环内放置一个 void 循环,但它没有 工作。

这句话没有多大意义。

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

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

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

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

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

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

【讨论】:

  • 非常感谢!
猜你喜欢
  • 2021-10-28
  • 2023-03-14
  • 2013-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
相关资源
最近更新 更多