? ? ? ?在《PlatformIO使用Arduino[Ticker]库(ESP8266)》该篇笔记中,我们用Arduino环境下的Ticker库实现了4颗LED灯的定时闪烁。
PlatformIO使用Arduino[Ticker]库(ESP8266)_liguichuan的博客-CSDN博客本文介绍了在PlatformIO IDE中使用Arduino环境的[Ticker]库来编写NodeMCU(ESP8266)的示例程序。分别让4颗LED进行不同频率的闪烁。https://blog.csdn.net/liguichuan/article/details/122372094?spm=1001.2014.3001.5501? ? ? ?接下来,我们使用Arduino环境下的Task Scheduler库,采用任务调度的方式,来实现了9颗LED灯的闪烁。
Wiki - Gitee.comhttps://gitee.com/github_code/TaskScheduler/wikis/Home? ? ? ?写程序前,首先将需要用到的库安装到项目中去,请按下述截图进行安装:
?
? ? ? ? 接下来我们来写程序(\src\main.cpp):
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <TaskScheduler.h> //包含此头文件,才能使用任务调度器
//定义LED灯接口
#define led1 16
#define led2 5
#define led3 4
#define led4 0
#define led5 2
#define led6 14
#define led7 12
#define led8 13
#define led9 15
Scheduler Sch;//创建一个任务调度器
//声明回调函数
void led1cb();
void led2cb();
void led3cb();
void led4cb();
void led5cb();
void led6cb();
void led7cb();
void led8cb();
void led9cb();
Task led1_task(100, TASK_FOREVER, &led1cb); //100MS闪烁一次
Task led2_task(200, TASK_FOREVER, &led2cb); //200MS闪烁一次
Task led3_task(300, TASK_FOREVER, &led3cb); //300MS闪烁一次
Task led4_task(400, TASK_FOREVER, &led4cb); //400MS闪烁一次
Task led5_task(500, TASK_FOREVER, &led5cb); //500MS闪烁一次
Task led6_task(600, TASK_FOREVER, &led6cb); //600MS闪烁一次
Task led7_task(700, TASK_FOREVER, &led7cb); //700MS闪烁一次
Task led8_task(800, TASK_FOREVER, &led8cb); //800MS闪烁一次
Task led9_task(900, TASK_FOREVER, &led9cb); //900MS闪烁一次
void setup()
{
// put your setup code here, to run once:
pinMode(led1,OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
pinMode(led9, OUTPUT);
//初始化调度器
Sch.init();
//向调度器添加任务
Sch.addTask(led1_task);
Sch.addTask(led2_task);
Sch.addTask(led3_task);
Sch.addTask(led4_task);
Sch.addTask(led5_task);
Sch.addTask(led6_task);
Sch.addTask(led7_task);
Sch.addTask(led8_task);
Sch.addTask(led9_task);
//使能任务
led1_task.enable();
led2_task.enable();
led3_task.enable();
led4_task.enable();
led5_task.enable();
led6_task.enable();
led7_task.enable();
led8_task.enable();
led9_task.enable();
}
void loop() {
// put your main code here, to run repeatedly:
Sch.execute();//执行调度器
}
//实现各任务的回调函数
void led1cb()
{
if(digitalRead(led1)==1)
{
digitalWrite(led1, 0);
}
else
{
digitalWrite(led1, 1);
}
}
void led2cb()
{
if (digitalRead(led2) == 1)
{
digitalWrite(led2, 0);
}
else
{
digitalWrite(led2, 1);
}
}
void led3cb()
{
if (digitalRead(led3) == 1)
{
digitalWrite(led3, 0);
}
else
{
digitalWrite(led3, 1);
}
}
void led4cb()
{
if (digitalRead(led4) == 1)
{
digitalWrite(led4, 0);
}
else
{
digitalWrite(led4, 1);
}
}
void led5cb()
{
if (digitalRead(led5) == 1)
{
digitalWrite(led5, 0);
}
else
{
digitalWrite(led5, 1);
}
}
void led6cb()
{
if (digitalRead(led6) == 1)
{
digitalWrite(led6, 0);
}
else
{
digitalWrite(led6, 1);
}
}
void led7cb()
{
if (digitalRead(led7) == 1)
{
digitalWrite(led7, 0);
}
else
{
digitalWrite(led7, 1);
}
}
void led8cb()
{
if (digitalRead(led8) == 1)
{
digitalWrite(led8, 0);
}
else
{
digitalWrite(led8, 1);
}
}
void led9cb()
{
if (digitalRead(led9) == 1)
{
digitalWrite(led9, 0);
}
else
{
digitalWrite(led9, 1);
}
}
? ? ? ?编译并上传程序到开发板,同时在面包板中连接好9颗LED灯到对应的引脚下上,即可看到如下效果:
led1------GPIO:16
led2------GPIO:5
led3------GPIO:4
led4------GPIO:0
led5------GPIO:2
led6------GPIO:14
led7------GPIO:12
led8------GPIO:13
led9------GPIO:15
? ? ? ?库中自带了一些示例,供学习参考(.pio\libdeps\nodemcuv2\TaskScheduler\examples):
?
|