在python中如何读取和使用每次按键的时间?

2024-04-19 13:35:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚开始用树莓皮3。所以我的第一个项目是一辆遥控车,我用键盘控制它。不幸的是,我遇到了一些问题。在

现在,我使用time.sleep()函数来限制执行每个案例的时间。否则,在我按回车键之前,车子一直在执行这个任务。但我希望pi能读懂我按了多长时间的键,然后在那个特定的时间内执行这个功能。在

例如,如果我按向上键2秒,汽车将前进2秒。这是我的代码:

import curses
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)
GPIO.setup(7,GPIO.OUT)
GPIO.setup(11,GPIO.OUT)
GPIO.setup(13,GPIO.OUT)
GPIO.setup(15,GPIO.OUT)

screen = curses.initscr()
curses.noecho()
curses.cbreak()
screen.keypad(True)

try:
while True:
    char = screen.getch()
    if char == ord('q'):
        break

    elif char == curses.KEY_UP:
        GPIO.output(7,True)
        GPIO.output(11,False)
        GPIO.output(13,True)
        GPIO.output(15,False)
        time.sleep(.25)
        GPIO.output(7,False)
        GPIO.output(11,False)
        GPIO.output(13,False)
        GPIO.output(15,False)

    elif char == curses.KEY_DOWN:
        GPIO.output(7,False)
        GPIO.output(11,True)
        GPIO.output(13,False)
        GPIO.output(15,True)
        time.sleep(.25)
        GPIO.output(7,False)
        GPIO.output(11,False)
        GPIO.output(13,False)
        GPIO.output(15,False)

    elif char == curses.KEY_RIGHT:
        GPIO.output(7,False)
        GPIO.output(11,True)
        GPIO.output(13,True)
        GPIO.output(15,False)
        time.sleep(.25)
        GPIO.output(7,False)
        GPIO.output(11,False)
        GPIO.output(13,False)
        GPIO.output(15,False)

    elif char == curses.KEY_LEFT:
        GPIO.output(7,True)
        GPIO.output(11,False)
        GPIO.output(13,False)
        GPIO.output(15,True)
        time.sleep(.25)
        GPIO.output(7,False)
        GPIO.output(11,False)
        GPIO.output(13,False)
        GPIO.output(15,False)

    elif char == ord('w'):
        GPIO.output(7,True)
        GPIO.output(11,False)
        GPIO.output(13,True)
        GPIO.output(15,False)
        time.sleep(.1)
        GPIO.output(7,False)
        GPIO.output(11,False)
        GPIO.output(13,False)
        GPIO.output(15,False)

    elif char == ord('d'):
        GPIO.output(7,False)
        GPIO.output(11,True)
        GPIO.output(13,True)
        GPIO.output(15,False)
        time.sleep(.1)
        GPIO.output(7,False)
        GPIO.output(11,False)
        GPIO.output(13,False)
        GPIO.output(15,False)

    elif char == ord('s'):
        GPIO.output(7,False)
        GPIO.output(11,True)
        GPIO.output(13,False)
        GPIO.output(15,True)
        time.sleep(.1)
        GPIO.output(7,False)
        GPIO.output(11,False)
        GPIO.output(13,False)
        GPIO.output(15,False)

    elif char == ord('a'):
        GPIO.output(7,True)
        GPIO.output(11,False)
        GPIO.output(13,False)
        GPIO.output(15,True)
        time.sleep(.1)
        GPIO.output(7,False)
        GPIO.output(11,False)
        GPIO.output(13,False)
        GPIO.output(15,False)



finally:
curses.nocbreak(); screen.keypad(0); curses.echo()
curses.endwin()
GPIO.cleanup()

我是python新手,希望有人能帮我。在


Tags: keyimportfalsetrueoutputgpiotimesetup
1条回答
网友
1楼 · 发布于 2024-04-19 13:35:32

考虑这种方法,只要你不按另一个键,汽车就会前进:

def clearGPIO():
    for pin in [7, 11, 13, 15]:
          GPIO.output(pin, False)

while True:
    char = screen.getch()
    if char == ord('q'):
        clearGPIO()
        break

    elif char == curses.KEY_UP:
         clearGPIO()
         GPIO.output(7, True)

    elif char == curses.KEY_DOWN:
         clearGPIO()
         for pin in [11, 15]:
              GPIO.output(pin, True)

相关问题 更多 >