记录小逆学习中的各种踩坑

文章目录

  • 前言
  • 一. Scoop库下载
  • 二. Ardiuino IDE添加库
  • 三. 使用步骤
  • 四. 完整代码
  • 总结

前言

遇到这样一道题目,需要多线程来实现,在网上找好久程序调度相关内容发现都太过麻烦,直到看到了这篇文章
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