硬件中断定时库 MsTimer2 的使用

硬件中断定时库 MsTimer2 的使用

硬件中断定时库 MsTimer2 的使用

【Arduino开发指南】

很多时候需要精准定时的执行任务,

可以使用硬件中断定时库 MsTimer2

http://playground.arduino.cc/Main/MsTimer2

(注意此库精准度只有以 milli second 为单位)

MsTimer2 库简单好用, 只有三个 function:

(1)设定时间间与要执行的 function

MsTimer2::set( ms, your_function);

(2)启动中断

MsTimer2::start();

(3)必要时可停止中断

MsTimer2::stop();

先來看一个例子:

#include

const int INTERVAL = 500; // 0.5 秒 = 500ms

void onTimer( ) {

static int val = 0;

val = 1- val; // toggle 0, 1

digitalWrite(13, val); // pin 13 LED

}

void setup( ) {

pinMode(13, OUTPUT);

MsTimer2::set(INTERVAL, onTimer); // INTERVAL ms

MsTimer2::start( );

}

void loop( ) {

delay(6000);

MsTimer2::stop( );

delay(3000);

MsTimer2::start( );

}

这个例子让 pin13 的 LED 灯闪烁大约6秒, 然后停止大约3秒,

之后又闪烁大约6秒, 然后停大约3秒, ...

用 MsTimer2 只能设定一件要定时做的事 !

查看 MsTimer2 库的 source code 会发现,

重复使用 MsTimer2::set( ) 只有最后一次有效,

每次使用 MsTimer2::set( ) 会覆盖掉前一次的设定 !!

注意事项:

如果使用了 MsTimer2 库,

则 pin11 和 pin3 就不能再用做 PWM 输出了! 因为该 pin3 和 pin11 的 PWM 是靠 timer2 帮忙的! (tone( ) 也是**)

注意 Servo.h 库于 TimerOne 都是使用内部订时器 timer1 会影响 pin9, pin10 的 PWM

若用两个 Tone 变量则 timer1 也会被用掉, 用三个 Tone 则连控制 millis( )的 timer0 也会被用掉 !!!

別忘了, timer0 负责控制 pin5 和 pin6 的 PWM 輸出 !!!

只要不去改变 timer 的 Prescaler就不會影响其控制的 PWM pin, 但MsTimer2 库于 tone( )都会改变 Prescaler !!

用 MsTimer2 库是在中断时做事, 越快做完越好, 最好只是读取或设置一些 volatile 变量,然后在loop()内根据这些变量做相应处理,

还有, 这时中断在被禁止状态(interrupt is disable), 所以, 不要做会用到中断的事, 例如要避免做类似 Serial.print 的事 !

- 本文由用户 发布,文中观点仅代表作者本人,不代表本站立场。

- 如需转载,请联系作者;如有侵权,请联系本站处理。

2022-06

阅读(1940)

评论(0)

标签:

创客

Arduino

定时器

微信分享

评论

涨知识

舵机

舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。在高档遥控玩具,如飞机、潜艇模型,遥控机器人中已经得到了普遍应用。

评论:

提交

相关文章

ESP32 FreeROS 双核使用

ESP32系列(包括ESP32-S3)搭载Xtensa双核处理器,默认情况下Arduino框架仅使用单核运行用户代码,通过多核编程,可以充分利用硬件资源来提升系统响应和性能。

理解 MSBFIRST(最高有效位)和 LSBFIRST(最低有效位)

在本文中,先解释 MSB(最高有效位)和 LSB(最低有效位)的概念,以及 MSBFIRST 和 LSBFIRST。然后展示了 MSBFIRST 和 LSBFIRST 的使用如何影响移位寄存器的输出。

Arduino 和 TB6612FNG 驱动直流电机

TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制其转速与方向,输入电压在3V~12V,因此在集成化、小型化的电机控制系统中,它可以作为理想的电机驱动器件。

Arduino-ESP32 Preferences库使用详解

Arduino-ESP32项目提供的Preferences库是一个专为ESP32设计的非易失性存储解决方案,它替代了传统的Arduino EEPROM库,提供了更强大、更可靠的数据存储功能。

Arduino Serial 接收数字

在Arduino中,通过串行端口接收数字通常涉及使用Serial.read()、Serial.readString()、Serial.parseInt()等方法。

tinkercad热敏电阻原理图绘制

Arduino与74HC595驱动8位数码管

Arduino 8×8 共阳极LED点阵显示(74HC595)

本文主要介绍8×8 共阳极LED点阵显示实验,分别是:介绍74HC595点阵模块、点阵显示指定行列LED、点阵显示汉字。

Arduino 上使用红外遥控器

日常生活中我们会接触到各式各样的遥控器,电视机、空调、机顶盒等都有专用的遥控器,很多智能手机也在软硬件上对红外遥控做了支持,可以集中遥控绝大部分家用电器。本篇介绍红外遥控相关原理及应用,通过红外遥控器控制 Uno 板载 LED 灯。

Arduino 驱动 8×8 LED点阵屏

LED点阵屏由LED发光二极管组成,通过控制LED亮灭来显示文字、图片、动画、视频等,被广泛应用于公共场合做信息展示,如广告屏、公告牌等。