提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
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台从机接收实现真正的多线程控制。