查看: 489|回复: 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-7-29 00:08
  • 签到天数: 47 天

    [LV.5]常住居民I

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

    本版积分规则

    热门推荐

    ArduinoJason6教程由ArduinoJson作者Benoit亲自出马一对一教学
    ArduinoJason6教程由Ardui
    这几天我觉得社区教学好像缺了点什么,呃呃~我想一想好像是缺少了ArduinoJson6的教学
    Arduino+L298N小车实例教程
    Arduino+L298N小车实例教
    (第一次写教程,如有错漏,敬请拍砖)Arduino+L298N小车实例教程Arduino小车是一个非
    零知开源分享-蓝牙模块与手机APP通信
    零知开源分享-蓝牙模块与
    本篇文章中将讲解蓝牙模块与安卓手机APP进行通信。1、说明MCU:零知开发板-标准板模
    DHT库无法被找到
    DHT库无法被找到
    今天在安装了DHT库之后在编译时却显示无法找到库,请问我是在哪里安装出错了,谢谢大
    (可远程)ESP8266读DHT11温湿度,APP inventor制作app实时显示
    (可远程)ESP8266读DHT11
    原理讲解 原理简述:利用发布订阅模式。第一步,先读取DHT11温湿度数值,第二步,新
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表