我正在使用 SG-90 伺服器并在两个值之间左右扫描。我的问题是方向变化之间有大约 500 毫秒的明显延迟。我希望伺服的位置是可预测的,但由于方向变化,它不是。
bool servoDir = true;
int servoCnt = 90;
int servoInc = 1;
int servoMin = servoCnt - 5;
int servoMax = servoCnt + 5;
void loop() {
if (servoDir) {
dx = servoInc;
if (servoCnt > servoMax) {
servoDir = false;
}
} else {
dx = -servoInc;
if (servoCnt < servoMin) {
servoDir = true;
}
}
servoCnt += dx;
servo.write(servoCnt);
// delay or other code here (mine is 40ms)
}
我已经尝试过 Arduino Servo 库和 VarspeedServo 库。他们都表现出同样的事情。
这是什么原因,我该怎么办?
更新
因此,如果我在方向改变时加快速度,如下所示:
int extra = 5;
void loop() {
if (servoDir) {
dx = servoInc;
if (servoCnt > servoMax) {
dx -= extra;
servoDir = false;
}
} else {
dx = -servoInc;
if (servoCnt < servoMin) {
dx += extra;
servoDir = true;
}
}
servoCnt += dx;
servo.write(servoCnt);
// delay or other code here (mine is 40ms)
}
延迟消失了,但伺服位置确实变得难以预测。