PlatformIO使用Arduino[Task Scheduler]库(ESP8266)

       在《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):

 

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值