我正在使用SG-90伺服,并在两个值之间左右扫描。 我的问题是方向变化之间存在大约500ms的明显延迟。我希望伺服的位置是可预测的,但是由于这个方向改变它不是。
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)
}
延迟消失,但伺服位置确实变得难以预测。
答案 0 :(得分:0)
如果servoMin和servoMax超出伺服范围,你会遇到这些症状......它们是什么。
更严重的是,这些伺服系统不是很精确。一次增加1可能是个问题。您正在经历某种形式的强烈反对。
您应该检查并钳制计数与递增/递减后的范围。这是嵌入式编程的基本规则之一。在发出超出范围的值时,生命可能受到威胁,或设备被摧毁。
'X-OPENTOK-AUTH': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIxMjMiLCJpc3QiOiJwcm9qZWN0IiwiaWF0IjoxNTAyMzMxNDk3LCJleHAiOjE1MDIzMzE3OTd9.WJ1yJkD6IgXofj85Wyjdl80QEumLVBHIgtj-9vAhOZU'