伺服速度由模拟摇杆的角度控制



这是我目前控制伺服的代码。它将伺服移动到模拟摇杆输入的角度。

servoVal2 = analogRead(joyY1);                     
servoVal2 = map(servoVal2, 0, 1023, 0, 180);      
servo2.write(servoVal2);                          
delay(10);

相反,我想要的是模拟值来确定伺服移动的速度,而不是位置。

[披露,我不是这个主题的专家。]

首先,你应该检查你的伺服是否能够连续旋转,根据你的代码片段,情况可能不是这样,因为你只将角度映射到0到180之间的范围。

如果伺服机构确实可以旋转整个范围,你将需要某种循环,它会不断地向伺服机构的控制器发送一个新的目标角度。这里有一些伪代码:

stepMillis = 100
stepAngleMaxInDegree = 30
stepAngleInDegree = stepAngleMaxInDegree / 2
lastAngleInDegree = 0
loop() {
input = analogRead(joyY1)
stepAngleInDegree = map(input, 0, 1023, 0, stepAngleMaxInDegree)
while (True) {
delay(stepMillis)
lastAngleInDegree = (lastAngleInDegree + stepAngleInDegree) % 360
servo2.write(lastAngleInDegree)
}
}

即使在这种情况下,我也不完全清楚伺服在穿过整个圆圈时的表现,例如从358°到3°。它会旋转5°还是-355°?

仔细想想,可能还有另一个问题:我的答案没有考虑伺服的实际角速度。如果它是固定的,并且步长太长,它可能不会是连续的运动,而是步长和暂停。

最新更新