伺服连续旋转 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()).

顺便说一句:舵机的运动范围有限,所以你应该检查所需的角度是否不超过舵机限制。