无效循环内的无效循环不起作用。做什么?
Void loop inside a void loop doesn't work. What does?
所以我这里有一个程序具有三种不同的 LED 循环模式,代码在 if 语句中我注意到它不再循环,即使 if 语句在 void 循环中。我试过在 void 循环中放置一个 void 循环,但它不起作用。我不能在一定程度上让代码循环,因为当我尝试它并将数字设置为 50 次循环时,它完成了所有 50 次循环,即使用户在第 3 次循环中键入了另一个输入。我是 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 (serialdata == '1'){
while(!Serial.available()) {
if(ledpin==2){
//for loop
}
if(ledpin==9){
//for loop
}
}
}
让我们从一些术语开始。
I have tried putting a void loop inside the void loop but it does not
work.
这句话没有多大意义
每个 Arduino 草图都必须实现 void loop() {}
,这是一个名为循环的函数,它没有 return 值 (void
) 并且没有参数 (()
)。
当您启动 Arduino 时,它会调用 setup
一次,然后 运行 一个在每次迭代中调用 loop
的无限循环。
另一方面,循环是一种控制结构。有多种类型,例如 for 循环或 while 循环。但是其中 none 与函数 loop
有任何关系
所以你不能把“空循环放在空循环里面”。
I can't have the code loop to a certain extent because when I tried it
and set the number to 50 loops, it finished all 50 loops even if the
user typed another input at the 3rd loop
您不更新循环内的用户输入。那么你怎么能期望回应它呢?
如果您想过早地中止循环,则必须经常读取循环中的用户输入。
所以我这里有一个程序具有三种不同的 LED 循环模式,代码在 if 语句中我注意到它不再循环,即使 if 语句在 void 循环中。我试过在 void 循环中放置一个 void 循环,但它不起作用。我不能在一定程度上让代码循环,因为当我尝试它并将数字设置为 50 次循环时,它完成了所有 50 次循环,即使用户在第 3 次循环中键入了另一个输入。我是 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 (serialdata == '1'){
while(!Serial.available()) {
if(ledpin==2){
//for loop
}
if(ledpin==9){
//for loop
}
}
}
让我们从一些术语开始。
I have tried putting a void loop inside the void loop but it does not work.
这句话没有多大意义
每个 Arduino 草图都必须实现 void loop() {}
,这是一个名为循环的函数,它没有 return 值 (void
) 并且没有参数 (()
)。
当您启动 Arduino 时,它会调用 setup
一次,然后 运行 一个在每次迭代中调用 loop
的无限循环。
另一方面,循环是一种控制结构。有多种类型,例如 for 循环或 while 循环。但是其中 none 与函数 loop
所以你不能把“空循环放在空循环里面”。
I can't have the code loop to a certain extent because when I tried it and set the number to 50 loops, it finished all 50 loops even if the user typed another input at the 3rd loop
您不更新循环内的用户输入。那么你怎么能期望回应它呢? 如果您想过早地中止循环,则必须经常读取循环中的用户输入。