查看: 129|回复: 3

[未解决] 关于定时器中断问题

[复制链接]
  • TA的每日心情
    郁闷
    2019-1-13 14:04
  • 签到天数: 40 天

    [LV.5]常住居民I

    发表于 2019-1-13 01:16 | 显示全部楼层 |阅读模式
    用的MsTimer2这个库,uno的板子,我想时刻检测一个传感器的值,
    void laser_change(){
       z=y-x-40;
       r=x-y-40;

    }
    void laser_count(){
    y=x;
    x=test();
    }

    y和x的值都是在变化的,我把这两个函数放在loop里运行,没毛病,打印出来的z和r的值也很对,也是在变化的,但是如果我把这两个函数放一起作为定时器中断的函数,运行以后打印z的值就一直为-40,这是为什么???而且在定时器中断的函数里也没法Serial.print,我还是在loop打印的,难道定时器中断里不能用串口吗?
    我是500ms的定时器中断

    该用户从未签到

    发表于 2019-1-13 10:50 | 显示全部楼层
    本帖最后由 ws9528 于 2019-1-13 10:51 编辑

    我是这样处理 多任务的,也不知到错对,但用起来感觉还行。执行LED 不会影响其他函数的执行时间。你参考一下。多个任务就用多个这样的函数来处理就行了。
    // 定义LED灯针脚号
    const int Wifi_LED =  13;
    int LED_ZhuangTai = LOW;
    unsigned long ShangCiShiJian ;//上次时间//注意此声明必须是一个全局声明,不能在函数内部声明成局部变量
    void Led() {
      if ( millis() - ShangCiShiJian >= 50) {
        ShangCiShiJian = millis();

        if (LED_ZhuangTai == LOW) {
          LED_ZhuangTai = HIGH;
        } else {
          LED_ZhuangTai = LOW;
        }
        digitalWrite(Wifi_LED, LED_ZhuangTai);
      }
    }




    void setup() {
      pinMode(Wifi_LED, OUTPUT);  // 设置LED针脚类型为状态输出针脚
    }

    void loop() {
      Led();
    }
  • TA的每日心情
    郁闷
    2019-1-13 14:04
  • 签到天数: 40 天

    [LV.5]常住居民I

     楼主| 发表于 2019-1-13 14:00 | 显示全部楼层
    本帖最后由 yjm19971027 于 2019-1-13 14:02 编辑
    ws9528 发表于 2019-1-13 10:50
    我是这样处理 多任务的,也不知到错对,但用起来感觉还行。执行LED 不会影响其他函数的执行时间。你参考一 ...

    哦哦哦,我知道你这种方法,我现在用的是这种void flash(){
       laser_count();
       laser_change();
    }
    void loop() {
    flash();
    switch (state)
    {
      case 1:{
        floor_flag=true;
        Motor_up();
        if(floor_count==4)
          {
            Motor_shutdown();
            state=2;
          }
        break;
        }
      case 2:{    。。。。。。


    任务和传感器更新都放在loop里,任务的改变靠改变state,但是里面不能用delay了,不然会出现一些不可预料的问题
  • TA的每日心情
    郁闷
    2019-1-13 14:04
  • 签到天数: 40 天

    [LV.5]常住居民I

     楼主| 发表于 2019-1-13 14:04 | 显示全部楼层
    但是我还是很奇怪,为什么我放在定时器中断里的赋值表达式会更新不了
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    KittenBot杯第六届开源硬件开发大赛启动啦
    KittenBot杯第六届开源硬
    大赛简介: 第六届开源硬件开发大赛由Arduino中文社区发起 由KittenBot冠名赞助
    游戏机和开发板脑洞一下;这个本来就是开源的。
    游戏机和开发板脑洞一下;
    这个开发板和标准UNO是1;1的;通用。做在一起是因为可以不用游戏机时可以切换回来做开
    新人求助,关于舵机和限位开关。
    新人求助,关于舵机和限位
    新人求助社区各位哥哥姐姐,具体需要用航模遥控器的3段开关控制Arduino nano控制一个3
    基于MWC开源飞控DIY关键总结分享:
    基于MWC开源飞控DIY关键总
    很早就已经很想写这么一个帖,但总是由于各种原因没能落实,但最后还是找了时
    有关函数返回值的问题
    有关函数返回值的问题
    求助大神们,这个程序中有return返回值,但为什么有这个“ warning: return-statement
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表