我正在使用蓝牙控制的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] = '\0';
val = atoi(buffer);
Serial.println(val);
}
}
我使用的应用基本上发送了&#39; 4021&#39;当我长按一个按钮,并发送&#39; 4022&#39;当我发布它时。
我已经在这个问题上工作了好几个小时,而且我还没有找到任何论坛上有过同样问题的人......
请帮忙。
答案 0 :(得分:0)
你的问题在于:
void loop() {
servo.write(170);
...
}
这段代码的作用是在每次循环迭代时将伺服角度设置为170。由于这将每秒发生数千次,它将基本上覆盖通过串行命令引入的任何伺服设置。你应该做的是在servo.write(170);
之前移动setup()
到servo.read()
,我认为这会产生中间位置,甚至是一些未定义的结果。根据Arduino文档,它将:
读取伺服的当前角度(传递给最后一次调用的值) 写())。
而且BTW:伺服的运动范围有限,所以你应该检查所需的角度是否超过伺服限制。