新手求助,怎么使用blinker按键跳出正在进行的while(1)循环
void button1_callback(const String & state){
digitalWrite(2, HIGH);
while(1){
digitalWrite(16, HIGH);
digitalWrite(5, HIGH);
digitalWrite(4, LOW);
delay(2000);
digitalWrite(16, LOW);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
delay(2000);
digitalWrite(16, HIGH);
digitalWrite(5, LOW);
digitalWrite(4, HIGH);
delay(2000);
}
}
进入while循环后再按其他的按键就都没有用了,因为不知道按键按下后会引起哪个变量的变化,就没有办法设置条件跳出循环:dizzy: 如果控制按键为3试试修改程序.
while(1){
if(digitalRead(3)==LOW) break;
digitalWrite(16, HIGH);
digitalWrite(5, HIGH);
digitalWrite(4, LOW);
for(i=0,i<2000,i++){
if(digitalRead(3)==LOW) break;
delay(1);
}
digitalWrite(16, LOW);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
for(i=0,i<2000,i++){
if(digitalRead(3)==LOW) break;
delay(1);
}
digitalWrite(16, HIGH);
digitalWrite(5, LOW);
digitalWrite(4, HIGH);
for(i=0,i<2000,i++){
if(digitalRead(3)==LOW) break;
delay(1);
}
} 按键只改变flag,其他在loop中判断 lwq1947 发表于 2020-9-21 06:04
如果控制按键为3试试修改程序.
while(1){
if(digitalRead(3)==LOW) break;
那我按下另一个按键不仅是中断循环,还要执行另一个按键下的工作呢?我设置多个按键,每个下面一个while循环,这样写会不会麻烦了 奈何col 发表于 2020-9-21 11:42
按键只改变flag,其他在loop中判断
flag是什么呢?有按键按下会改变的变量吗,因为需要多个按键,每个按键下有循环,按下不同按键切换循环。 单片机搞照明 发表于 2020-9-21 23:03
那我按下另一个按键不仅是中断循环,还要执行另一个按键下的工作呢?我设置多个按键,每个下面一个while ...
如果不麻烦只写头一个if(digitalRead(3)==LOW) break;那么当控制按键触发后不会立即跳出循环最长延时可能达6秒钟.你说有多个按键对应多个循环,那你只要一个循环中用其它循环按键的或来作为控制条件,例1,2,3,4分别控制4个循环,那么在1循环中你可用
if((digitalRead(2)==LOW)||(digitalRead(3)==LOW)||(digitalRead(4)==LOW)) break;来控制.以次类推.
lwq1947 发表于 2020-9-22 11:16
如果不麻烦只写头一个if(digitalRead(3)==LOW) break;那么当控制按键触发后不会立即跳出循环最长延时可能 ...
明白了,感谢 lwq1947 发表于 2020-9-22 11:16
如果不麻烦只写头一个if(digitalRead(3)==LOW) break;那么当控制按键触发后不会立即跳出循环最长延时可能 ...
尝试了多次,用一个按键控制一个IO口电平的高低,再在while循环中判定以break。但是结果还是一样,循环进行的过程中,按其他按键没有任何反应,用来break的IO口的电平也不会变化。 单片机搞照明 发表于 2020-9-23 16:10
尝试了多次,用一个按键控制一个IO口电平的高低,再在while循环中判定以break。但是结果还是一样,循环进 ...
把完整程序贴出来
页:
[1]