键盘控制问题

Keypad Control Problems

因此,对于我在 AP Comp Sci 的最终项目,我决定构建一个 Pi 和 Arduino 机器人,因为我要使用 Pi 通过它的数字输入(即 Arduino)来控制 Arduino,我想要创建和测试我的键盘控制,所以我将一些 LED 连接到 GPIO 并编写了以下代码:

import pygame
import RPi.GPIO as GPIO
pygame.init()
GPIO.setmode(GPIO.BOARD)
GPIO.setup(32,GPIO.OUT)
GPIO.setup(36,GPIO.OUT)
GPIO.setup(40,GPIO.OUT)

window = pygame.display.set_mode((800,600))

pygame.display.set_caption("Console")

def clearGP():
        x=32
        while x<=40 :
          GPIO.output(x,False)
          x= x+4

run = True



while run :
  for event in pygame.event.get():
        if (event.type==pygame.KEYDOWN):
                 keys = pygame.key.get_pressed()
                 if keys[pygame.K_s] and keys[pygame.K_a]:
                        GPIO.output(40,True)
                        GPIO.output(32,True)

                 elif keys[pygame.K_s] and keys[pygame.K_d]:
                        GPIO.output(40,True)
                        GPIO.output(36,True)

                 elif keys[pygame.K_w]:
                    GPIO.output(32,True)
                    GPIO.output(36,True)

                 elif keys[pygame.K_s]:
                    GPIO.output(40,True)

                 elif keys[pygame.K_d]:
                    GPIO.output(36,True)

                 elif keys[pygame.K_a]:
                    GPIO.output(32,True)

                 elif keys[pygame.K_t]:
                    run=False

                 clearGP()


GPIO.cleanup()
pygame.quit()

然而,当它应该一次输出到两个灯时例如当按下 a & s 时(在我的测试电路中)它只输出到一个!此外,指示灯在闪烁,非常快,而不是慢,我希望只要我按住键它就保持稳定,因为我希望我的机器人保持一致而不是紧张(就移动性而言)。我该怎么办?

P.S。我知道我用了 Pygame,这不是游戏。我只是认为它的按键跟踪比 Tkinter 更容易使用,因为我 Python 经验很少(我真的是 Java 人)

我认为,因为您在 'KEYDOWN' 事件中 运行 执行此操作,它会 运行 一旦检测到您按下的两个键中的第一个,即使你认为你同时按下了它们。因此,当您获得 key.get_pressed() 时,只有一个按钮被按下。

尝试删除这两行(并重新缩进),看看效果是否更好:

for event in pygame.event.get(): if (event.type==pygame.KEYDOWN):

它闪烁是因为您在每个周期都调用 clearGP(),因此您将在一个周期的 50% 时间内点亮 LED,并在另外 50% 的周期内将其关闭。仅当未按下键时才应关闭 LED,例如

if keys[pygame.K_a]:
                GPIO.output(32,True)
else:
                GPIO.output(32,False)