查看: 273|回复: 8

arduino 怎么退出正在执行的delay 延时

[复制链接]
  • TA的每日心情
    奋斗
    2019-3-6 11:40
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-9-19 23:33 | 显示全部楼层 |阅读模式
    如题,
    我想要中断 arduino 正在执行的delay 函数,  有什么好办法吗,   救教 大家,

    我用attachinterrupt 按一下,断开一下,又接着 未完成的delay 继续在执行    
  • TA的每日心情
    奋斗
    2019-10-16 09:57
  • 签到天数: 112 天

    [LV.6]常住居民II

    发表于 2019-9-20 08:59 | 显示全部楼层
    用while循环,里面的delay值设定小一点。当满足结束条件时跳出while循环,就算在执行delay,但是延迟值小,也可以忽略。中断不行,他只是在运行期间插入另一个函数运行,运行完后还会继续回到原来的程序
  • TA的每日心情
    奋斗
    2019-7-12 18:42
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 2019-9-20 09:13 | 显示全部楼层
    上面说的可以,或者用millis控制时间
    如果你觉得以上内容帮到了你,你可以打赏支持作者
  • TA的每日心情
    开心
    2019-9-21 09:30
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2019-9-20 13:05 | 显示全部楼层
    用while循环,里面的delay值设定小一点。当满足结束条件时跳出while循环,就算在执行delay,但是延迟值小,也可以忽略。中断不行,他只是在运行期间插入另一个函数运行,运行完后还会继续回到原来的程序。

    tgz.com 糖果站 为您专业解答APP难题。
  • TA的每日心情
    奋斗
    2019-3-6 11:40
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2019-9-20 23:23 | 显示全部楼层
    秋缘 发表于 2019-9-20 08:59
    用while循环,里面的delay值设定小一点。当满足结束条件时跳出while循环,就算在执行delay,但是延迟值小, ...

    if(water_airtest==HIGH)
      {
        digitalWrite(Airmain_switch,HIGH);
        digitalWrite(zhou,HIGH);
        digitalWrite(zhou1,HIGH);
        digitalWrite(zhou2,HIGH);
        digitalWrite(zhou3,HIGH);
      }
      else if(pressure_maintaining==HIGH)
      {
        digitalWrite(Air_singal,HIGH);
        delay(5000);
        digitalWrite(Air_singal,LOW);
        digitalWrite(zhou2,HIGH);
        delay(5000);
        digitalWrite(zhou2,LOW);
        digitalWrite(zhou,HIGH);
        digitalWrite(zhou1,HIGH);
        digitalWrite(zhou3,HIGH);
      }

      else if(supply_water==HIGH)
      {
        digitalWrite(water_singal,HIGH);
      }
       else if(outputair==HIGH)
      {
        digitalWrite(zhou1,HIGH);
      }

      if(water_airtest == HIGH || pressure_maintaining==HIGH || supply_water ==HIGH || outputair==HIGH)
      {
        i=true;
      }
    }

    void ResetALL_switch()
    {
      digitalWrite(Airmain_switch,LOW);
      digitalWrite(Air_singal,LOW);
      digitalWrite(water_singal,LOW);
      digitalWrite(zhou,LOW);
      digitalWrite(zhou1,LOW);
      digitalWrite(zhou2,LOW);
      digitalWrite(zhou3,LOW);
    }

    秋缘, 你好 ,    就是我中间用了两个delay 的那条 , 能帮忙修改个while 示例吗,,  有时候我想在它执行delay 过程中  外部插入中断
  • TA的每日心情
    奋斗
    2019-3-6 11:40
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2019-9-20 23:25 | 显示全部楼层
    coloz 发表于 2019-9-20 09:13
    上面说的可以,或者用millis控制时间

    大神有具体示例吗  
  • TA的每日心情
    奋斗
    2019-10-16 09:57
  • 签到天数: 112 天

    [LV.6]常住居民II

    发表于 2019-9-23 14:17 | 显示全部楼层
    本帖最后由 秋缘 于 2019-9-24 09:10 编辑
    737434013@ 发表于 2019-9-20 23:23
    if(water_airtest==HIGH)
      {
        digitalWrite(Airmain_switch,HIGH);

    while(1){
      for(int i=0; i<50 ;i++){
        delay(100);
        if(按钮处于按下状态){//当你需要停止delay时,按下按钮触发break,退出循环
          break;
        }
        else
        ;
      }
    break;//这里应该还要加一个,上面的只能退出for结构。这个程序是while(1)的 ,你可以按照实际需要改一下while条件
    }
    这是可以停止delay,进行后续函数运行的程序,主要是通过break跳出while循环,这样就能提前delay。大体意思是这样
    至于中断函数,因为执行完中断函数后还会继续中断前的函数,所以应该不适用
  • TA的每日心情
    奋斗
    2019-3-6 11:40
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2019-9-23 22:18 | 显示全部楼层
    秋缘 发表于 2019-9-23 14:17
    while(1){
      for(int i=0; i

    好的,谢谢! 学习中  我自已试试看,
  • TA的每日心情
    奋斗
    2019-10-16 09:57
  • 签到天数: 112 天

    [LV.6]常住居民II

    发表于 2019-9-24 09:08 | 显示全部楼层
    737434013@ 发表于 2019-9-23 22:18
    好的,谢谢! 学习中  我自已试试看,

    幸好你回了,缺了一个break,要再加一个break来退出while循环,不然会死循环
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    【Arduino】108种传感器模块系列实验(104)---MAX30102手腕心率
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    萌新报道 刚购买了一个watchx
    萌新报道 刚购买了一个wat
    就这货 但是网上让下载库 我点加载以后他提示没法用。。 求大神帮忙 谢谢了
    【Arduino】108种传感器系列实验(15)---手指侦测心跳传感...
    【Arduino】108种传感器系
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    求助!GM65二维码扫描模块怎么用?
    求助!GM65二维码扫描模块
    求助!GM65二维码扫描模块怎么用? 卖家给的资料真的看不懂该怎么弄。。( ̄▽ ̄)~*
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表