簡體   English   中英

Python按鍵和按鍵釋放監聽器

[英]Python Key press and Key Release Listener

我正在使用python代碼控制遠程玩具車。到目前為止,代碼如下

def getkey():
        fd = sys.stdin.fileno()
        old = termios.tcgetattr(fd)
        new = termios.tcgetattr(fd)
        new[3] = new[3] & ~TERMIOS.ICANON & ~TERMIOS.ECHO
        new[6][TERMIOS.VMIN] = 1
        new[6][TERMIOS.VTIME] = 0
        termios.tcsetattr(fd, TERMIOS.TCSANOW, new)
        c = None
        try:
                c = os.read(fd, 1)
        finally:
                termios.tcsetattr(fd, TERMIOS.TCSAFLUSH, old)
        return c

def car():
    while True:
        key = getkey()
        if key == 's': #Down arrow
            print "Down"
            Backward()
        elif key == 'w': #Up arrow
            print "Up"
            forward()
        elif key == 'a': 
            print "left"
            Left()
        elif key == 'd': 
            print "Right"
            Right()
        elif key == 'q': #Quit
            print "That's It"
            break
def forward():
    GPIO.output(11,True)  #Move forward

當我按'w'時,會調用forward()方法,汽車會​​向前行駛,但不會停止,直到我退出程序或從其他方法調用GPIO.output(11,Flase)。

是否有任何密鑰偵聽器可以檢測任何特定密鑰的密鑰釋放。

例如,如果按下“ w”調用此方法,如果釋放則調用其他方法

須藤代碼

if w_isPressed()
   forward()
else if w_isReleased()
    stop()

我已經看到Pygame游戲開發庫以前曾在類似場景中成功使用過,不僅可以處理玩具示例,還可以處理生產中的實時系統和機器。 我認為這也是一個合適的候選人。 查看pygame.key模塊以了解鍵盤輸入可能做什么。

簡而言之,如果您不熟悉游戲開發,則基本上可以連續輪詢事件,例如“無限”游戲循環內的輸入狀態更改,並做出相應的反應。 通常,每個時間使用增量來更新系統參數。 有很多關於它的教程,Pygame可用,並且Pygame文檔非常扎實。

一個簡單的例子:

import pygame

pygame.init()

# to spam the pygame.KEYDOWN event every 100ms while key being pressed
pygame.key.set_repeat(100, 100)

while 1:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_w:
                print 'go forward'
            if event.key == pygame.K_s:
                print 'go backward'
        if event.type == pygame.KEYUP:
            print 'stop'

您需要根據如何實現汽車運動來玩pygame.KEYDOWNpygame.KEYUPpygame.key.set_repeat

遇到類似的問題(我不是Python專家),但這對我有用

import pynput
from pynput import keyboard 

def on_press(key):
    try:
        print('Key {0} pressed'.format(key.char))
        #Add your code to drive motor
    except AttributeError:
        print('Key {0} pressed'.format(key))
        #Add Code
def on_release(key):
    print('{0} released'.format(key))
    #Add your code to stop motor
    if key == keyboard.Key.esc:
        # Stop listener
        # Stop the Robot Code
        return False

# Collect events until released
with keyboard.Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM