查看: 321|回复: 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-3-3 00:05
  • 签到天数: 40 天

    [LV.5]常住居民I

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

    本版积分规则

    热门推荐

    利用MICRO:BIT制作的飞机小游戏
    利用MICRO:BIT制作的飞机
    一.项目名称: 利用MICRO:BIT制作的飞机小游戏二.制作目的: 带孩子多了解micro:bit
    全过程展示:PWM自定义、测速、PID调速、PID自整定
    全过程展示:PWM自定义、
    有一天,电控小白在某宝上买来了一块Arduino Mega2560、一款直流电机。小白想:“这款
    OneNET之星再度闪耀 物联网创客马拉松大赛正式启动
    OneNET之星再度闪耀 物联
    4月9日,2019中国移动OneNET之星2.0物联网创客马拉松正式上线。大赛由中国移动集
    求助!!!!
    求助!!!!
    想借助数据上传工具将串口数据传到乐联网,结果一直上传失败,实在不知道怎么修
    BLE胸带+GPS墨水屏运动心率表(0421更新代码及原理图)
    BLE胸带+GPS墨水屏运动心
    0421了更新代码原理状语从句:打图产品板的PCB已经到达本市。 项目简介: 我喜欢
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表