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库的使用方法相关推荐

  1. 使用 MsTimer2 库

    文章目录 1. 使用 MsTimer2 库定时做多件事(教程)(定时器timer2的使用) 1.1 相关资料 1.2 MsTimer2 库简单又好用, 1.2.1 库地址: 1.2.2 MsTimer ...

  2. 离线安装python第三方库的实用方法:解决公司内网,服务器/电脑不能上网却需要安装python三方库问题(上:Windows环境中)

    离线安装python第三方库的实用方法:解决公司内网,服务器/电脑不能上网却需要安装python三方库问题(上:Windows环境中) 参考文章: (1)离线安装python第三方库的实用方法:解决公 ...

  3. python基本使用-Python time库基本使用方法分析

    本文实例讲述了Python time库基本使用方法.分享给大家供大家参考,具体如下: 时间获取 time() 获取当前时间戳,为一个浮点数 >>>time.time() 151693 ...

  4. python怎么安装requests库-Python3.6安装及引入Requests库的实现方法

    本博客可能没有那么规范,环境之类的配置.只是让你直接开始编程写python. 至于各种配置网络上有多种方法. 本文仅代表我的观点的一种方法. 电脑环境:win10 64位 第一步:下载python. ...

  5. 【错误记录】NDK 导入外部 so 动态库报错 ( java.lang.UnsatisfiedLinkError | Android Studio 配置外部 so 动态库两种方法 )

    文章目录 一.报错信息 二.解决方案 ( Android Studio 配置外部 so 动态库两种方法 ) 1.jniLibs 目录存放 2.libs 目录存放 一.报错信息 外部引用 so 动态库 ...

  6. 开源库的使用方法以及libjpeg的移植详解

    一.开源库的使用方法 (1)移植(×××.解压.配置.修改Makefile.编译或交叉编译).移植的目的是由源码得到三个东西:动态库.so,静态库.a,头文件.h (2)部署(部署动态库so.部署静态 ...

  7. jQuery避免$符和其他JS库冲突的方法对比

    jQuery避免$符和其他JS库冲突的方法对比 1.如果jquery库在第三方库之后引用.这个时候jquery库会占用$. 解决办法:剔除$符号的使用权. <script type=" ...

  8. post提交调用的却是doget方法_Python基础教程 | Requests库的使用方法和细节

    下面我就给大家整理了Requests库的使用方法和细节. 什么是Requests Requests是Python语言编写,基于urllib3,采用Apache2 Licensed开源协议的HTTP库. ...

  9. Android NDK编译中在libs\armeabi中加入第三方so库文件的方法

    Android NDK编译中在libs\armeabi中加入第三方so库文件的方法 假设要加入库文件的名字为libffmpeg.so文件 1.要在project\jni目录下新建一目录prebuilt ...

最新文章

  1. php的memcache和memcached扩展区别
  2. 【Groovy】循环控制 ( Java 语法循环 | 默认的 IntRange 构造函数 | 可设置翻转属性的 IntRange 构造函数 | 可设置是否包含 to 的构造函数 | 0..9 简写 )
  3. mysql 设置查询变量_MySQL查询优化--调整内部变量的详解
  4. 学习笔记(十五)——MySQL(查询)
  5. python polygon函数_Python 人脸识别就多简单,看这个就够了!
  6. linux java main 参数设置_Java虚拟机参数设置
  7. 使用RNN解决NLP中序列标注问题的通用优化思路
  8. bmp文件格式_一次性解决CAD转换成BMP格式图片的问题
  9. 多线程下HttpContext.Current 的问题
  10. 一旦有辞职念头就干不长了吗_如何理性而高效地辞职?
  11. mysql proxy php_mysql Proxy读写分离配置或php mysql读写分离类
  12. PDE9 wave equation: general solution
  13. 拓端tecdat|R语言实现 Copula 算法建模相依性案例分析报告
  14. django settings 定义的变量不存在_【Django】第一期|初识Django以及基本安装方法和配置...
  15. Cgroup 资源配置方法
  16. 计算机网络层之 P2P
  17. 数位板跟数位屏有什么区别,哪个好些?
  18. 【Matlab图像去噪】小波滤波(硬阙值+软阙值)+中值滤波图像去噪【含源码 462期】
  19. JS调用window系统通知
  20. 双端影视APP后台搭建及前端安装编译大概流程

热门文章

  1. 类似于网易新闻客户端的界面实现02
  2. delphi updown控件的使用
  3. chatgpt赋能python:Python将两张图片拼接成一张图:让您的图片处理更高效!
  4. bt分析之bt种子发布---做种(2)
  5. 案例分享:医疗流式细胞术数据文件(.fcs)导出excel表工具
  6. 2021京东Java面试真题:杭州java工资
  7. win10删除文件夹需要提供管理员权限(实测可用超简单方法)
  8. Dgraph安装和使用(一)
  9. 技术人的达摩克利斯之剑
  10. Python 提取信号的包络