树莓派感应帽操纵杆在重置时触发事件



我有一个简单的python程序,它使用感觉帽子操纵杆作为输入,它调用帽子上各种传感器的读数并将其值返回到8x8 LED显示屏。该程序可以工作,但只有一个问题,它返回每个 show_message(( 两次。一次是第一次按下,一次是在操纵杆"重置"时。我知道这一点,因为例如,如果我举起,它会显示温度,然后当我释放它时,它会再次显示它。

谁能帮我只显示一次消息?pygame事件似乎将操纵杆绑在箭头键上,浏览pygame文档,我没有看到任何关于重置的内容。

这是我的代码:

from sense_hat import AstroPi
import time
import datetime
import pygame
from pygame.locals import *
ap = AstroPi()
ap.clear()
pygame.init()
pygame.display.set_mode((640,480))

pressure = 'P: ' + str(int(ap.get_pressure()))
temp =  'T: ' + str(int(ap.get_temperature_from_pressure()))
humidity = 'H: ' + str(int(ap.get_humidity()))
blah = 'blah!'
def handle_event(event):
    if event.key == pygame.K_DOWN:
        ap.show_message(pressure)
    elif event.key == pygame.K_UP:
        ap.show_message(temp)
    elif event.key == pygame.K_LEFT:
        ap.show_message(humidity)
    elif event.key == pygame.K_RIGHT:
        ap.show_message(blah)       

running = True
while running:
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            handle_event(event)
        if event.type == KEYUP:
            handle_event(event)
        if event.type == K_ESCAPE:
            running = False
        if event.type == pygame.QUIT:
            running = False

你可能在这里的反应有限,因为不是每个人都拥有传感器帽子,(包括我(,但我会试一试。我拥有的一些传感器存在连续读取发生过快的问题。通常,读数之间的延迟可以解决问题。我无法测试它,但这是一个很好的起点。请尝试以下操作:

import time
# after each handle_event() call in the second loop try adding a delay such as
handle.event(event)
time.sleep(1)

如果这恰好可以解决问题,请尝试将睡眠时间减少到更小的数字 (.01( 或直到问题再次出现。如果这没有帮助,我们可以继续挖掘。

圣诞节我得到了一个Pi&SenseHat。我尝试了您的程序,发现是否删除了前两个if语句之一。

(if event.type == KEYDOWN:) or ( if event.type == KEYUP:)

它只能工作一次。 我知道我迟到了一年,但我希望这有所帮助。

您的问题帮助我了解有关SenseHat操纵杆的更多信息。

当我尝试在传感器周围移动一个红色方块时,我遇到了类似的问题。当我在操纵杆上按右或向左方向时,它变成了两个方块。要解决此问题,只需创建一个同时包含 event.direction 和 event.action 的 AND 语句

if event.direction == 'right' and event.action == 'pressed':

因此,它仅在最初按下操纵杆时执行

最新更新