伺服连续旋转 Arduino Serial
Servo continuous rotation Arduino Serial
我正在研究蓝牙控制的 Arduino 机械臂。
我希望当我发送一个整数时,伺服器移动,而当我发送另一个 Int 时,它停止。我在论坛上找到的所有系统都是伺服系统移动到特定位置的系统,但我希望它通过增加角度真正旋转。
这是我的代码,它不起作用:
#include <Servo.h>
int val;
int angle;
int charsRead;
char buffer[10];
Servo servo;
void setup() {
Serial.begin(9600);
servo.attach(6);
angle = servo.read();
}
void loop() {
servo.write(170);
serialCheck();
if(val == 4021){
servo.write(angle++);
delay(50);
}
}
else if(val == 4022){
servo.write(angle);
}
serialCheck();
}
void serialCheck(){
while(Serial.available() > 0){
charsRead = Serial.readBytesUntil('\n', buffer, sizeof(buffer) - 1);
buffer[charsRead] = '[=10=]';
val = atoi(buffer);
Serial.println(val);
}
}
我使用的应用程序基本上是在长按按钮时发送“4021”,在松开按钮时发送“4022”。
我已经为此工作了几个小时,但我在任何论坛上都没有发现有同样问题的人...
请帮忙。
你的问题出在这里:
void loop() {
servo.write(170);
...
}
这段代码所做的是在每次循环迭代时将伺服角度设置为 170。由于这种情况每秒会发生数千次,因此它基本上会覆盖通过串行命令引入的任何伺服设置。你应该做的是将 servo.write(170);
移动到 setup()
,在 servo.read()
之前,我认为这将产生当前的中间位置,甚至是一些未定义的结果。根据 Arduino 文档,它将:
Read the current angle of the servo (the value passed to the last call
to write()).
顺便说一句:舵机的运动范围有限,所以你应该检查所需的角度是否不超过舵机限制。
我正在研究蓝牙控制的 Arduino 机械臂。 我希望当我发送一个整数时,伺服器移动,而当我发送另一个 Int 时,它停止。我在论坛上找到的所有系统都是伺服系统移动到特定位置的系统,但我希望它通过增加角度真正旋转。 这是我的代码,它不起作用:
#include <Servo.h>
int val;
int angle;
int charsRead;
char buffer[10];
Servo servo;
void setup() {
Serial.begin(9600);
servo.attach(6);
angle = servo.read();
}
void loop() {
servo.write(170);
serialCheck();
if(val == 4021){
servo.write(angle++);
delay(50);
}
}
else if(val == 4022){
servo.write(angle);
}
serialCheck();
}
void serialCheck(){
while(Serial.available() > 0){
charsRead = Serial.readBytesUntil('\n', buffer, sizeof(buffer) - 1);
buffer[charsRead] = '[=10=]';
val = atoi(buffer);
Serial.println(val);
}
}
我使用的应用程序基本上是在长按按钮时发送“4021”,在松开按钮时发送“4022”。
我已经为此工作了几个小时,但我在任何论坛上都没有发现有同样问题的人...
请帮忙。
你的问题出在这里:
void loop() {
servo.write(170);
...
}
这段代码所做的是在每次循环迭代时将伺服角度设置为 170。由于这种情况每秒会发生数千次,因此它基本上会覆盖通过串行命令引入的任何伺服设置。你应该做的是将 servo.write(170);
移动到 setup()
,在 servo.read()
之前,我认为这将产生当前的中间位置,甚至是一些未定义的结果。根据 Arduino 文档,它将:
Read the current angle of the servo (the value passed to the last call to write()).
顺便说一句:舵机的运动范围有限,所以你应该检查所需的角度是否不超过舵机限制。