新手求助,怎么使用blinker按键跳出正在进行的while(1)循环-Arduino中文社区 - Powered by Discuz! Archiver

单片机搞照明 发表于 2020-9-20 23:27

新手求助,怎么使用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:

lwq1947 发表于 2020-9-21 06:04

如果控制按键为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);
      }
    }

奈何col 发表于 2020-9-21 11:42

按键只改变flag,其他在loop中判断

单片机搞照明 发表于 2020-9-21 23:03

lwq1947 发表于 2020-9-21 06:04
如果控制按键为3试试修改程序.
while(1){
      if(digitalRead(3)==LOW) break;


那我按下另一个按键不仅是中断循环,还要执行另一个按键下的工作呢?我设置多个按键,每个下面一个while循环,这样写会不会麻烦了

单片机搞照明 发表于 2020-9-21 23:24

奈何col 发表于 2020-9-21 11:42
按键只改变flag,其他在loop中判断

flag是什么呢?有按键按下会改变的变量吗,因为需要多个按键,每个按键下有循环,按下不同按键切换循环。

lwq1947 发表于 2020-9-22 11:16

单片机搞照明 发表于 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;来控制.以次类推.

单片机搞照明 发表于 2020-9-22 12:23

lwq1947 发表于 2020-9-22 11:16
如果不麻烦只写头一个if(digitalRead(3)==LOW) break;那么当控制按键触发后不会立即跳出循环最长延时可能 ...

明白了,感谢

单片机搞照明 发表于 2020-9-23 16:10

lwq1947 发表于 2020-9-22 11:16
如果不麻烦只写头一个if(digitalRead(3)==LOW) break;那么当控制按键触发后不会立即跳出循环最长延时可能 ...

尝试了多次,用一个按键控制一个IO口电平的高低,再在while循环中判定以break。但是结果还是一样,循环进行的过程中,按其他按键没有任何反应,用来break的IO口的电平也不会变化。

lwq1947 发表于 2020-9-24 06:15

单片机搞照明 发表于 2020-9-23 16:10
尝试了多次,用一个按键控制一个IO口电平的高低,再在while循环中判定以break。但是结果还是一样,循环进 ...

把完整程序贴出来
页: [1]
查看完整版本: 新手求助,怎么使用blinker按键跳出正在进行的while(1)循环