您的位置:首页 > 产品设计 > UI/UE

【arduino多线程编程】arduino竟然还能多线程编程?确定不进来夸一下嘛......

2020-04-22 16:56 3219 查看

目录

1.SCoop库下载 2.多线程简介 3.多线程实现LED闪烁+计时 4.总结 1.SCoop库下载

  【点击这里】提取码:u7r5。下载SCoop库,解压后放在arduino安装目录下的

libraries
文件夹下即可。

2.多线程简介

  看了上一篇《arduino面向对象编程》是不是感觉arduino已经到极限了?NO,NO,NO,arduino远远不止如此,不信你往下看:

  理解了单线程就很容易理解多线程了吧,举个例子,假设有语文作文和数学试卷两个任务等你完成,那你肯定只能先完成一个,再完成另一个,这样虽不准确但很明确的理解单线程;往往单线程是很不实用的,太占用时间;而复杂系统例如操作系统肯定不可能一件事一件事来执行,而往往是并发同时执行多个任务。

3.多线程实现LED闪烁+计时

  arduino多线程是依托于SCoop库来实现的(当然还有其他库可以实现,这里使用更为简便的SCoop库);大致过程分为以下:

1.包含SCoop库头文件;
2.创建任务;
3.执行

  包含头文件一句#include的事不必多讲,执行是在主setup()函数中声明以下代码:

void setup()
{
mySCoop.start();
}

  有点类似于python的多线程;然后在loop()里这样写:

void loop()
{
yield();
}

  可以参照python的生成器,你就理解成:你写了多少个任务就给我生成多少个线程;
  

  重点是如何写任务,这里有两种方法,学名叫什么完整写法,快速写法,我是觉得没多发必要去记这个,会用就行:

怎么区分呢:如果你这个任务里需要用到setup()函数就用style1(完整写法);否则用style2:


完整代码:

#include<SCoop.h>

int count=0;

//style1
defineTask(led)//创建一个名为led的任务
void led::setup(){pinMode(13,OUTPUT);}
void led::loop(){digitalWrite(13,!digitalRead(13));sleep(1000);}

//style2
defineTaskLoop(cnt){Serial.println(count++);sleep(1000);}

void setup()
{
Serial.begin(9600);
mySCoop.start();
}

void loop()
{
yield();
}

  

实验现象:

  实验现象为LED间隔1s(SCoop库中的sleep()函数实现,以后细讲)闪烁同时串口间隔1s输出数字;LED闪烁就请自行动手试验了,串口输出计数如下图:


  

4.总结

  虽然说是多线程并发,但实际上任务多了还可能会出现问题(arduino板子的性能决定),但是看到这里就不应该再小看arduino了吧,这里只用到了SCoop库,但实际上arduino的库是真滴多,有兴趣可以自己去了解了解。

  

欢迎关注【菜小涛的CSDN】,这是一个有料、有趣的地方。

  • 点赞 7
  • 收藏
  • 分享
  • 文章举报
菜小涛 发布了18 篇原创文章 · 获赞 193 · 访问量 1万+ 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: