为什么我必须按箭头键 3 次才能使舵机移动?

Why do I have to click the arrow keys 3 times for the the servo to move?

我目前正在使用 pivot pi 通过单击向上或向下箭头键来旋转伺服但由于某种原因我必须单击向上箭头键三次才能移动(与向下箭头相同键)我不知道为什么,我只是想做这样我只需要点击一次它就可以让伺服移动。

from pivotpi import *
from time import sleep
import curses
stdscr = curses.initscr()
curses.cbreak()
stdscr.keypad(1)
stdscr.refresh()
key = ""
mp = PivotPi()
a = 0
while key != ord("e"):
    key = stdscr.getch()
    stdscr.refresh()
    mp.angle(SERVO_1, a)
    if key == curses.KEY_UP: #close
        a += 180
        print(a)
    elif key == curses.KEY_DOWN: #open
        a -= 180
        print(a)
curses.endwin()

我假设您的代码中的这些特征是无意的:

    当按下除 [e] 之外的任何键时,总是调用
  • mp.angle
  • 传递给 mp.angle 的值始终是打印角度后面的一个按键。
    • a的初始值仅在第一次按键后传递。

这些可以修复如下:

from pivotpi import *
from time import sleep
import curses
stdscr = curses.initscr()
curses.cbreak()
stdscr.keypad(1)
stdscr.refresh()
key = ""
mp = PivotPi()
a = 0
mp.angle(SERVO_1, a) # initialise before listening for keypresses
while key != ord("e"):
    key = stdscr.getch()
    stdscr.refresh()
    if key == curses.KEY_UP: #close
        a += 180
    elif key == curses.KEY_DOWN: #open
        a -= 180
    else:
        continue
    print('\r\n%d\r' % a) # print to the left side of the terminal
    mp.angle(SERVO_1, a)
curses.endwin()