Arduino学习记录(1) : 简单多线程
程序员文章站
2022-04-02 11:06:22
Arduino学习记录1:简单多线程UPCer-小逆Arduino学习记录文章目录Arduino学习记录1:简单多线程前言一、Scoop库下载二、Ardiuino IDE添加库三、使用步骤1.引入库2.读入数据总结前言遇到这样一道题目,需要多线程来实现,在网上找好久程序调度相关内容发现都太过麻烦,直到看到了这篇文章https://blog.csdn.net/qq_39591322/article/details/89952869其中的使用Scoop库实现多线程简单好用一、Scoop库下载...
记录小逆学习中的各种踩坑
前言
遇到这样一道题目,需要多线程来实现,在网上找好久程序调度相关内容发现都太过麻烦,直到看到了这篇文章
Arduino的多线程
其中的使用Scoop库实现多线程简单易用
一. Scoop库下载
GitHub下载地址: Scoop 库
二. Ardiuino IDE添加库
解压下载的压缩包,将解压出的Scoop文件夹拷贝到Arduino IDE安装目录中的libraries文件夹中
再打开Arduino IDE菜单>项目>加载库中即可看到Scoop库已添加
三. 使用步骤
完整定义:
#include <SCoop.h>//引入头文件
void setup() {
mySCoop.start();//调用mySCoop多线程服务
}
void loop()
{
yield();//调用yield函数运行多线程程序
}
defineTask(Task1);//定义线程一
void Task1::setup()//线程一的初始化setup
{
pinMode(13, OUTPUT);
}
void Task1::loop()//线程一的死循环loop
{
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
快速定义:
#include <SCoop.h>//引入头文件
void setup() {
mySCoop.start();
pinMode(13, OUTPUT);//设置引脚13为输出模式
}
void loop()
{
yield();
}
defineTaskLoop(Task1)//快速定义线程一,省去Tasksetup,但需先在setup中开端口
{
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
四. 完整代码
#include <SCoop.h>
void setup() {
mySCoop.start();
pinMode(8,OUTPUT);
pinMode(6,OUTPUT);
pinMode(5,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
}
defineTaskLoop(Task1)
{
int a=random(500,2001);//实现每次闪烁周期不同
digitalWrite(8, HIGH);
delay(a);
digitalWrite(8, LOW);
delay(a);
}
defineTaskLoop(Task2)
{
int b=random(500,2001);
digitalWrite(6, HIGH);
delay(b);
digitalWrite(6, LOW);
delay(b);
}
defineTaskLoop(Task3)
{
int c=random(500,2001);
digitalWrite(5, HIGH);
delay(c);
digitalWrite(5, LOW);
delay(c);
}
defineTaskLoop(Task4)
{
int d=random(500,2001);
digitalWrite(9, HIGH);
delay(d);
digitalWrite(9, LOW);
delay(d);
}
defineTaskLoop(Task5)
{
int e=random(500,2001);
digitalWrite(10, HIGH);
delay(e);
digitalWrite(10, LOW);
delay(e);
}
void loop() {
yield();
}
总结
arduino处理多任务能力有限,虽然通过这个可以实现多任务并发处理,但最多只能支持四五个并发任务,再多就会出现内存不足报错了,若要处理更多并发任务,推荐用stm32。
本文地址:https://blog.csdn.net/qq_44626962/article/details/109485066