查看: 510|回复: 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 | 显示全部楼层
    但是我还是很奇怪,为什么我放在定时器中断里的赋值表达式会更新不了
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    做了一个定时喂鱼的装置
    做了一个定时喂鱼的装置
    快放假了,怕鱼饿瘦了做了这么个控制,每天定时投鱼粮。用ESP8266编写,web设定参数,
    【项目】基于Arduino Nano的多功能桌面感应垃圾桶
    【项目】基于Arduino Nano
    基于Arduino Nano的多功能桌面感应垃圾桶随着大学生活不断往前迈进,宿舍桌面上的杂物
    arduino +MPU6050控制云台相机匀速转动(接受付费)!
    arduino +MPU6050控制云台
    最近在调试云台(用的有刷直流减速电机挂大相机的那种),发现相机在往下移动时往往速
    光敏电阻检测环境光实验
    光敏电阻检测环境光实验
    本文节选自《Arduino程序设计基础》 一些简单的电子元件就可以做传感器使用,例如我
    基于Esp8266的点阵时钟
    基于Esp8266的点阵时钟
    芯片是ESP8266 12F 配合点阵单元板(64*32,单色),实现自动对时,天气预报,农历,
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表