查看: 593|回复: 7

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

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

    [LV.1]初来乍到

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

    我用attachinterrupt 按一下,断开一下,又接着 未完成的delay 继续在执行    
  • TA的每日心情
    奋斗
    2020-1-13 09:17
  • 签到天数: 176 天

    [LV.7]常住居民III

    发表于 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-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的每日心情
    奋斗
    2020-1-13 09:17
  • 签到天数: 176 天

    [LV.7]常住居民III

    发表于 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的每日心情
    奋斗
    2020-1-13 09:17
  • 签到天数: 176 天

    [LV.7]常住居民III

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

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

    本版积分规则

    热门推荐

    创客火首发无人机编队套装,开启不一样的人工智能教育
    创客火首发无人机编队套装
    2017年国务院发布《新一代人工智能发展规划》,提出要广泛开展人工智能科普活动,在中
    <ESP8266NodeMCU>网络连接问题
    <ESP8266NodeMCU>网络连接
    在我家的WiFi可以连上,但在学校里无论是WiFi还是手机热点就是连不上。 想让各位康
    基于机器视觉的智能分拣机械臂
    基于机器视觉的智能分拣机
    本作品是一个基于机器视觉的智能机械臂操作平台,其采用atmega32单片机作为主控制系统
    晒图ESP8266一个框架
    晒图ESP8266一个框架
    好久没发帖了,出来活跃活跃一下。ESP8266免身份登录截图。 最近外研究新的架构M2M或P
    blinker做的卧室灯开关发现一个问题
    blinker做的卧室灯开关发
    做了一个卧室灯开关并安装到墙壁86盒中,实现了小爱同学,墙壁开关点动控制开关灯.看起
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表