【Arduino】arduino实现“真”多线程“控制”非伪线程

4 篇文章 0 订阅
2 篇文章 0 订阅

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(ArduinoIDE)。由一个欧洲开发团队于2005年冬季开发。其成员包括Massimo Banzi、David Cuartielles、Tom Igoe、Gianluca Martino、David Mellis和Nicholas Zambetti等。

一、多线程是什么?

多线程是指从软件或者硬件上实现多个线程并发执行的技术

1.伪多线程

arduino伪多线程一般是使用SCoop.h库实现的,它是将时间切成n份,实现的控制方式。而在不同的情况下这种多线程会导致很多时间分配的均匀,导致实现的效益达不到最好,那就可以使用总线通讯的方式去实现。

2.用iic总线实现多线程

举个例子

①接线

 这个我为了实现8个舵机俩俩能同时控制的总线控制。将所有SDA和SCL连接再模拟信号分别控制8个舵机。

②代码如下(发送端):

void sendCommand(int add, byte* command, int l) 
{
  Wire.beginTransmission(add); // transmit to device #2
  Wire.write(command, l);
  Wire.endTransmission();    // stop transmitting
  Serial.print(add);
  Serial.print('#');
  Serial.print(byte(*command));
  Serial.print('#');
  Serial.println(l);
}

③代码(接收端):

(1)定义

void setup() 
{
  // put your setup code here, to run once:
  Wire.begin(LEG_ID);
  Wire.onReceive(receiveEvent);
  Wire.onRequest(requestEvent);

  servoU.attach(SERVO_U);
  servoV.attach(SERVO_V);
//pinMode(13,OUTPUT);
//digitalWrite(13,HIGH);
  ledSet(LEG_ID-1, LOW);
  Serial.begin(9600);
  MsTimer2::set(ACT_TIME_STEP, legAct); // 20ms period
  MsTimer2::start();
}

(2)接收

void receiveEvent(int l) 
{
 byte cmd[l];
 byte p = 0;
// Serial.println('#');
 while(Wire.available() && p < l) 
 {
   cmd[p++] = Wire.read();
//   for(int x=0;x<=l;x++)
//   {
//   Serial.print(cmd[x]);
//  Serial.print('#');
//   }
//Serial.println('#');
}

④发送数据

向总线数据发送,实现一控多。


总结

这样我们实现用一台主机发送n台从机接收实现真正的多线程控制。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿德奶绿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值