【问题标题】:How to read and use the time for each key press in python?如何读取和使用python中每次按键的时间?
【发布时间】:2017-05-28 04:24:19
【问题描述】:

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

目前,我使用time.sleep() 函数来限制每个案例的执行时间。否则汽车会一直执行这种情况,直到我按 Enter 键。但我希望 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 新手,希望有人能帮助我。

【问题讨论】:

  • 假设我按下前进键 2 秒,是在我完成按下相应任务之后,还是在按下期间?
  • 如果没有按下任何按钮,该任务必须执行,或者更确切地说,输出应该处于什么状态?
  • 所有输出都应该是0。在Arduino平台上的同一个项目的情况下,当我停止按下同一个应用程序上的按钮时,我曾经从一个应用程序发送一个特定的字符来停止汽车。我希望我能用 raspberry pi rc car 做同样的事情。

标签: python raspberry-pi3


【解决方案1】:

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

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-11
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 2012-08-23
    • 2016-05-26
    相关资源
    最近更新 更多