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

目录

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】,这是一个有料、有趣的地方。

  • 11
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
你可以使用Arduino Uno来实现蓝牙通信。下面是一个简单的示例代码,可以通过蓝牙串口与其他设备进行通信: 首先,确保你已经连接了蓝牙模块到Arduino Uno的串口引脚(一般是RX和TX引脚)。 然后,打开Arduino IDE,创建一个新的项目并输入以下代码: ```arduino #include <SoftwareSerial.h> SoftwareSerial bluetooth(10, 11); // 定义蓝牙串口对象,10为RX引脚,11为TX引脚 void setup() { Serial.begin(9600); // 初始化串口通信 bluetooth.begin(9600); // 初始化蓝牙串口通信 } void loop() { if (bluetooth.available()) { // 如果蓝牙串口有可用数据 char data = bluetooth.read(); // 读取数据 Serial.print(data); // 将数据发送到串口监视器 } if (Serial.available()) { // 如果串口监视器有可用数据 char data = Serial.read(); // 读取数据 bluetooth.print(data); // 将数据发送到蓝牙串口 } } ``` 这段代码使用了SoftwareSerial库来创建一个虚拟的串口对象来与蓝牙模块进行通信。你需要将蓝牙模块的RX和TX引脚连接到Arduino Uno的10和11引脚。 在`setup()`函数中,我们初始化了两个串口对象:Serial(硬件串口)和bluetooth(蓝牙串口)。 在`loop()`函数中,我们检查蓝牙串口是否有可用数据,如果有,就读取数据并发送到串口监视器。同时,我们也检查串口监视器是否有可用数据,如果有,就读取数据并发送到蓝牙串口。 上传代码到Arduino Uno,并确保你的蓝牙设备已经连接到蓝牙模块。然后,打开串口监视器,你应该能够看到从蓝牙设备接收到的数据,并且你可以通过串口监视器向蓝牙设备发送数据。 这只是一个简单的示例代码,你可以根据你的需要进行修改和扩展。希望对你有所帮助!
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值