0

我正在研究蓝牙控制的 Arduino 机械臂。我希望当我发送一个整数时,伺服移动,当我发送另一个整数时,它停止。我在论坛上发现的只是伺服移动到特定位置的系统,但我希望它通过增加角度来真正旋转。这是我的代码,它不起作用:

#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);
    }
  }

我使用的应用程序基本上在我长按按钮时发送“4021”,当我释放它时发送“4022”。

我已经为此工作了几个小时,但我在任何论坛上都没有找到遇到同样问题的人......

请帮忙。

4

1 回答 1

0

你的问题出在这里:

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

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

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

顺便说一句:伺服的运动范围有限,因此您应该检查所需的角度是否不超过伺服限制。

于 2016-08-10T07:20:17.740 回答