millis()和MsTimer2库的使用方法
0 前言
使用这两个函数主要是为了多任务处理,可是在ESP8266使用MsTimer2库时会出错。
1 MsTimer2使用方法
使用MsTimer2库函数做多件任务
/// 利用 MsTimer2 定时做三件事
#include <MsTimer2.h>
const int intA = 250; //每 250 ms 做一次 myJobOne
const int intB = 250; // 每 250 ms 做一次 myJobTwo
int int38 = 1000; // 每 1 秒做一次 myJob666; 没规定说必须用 const : -)
int led2 = 8; // pin 8
int led3 = 7; // pin 7
const int INTERVAL = 1; // 0.001 秒 = 1ms
void ggyy( ) {static unsigned int gy = 0;++gy;if( gy % intA == 0) myJobOne( );if( gy % intB == 0) myJobTwo( );if( gy % int38 == 0) myJob666( );
}
void setup( ) {pinMode(13, OUTPUT);pinMode(led2, OUTPUT); pinMode(led3, OUTPUT);MsTimer2::set(INTERVAL, ggyy); // INTERVAL ms MsTimer2::start( );
}
void loop( ) {// 这次 loop( ) 内故意甚么都不写
}
void myJobOne( ) {static int gy = 0;gy = 1- gy; // toggle 0, 1digitalWrite(13, gy); // pin 13 LED
}
void myJobTwo( ) {static int gy = 1; // 故意与 myJobOne 内gy不同 ! gy = 1- gy; // toggle 0, 1digitalWrite(led2, gy); // pin 8 LED
}
void myJob666( ) {static int gy = 0;gy = 1- gy; // toggle 0, 1digitalWrite(led3, gy); // pin 7 LED
}
2 millis()使用方法
经典例程:使用millis()函数控制Arduino开发板内置LED的点亮和熄灭。
unsigned long previousBlinkTime;
int blinkInterval = 1000; //LED闪烁时间间隔
bool toggle;void setup() {pinMode(LED_BUILTIN, OUTPUT); Serial.begin(9600);
}void loop() { unsigned long currentMillis = millis(); // 获取当前时间millisBlink(currentMillis);
}void millisBlink(unsigned long currentTime) { //检查是否到达时间间隔if (currentTime - previousBlinkTime >= blinkInterval) { //如果时间间隔达到了toggle = (toggle == 1) ? 0 : 1; digitalWrite(LED_BUILTIN, toggle); //执行闪烁LED操作previousBlinkTime = currentTime; // 将检查时间复位 Serial.print(F("toggle = "));Serial.println(toggle); } else if (currentTime - previousBlinkTime <= 0) { // 如果millis时间溢出previousBlinkTime = currentTime;}
}
同时做两件事,例程
//Super Simple Timer, 2 jobs
const long aaEvery = 543; // 事件1的间隔时间
const long bbEvery = 1357; // 事件2的间隔时间
unsigned long aaUp; // 最后刚做过 myJobOne( ) 的时间
unsigned long bbUp;
//...
void setup( ) {//...aaUp = millis( ); myJobOne( );bbUp = millis( ); myJobTwo( );//...
}
void loop( ) {tryAA( ); // 事件1tryBB( ); // 事件2//... 其他事//...
}
void tryAA( ) {if(millis( ) - aaUp < aaEvery) return; // 时间1未到aaUp = millis( ) ;myJobOne( ); // 时间到
}
void myJobOne( ) {//时间到后应执行的函数
}
void tryBB( ) {if(millis( ) - bbUp < bbEvery) return; //时间2未到bbUp = millis( );myJobTwo( );
}
void myJobTwo( ) {//... your Job 2
}[/mw_shl_code]
millis()和MsTimer2库的使用方法相关推荐
- 使用 MsTimer2 库
文章目录 1. 使用 MsTimer2 库定时做多件事(教程)(定时器timer2的使用) 1.1 相关资料 1.2 MsTimer2 库简单又好用, 1.2.1 库地址: 1.2.2 MsTimer ...
- 离线安装python第三方库的实用方法:解决公司内网,服务器/电脑不能上网却需要安装python三方库问题(上:Windows环境中)
离线安装python第三方库的实用方法:解决公司内网,服务器/电脑不能上网却需要安装python三方库问题(上:Windows环境中) 参考文章: (1)离线安装python第三方库的实用方法:解决公 ...
- python基本使用-Python time库基本使用方法分析
本文实例讲述了Python time库基本使用方法.分享给大家供大家参考,具体如下: 时间获取 time() 获取当前时间戳,为一个浮点数 >>>time.time() 151693 ...
- python怎么安装requests库-Python3.6安装及引入Requests库的实现方法
本博客可能没有那么规范,环境之类的配置.只是让你直接开始编程写python. 至于各种配置网络上有多种方法. 本文仅代表我的观点的一种方法. 电脑环境:win10 64位 第一步:下载python. ...
- 【错误记录】NDK 导入外部 so 动态库报错 ( java.lang.UnsatisfiedLinkError | Android Studio 配置外部 so 动态库两种方法 )
文章目录 一.报错信息 二.解决方案 ( Android Studio 配置外部 so 动态库两种方法 ) 1.jniLibs 目录存放 2.libs 目录存放 一.报错信息 外部引用 so 动态库 ...
- 开源库的使用方法以及libjpeg的移植详解
一.开源库的使用方法 (1)移植(×××.解压.配置.修改Makefile.编译或交叉编译).移植的目的是由源码得到三个东西:动态库.so,静态库.a,头文件.h (2)部署(部署动态库so.部署静态 ...
- jQuery避免$符和其他JS库冲突的方法对比
jQuery避免$符和其他JS库冲突的方法对比 1.如果jquery库在第三方库之后引用.这个时候jquery库会占用$. 解决办法:剔除$符号的使用权. <script type=" ...
- post提交调用的却是doget方法_Python基础教程 | Requests库的使用方法和细节
下面我就给大家整理了Requests库的使用方法和细节. 什么是Requests Requests是Python语言编写,基于urllib3,采用Apache2 Licensed开源协议的HTTP库. ...
- Android NDK编译中在libs\armeabi中加入第三方so库文件的方法
Android NDK编译中在libs\armeabi中加入第三方so库文件的方法 假设要加入库文件的名字为libffmpeg.so文件 1.要在project\jni目录下新建一目录prebuilt ...
最新文章
- php的memcache和memcached扩展区别
- 【Groovy】循环控制 ( Java 语法循环 | 默认的 IntRange 构造函数 | 可设置翻转属性的 IntRange 构造函数 | 可设置是否包含 to 的构造函数 | 0..9 简写 )
- mysql 设置查询变量_MySQL查询优化--调整内部变量的详解
- 学习笔记(十五)——MySQL(查询)
- python polygon函数_Python 人脸识别就多简单,看这个就够了!
- linux java main 参数设置_Java虚拟机参数设置
- 使用RNN解决NLP中序列标注问题的通用优化思路
- bmp文件格式_一次性解决CAD转换成BMP格式图片的问题
- 多线程下HttpContext.Current 的问题
- 一旦有辞职念头就干不长了吗_如何理性而高效地辞职?
- mysql proxy php_mysql Proxy读写分离配置或php mysql读写分离类
- PDE9 wave equation: general solution
- 拓端tecdat|R语言实现 Copula 算法建模相依性案例分析报告
- django settings 定义的变量不存在_【Django】第一期|初识Django以及基本安装方法和配置...
- Cgroup 资源配置方法
- 计算机网络层之 P2P
- 数位板跟数位屏有什么区别,哪个好些?
- 【Matlab图像去噪】小波滤波(硬阙值+软阙值)+中值滤波图像去噪【含源码 462期】
- JS调用window系统通知
- 双端影视APP后台搭建及前端安装编译大概流程