查看: 174|回复: 3

[已解决] 求助,中断问题

[复制链接]
  • TA的每日心情
    开心
    2019-2-12 19:32
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-2-12 09:53 | 显示全部楼层 |阅读模式
    本帖最后由 qinwenyuqw 于 2019-2-13 09:42 编辑

    #include <Servo.h>   //函数声明,引用函数库舵机函数
    Servo myservo1;      // 定义1号舵机
    Servo myservo2;      // 定义2号舵机
    Servo myservo3;      // 定义3号舵机
    int pbIn = 0;  //中断器一根线插在主板2号针脚,另一根插在5v针脚
    void setup()   //主程序
    {
      myservo1.attach(5);   //1号机插在主板5号针脚
      myservo2.attach(9);   //2号机插在主板9号针脚
      myservo3.attach(11);  //3号机插在主板11号针脚
      attachInterrupt(pbIn,ser,CHANGE);
    }   //检测中断,按下中断开关,停止按键程序,执行led亮灯程序

    void loop()    //按键程序
    {
      myservo1.write(30);  //1号抬起30度
      myservo2.write(30);  //2号抬起30度
      myservo3.write(30);  //3号抬起30度
      delay(100);          //延时500毫秒(0.5秒)
      myservo1.write(0);   //1号点击
      delay(100);          //延时500毫秒(0.5秒)
      myservo1.write(15);  //1号抬起
      delay(500);          //延时500毫秒(0.5秒)
      myservo2.write(0);   //2号点击
      delay(100);          //延时500毫秒(0.5秒)
      myservo2.write(15);  //2号抬起
      delay(500);          //延时500毫秒(0.5秒)
      myservo3.write(0);   //3号点击
      delay(100);          //延时500毫秒(0.5秒)
      myservo3.write(15);  //3号抬起
      delay(500);          //延时500毫秒(0.5秒)
    }
    void ser()   //中断程序,led亮灯
    {
      myservo1.write(90);  //1号抬起30度
      myservo2.write(90);  //2号抬起30度
      myservo3.write(90);  //3号抬起30度
    delay(99999999999999999999999999999999999999);
    }

    鼠标右键点击后中断不执行,应该怎么改呢?

  • TA的每日心情
    开心
    2019-2-1 08:59
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-2-12 10:46 | 显示全部楼层
    int Inpin = 2;  //中断器一根线插在主板2号针脚,另一根接GND,使用中断0
    int ledPin = 13;  //
    void setup()   //主程序
    {
      pinMode(ledPin, OUTPUT);
      pinMode(Inpin, INPUT_PULLUP);  //开启2号针脚内部上拉
      attachInterrupt(0, ser, CHANGE);
    }   //检测中断,按下中断开关,执行led亮灯0.5秒后熄灭,释放按键,执行led亮灯亮1秒,返回主程序

    void loop()    //按键程序
    {
      digitalWrite(ledPin, LOW); //LED关闭
      delay(500);          //延时500毫秒(0.5秒)
    }
    void ser()   //中断程序,led亮灯
    {
      int val = digitalRead(Inpin);
      if (val == 0 ) {
        digitalWrite(ledPin, HIGH);
        delay(500);
        digitalWrite(ledPin, LOW);
      }
      else
      {
        digitalWrite(ledPin, HIGH);
        delay(1000);
      }
    }
  • TA的每日心情
    开心
    2016-11-3 13:00
  • 签到天数: 52 天

    [LV.5]常住居民I

    发表于 2019-2-12 16:04 | 显示全部楼层
    首先,舵机的信号是由定时器做的,外部中断的优先级高于定时器中断。
    其次,delay也是定时器做的,与上面一个同理。

    所以,都不会生效。最切合实际的方法是在外部中断里面设置flag,在loop中检测flag的变化。
    如果你要说你的loop执行太慢,请采用状态机或者减少阻塞性语句的使用。
    打赏作者鼓励一下!
  • TA的每日心情
    郁闷
    2019-2-15 13:51
  • 签到天数: 39 天

    [LV.5]常住居民I

    发表于 2019-2-12 19:28 | 显示全部楼层
    中断处理程序,连用延时都很讲究,你这放个死循环(实际上只能是个长延时,这么多9早32bit截断了)是要飞天...
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    KittenBot杯第六届开源硬件开发大赛启动啦
    KittenBot杯第六届开源硬
    大赛简介: 第六届开源硬件开发大赛由Arduino中文社区发起 由KittenBot冠名赞助
    求助,Due使用问题。
    求助,Due使用问题。
    如图,Due没有SPI库和Wire库。
    arduino+onenet+edp协议
    arduino+onenet+edp协议
    每次在edp.c这里报错,请问这是什么问题?(这一句本身应该没有问题的)
    一文教你选择Arduino开发板,小白进
    一文教你选择Arduino开发
    笔者在2016年接触了Arduino,跳了万条坑,行了千里弯,到今天也算是Arduino的一
    能够与arduino结合的嵌入式视觉识别模块
    能够与arduino结合的嵌入
    该视觉识别模块是我司于2018年新推出的产品,处理器采用双核MCU,面向创客以及steam
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表