伺服连续旋转Arduino Serial

时间:2016-08-09 17:54:32

标签: bluetooth arduino serial-port continuous servo

我正在使用蓝牙控制的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;当我发布它时。

我已经在这个问题上工作了好几个小时,而且我还没有找到任何论坛上有过同样问题的人......

请帮忙。

1 个答案:

答案 0 :(得分:0)

你的问题在于:

void loop() {
    servo.write(170);
...
}

这段代码的作用是在每次循环迭代时将伺服角度设置为170。由于这将每秒发生数千次,它将基本上覆盖通过串行命令引入的任何伺服设置。你应该做的是在servo.write(170);之前移动setup()servo.read(),我认为这会产生中间位置,甚至是一些未定义的结果。根据Arduino文档,它将:

  

读取伺服的当前角度(传递给最后一次调用的值)   写())。

而且BTW:伺服的运动范围有限,所以你应该检查所需的角度是否超过伺服限制。