#include <Servo.h> //引入lib Servo myservo1; // 创建一个伺服电机对象 Servo myservo2; char inByte = 0; //串口接收的数据 int angle = 90; //角度值 String temp = "";//临时字符变量,又或者说是缓存用的吧 void setup() { myservo1.attach(9); //10引脚连接水平舵机,9链接垂直舵机 myservo2.attach(10); //定义舵机的引脚为9,舵机只能是10或者9引脚 Serial.begin(115200); //设置波特率 myservo1.write(90); //初始角度90度 myservo2.write(0); //初始角度是0度 } void loop() { while (Serial.available() > 0) //判断串口是否有数据 { inByte = Serial.read();//读取数据,串口一次只能读1个字符 temp += inByte;//把读到的字符存进临时变量里面缓存, //再继续判断串口还有没有数据,知道把所有数据都读取出来 } if(temp.length()) //判断临时变量是否为空 { if(temp.substring(0,2) == "RV") //控制上面左右摆动的舵机 { temp = temp.substring(2); angle = temp.toInt(); if (angle >= 0) { myservo1.write(angle); Serial.println(angle); } } if(temp.substring(0,2) == "RH") //控制底部水平转动舵机 { temp = temp.substring(2); angle = temp.toInt(); if (angle >= 0) { myservo2.write(angle); //控制舵机转动相应的角度。 Serial.println(angle); //输出数据到串口上,以便观察 } } } temp = ""; delay(100);//延时100毫秒 }翻译一下这段代码
时间: 2024-03-19 21:45:53 浏览: 132
xunhuan.rar_PLC控制电机_Servo PLC_伺服 plc_伺服电机_电机PLC
这段代码是用来控制两个舵机的,其中一个舵机控制上下运动,另一个舵机控制左右运动。下面是代码的详细解释:
```C++
#include <Servo.h> //引入Servo库
Servo myservo1; // 创建一个伺服电机对象
Servo myservo2; // 创建一个伺服电机对象
char inByte = 0; //串口接收的数据
int angle = 90; //角度值
String temp = "";//临时字符变量,又或者说是缓存用的吧
void setup() {
myservo1.attach(9); //10引脚连接水平舵机,9链接垂直舵机
myservo2.attach(10); //定义舵机的引脚为9,舵机只能是10或者9引脚
Serial.begin(115200); //设置波特率
myservo1.write(90); //初始角度90度
myservo2.write(0); //初始角度是0度
}
void loop() {
while (Serial.available() > 0) //判断串口是否有数据
{
inByte = Serial.read();//读取数据,串口一次只能读1个字符
temp += inByte;//把读到的字符存进临时变量里面缓存,
//再继续判断串口还有没有数据,知道把所有数据都读取出来
}
if(temp.length()) //判断临时变量是否为空
{
if(temp.substring(0,2) == "RV") //控制上面左右摆动的舵机
{
temp = temp.substring(2);
angle = temp.toInt();
if (angle >= 0)
{
myservo1.write(angle);
Serial.println(angle);
}
}
if(temp.substring(0,2) == "RH") //控制底部水平转动舵机
{
temp = temp.substring(2);
angle = temp.toInt();
if (angle >= 0)
{
myservo2.write(angle); //控制舵机转动相应的角度。
Serial.println(angle); //输出数据到串口上,以便观察
}
}
}
temp = "";
delay(100);//延时100毫秒
}
```
这段代码首先引入了 `Servo` 库,然后创建了两个 `Servo` 对象 `myservo1` 和 `myservo2`,分别用来控制两个舵机。接着定义了一个 `char` 类型的变量 `inByte`,用来存储从串口接收到的数据。定义了一个整型变量 `angle`,用来存储舵机转动的角度值。定义了一个字符串类型的变量 `temp`,用来临时存储从串口接收到的字符串。
在 `setup()` 函数中,首先调用了 `attach()` 函数将 `myservo1` 对象连接到数字引脚 9,将 `myservo2` 对象连接到数字引脚 10。然后调用了 `Serial.begin()` 函数来初始化串口通信。
在 `loop()` 函数中,首先通过 `while` 循环来读取从串口接收到的数据,并将读取到的数据存储到 `temp` 变量中。然后通过 `if` 语句判断 `temp` 变量中是否有数据。如果有数据,则通过 `substring()` 函数截取前两个字符,判断是控制上下运动的舵机还是左右运动的舵机。然后再通过 `substring()` 函数截取角度值,并将角度值转换为整型,最后将角度值存储到 `angle` 变量中。如果角度值大于等于 0,则调用 `write()` 函数将角度值传递给相应的舵机,控制舵机转动相应的角度。同时,通过 `Serial.println()` 函数将角度值输出到串口上,以便观察。
最后将 `temp` 变量清空,并延时 100 毫秒。这个循环会一直重复执行,不断地读取从串口接收到的数据,并控制舵机转动。
阅读全文