查看: 608|回复: 0

关于"多线程"定时任务调度 的经验,给新手参考一下。

[复制链接]

该用户从未签到

发表于 2019-10-26 12:01 | 显示全部楼层 |阅读模式
本帖最后由 ws9528 于 2019-10-26 12:05 编辑

使用这个库的目的:多任务在不同的时间,各做各的事互不干扰。比如,我想2秒种检查一下网络状态,想5秒检查一下服务器状态,想1秒获取一下传感器温度,想3秒把温度发送到服务器上,有了这个定时器,就方便多了,各做各的。互不影响。

软件环境: Arduino  IDE
硬件环境:NodeMCU  5个LED灯

Ticker库是内置库 不用在网上找,不用下载安装,可直接引用。

链接方式如下图

微信图片_20191026115857.jpg
微信图片_20191026115902.jpg

[mw_shl_code=arduino,true]//定义 5个LED灯所使用的针脚
const int led8 = D8;
const int led7 = D7;
const int led6 = D6;
const int led5 = D5;
const int led4 = D4;


//########## 第一步:引用Ticker定时执行库 ####################
#include <Ticker.h>

//########## 第二步:实例化库,生成5个新对象 ####################
Ticker Ding_Shi_Qi_8;
Ticker Ding_Shi_Qi_7;
Ticker Ding_Shi_Qi_6;
Ticker Ding_Shi_Qi_5;
Ticker Ding_Shi_Qi_4;

//########## 第三步:编写上面5个新对象要调用的5个函数 ####################
void led8_Ding_Shi()
{
  int state = digitalRead(led8);  // 获取led8的当前状态
  digitalWrite(led8, !state);     // 将led8设置为相反的状态
}
void led7_Ding_Shi()
{
  int state = digitalRead(led7);
  digitalWrite(led7, !state);
}
void led6_Ding_Shi()
{
  int state = digitalRead(led6);
  digitalWrite(led6, !state);
}
void led5_Ding_Shi()
{
  int state = digitalRead(led5);
  digitalWrite(led5, !state);
}
void led4_Ding_Shi()
{
  int state = digitalRead(led4);
  digitalWrite(led4, !state);
}






void setup()
{
  pinMode(led8, OUTPUT);
  pinMode(led7, OUTPUT);
  pinMode(led6, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led4, OUTPUT);

  //########## 第四步:用实例化的名称调用对应的函数 ####################
  Ding_Shi_Qi_8.attach(0.1, led8_Ding_Shi);
  Ding_Shi_Qi_7.attach(0.2, led7_Ding_Shi);
  Ding_Shi_Qi_6.attach(0.3, led6_Ding_Shi);
  Ding_Shi_Qi_5.attach(0.4, led5_Ding_Shi);
  Ding_Shi_Qi_4.attach(0.5, led4_Ding_Shi);

}



void loop() {}[/mw_shl_code]




常用方法
void attach(float seconds, callback_t callback)
void attach(float seconds, void (*callback)(TArg), TArg arg)
设置调度任务,该任务会反复执行,输入参数分别为时间间隔(秒)、回调函数、不大于四字节的数据;
void attach_ms(uint32_t milliseconds, callback_t callback)
void attach_ms(uint32_t milliseconds, void (*callback)(TArg), TArg arg)
设置调度任务,该任务会反复执行,输入参数分别为时间间隔(毫秒)、回调函数、不大于四字节的数据;
void once(float seconds, callback_t callback)
void once(float seconds, void (*callback)(TArg), TArg arg)
设置调度任务,该任务只执行一次,输入参数分别为时间间隔(秒)、回调函数、不大于四字节的数据;
void once_ms(uint32_t milliseconds, callback_t callback)
void once_ms(uint32_t milliseconds, void (*callback)(TArg), TArg arg)
设置调度任务,该任务只执行一次,输入参数分别为时间间隔(毫秒)、回调函数、不大于四字节的数据;
void detach()
停止任务调度;


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

一个通过串口操作Wemos D1连接无线网的程序
一个通过串口操作Wemos D1
[md]# 作案动机 前段时间买了一块Wemos D1的板子,集成了ESP8266,理论上8266能干的它
如何制作一个带指纹识别的机械键盘
如何制作一个带指纹识别的
在Windows 10发布时,除了使用传统的登陆密码,操作系统还支持三种Windows Hello类
串口丢失接收的字符
串口丢失接收的字符
程序是循环发送字符串 abc 给uno板,然后测试uno板有没有正确的接收到字符串 abc,测
无法安装驱动
无法安装驱动
和教学贴里面不一样的是,我这个板子在我的电脑上出现了八个未知设备,但是在其他电脑
arduino 串口通信AT设置
arduino 串口通信AT设置
在直接把ATK-LORA-01模块通过USB-TTL接口接到电脑上在串口里输入AT+命令的时候会有ERR
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表