Почему я должен нажимать клавиши со стрелками 3 раза, чтобы сервопривод двигался? - PullRequest
1 голос
/ 26 марта 2019

В настоящее время я использую 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()

1 Ответ

1 голос
/ 27 марта 2019

Я предполагаю, что эти характеристики из вашего кода непреднамеренные:

  • mp.angle всегда вызывается при нажатии любой клавиши, кроме [ e ].
  • Значение, переданное в 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()
...