arduino串口同时控制舵机 LED灯 RGB氛围灯
时间: 2023-07-31 11:11:38 浏览: 272
三彩LED灯(建议收藏)
要在Arduino上通过串口同时控制舵机、LED灯和RGB氛围灯,需要结合前面的示例代码,将它们组合起来。
以下是一个示例代码,假设舵机信号线接到Arduino的数字引脚9,LED灯接到数字引脚13,红、绿、蓝三色LED灯分别接到数字引脚11、10、9:
```
#include <Servo.h>
Servo myservo; // 创建一个舵机对象
void setup() {
pinMode(13, OUTPUT); // 将数字引脚13设置为输出模式(LED灯)
pinMode(11, OUTPUT); // 将数字引脚11设置为输出模式(红色LED)
pinMode(10, OUTPUT); // 将数字引脚10设置为输出模式(绿色LED)
pinMode(9, OUTPUT); // 将数字引脚9设置为输出模式(蓝色LED)
myservo.attach(9); // 将舵机信号线连接到数字引脚9
Serial.begin(9600); // 初始化串口通信,波特率为9600
}
void loop() {
if (Serial.available() > 0) { // 如果串口有数据可读
String data = Serial.readString(); // 读取串口数据
if (data.startsWith("LED")) { // 如果是控制LED灯的指令
int state = data.substring(3).toInt(); // 读取LED灯状态值
digitalWrite(13, state); // 控制LED灯亮或灭
} else if (data.startsWith("servo")) { // 如果是控制舵机的指令
int angle = data.substring(5).toInt(); // 读取舵机角度值
myservo.write(angle); // 控制舵机转到指定角度
} else if (data.startsWith("RGB")) { // 如果是控制RGB氛围灯的指令
String color = data.substring(3); // 读取颜色值
if (color == "red") { // 如果颜色为红色
digitalWrite(11, HIGH); // 红色LED亮
digitalWrite(10, LOW); // 绿色LED灭
digitalWrite(9, LOW); // 蓝色LED灭
} else if (color == "green") { // 如果颜色为绿色
digitalWrite(11, LOW); // 红色LED灭
digitalWrite(10, HIGH); // 绿色LED亮
digitalWrite(9, LOW); // 蓝色LED灭
} else if (color == "blue") { // 如果颜色为蓝色
digitalWrite(11, LOW); // 红色LED灭
digitalWrite(10, LOW); // 绿色LED灭
digitalWrite(9, HIGH); // 蓝色LED亮
}
}
}
}
```
在上面的代码中,使用了String类的startsWith()和substring()函数,来判断并读取串口传来的指令和参数。根据指令的不同,使用不同的方式控制舵机、LED灯和RGB氛围灯。请注意,如果同时控制多个设备,可能会出现相互干扰的问题,建议增加适当的延时或使用其他的通信方式。
阅读全文