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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2574|回复: 8

[已解答] 新手求助,怎么使用blinker按键跳出正在进行的while(1)循环

[复制链接]
发表于 2020-9-20 23:27 | 显示全部楼层 |阅读模式
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循环后再按其他的按键就都没有用了,因为不知道按键按下后会引起哪个变量的变化,就没有办法设置条件跳出循环
发表于 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);
      }
    }
发表于 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是什么呢?有按键按下会改变的变量吗,因为需要多个按键,每个按键下有循环,按下不同按键切换循环。
发表于 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口的电平也不会变化。
发表于 2020-9-24 06:15 | 显示全部楼层
单片机搞照明 发表于 2020-9-23 16:10
尝试了多次,用一个按键控制一个IO口电平的高低,再在while循环中判定以break。但是结果还是一样,循环进 ...

把完整程序贴出来
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 11:38 , Processed in 0.084158 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表