我有一个简单的python程序,它使用感应帽操纵杆作为输入,调用帽子上各种传感器的读取并将其值返回到8x8 LED显示屏。该程序有效,但只有一个问题,它返回每个show_message()两次。一旦进行初始按下,再次当操纵杆重置时#39;。我知道这个,因为如果我举起例子,它会显示温度,然后当我释放它时,它再次显示它。
任何人都可以帮我只显示一次消息吗? 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
答案 0 :(得分:0)
你可能在这里的反应有限,因为不是每个人都拥有传感器帽子(包括我),但我会对它进行刺伤。我所拥有的一些传感器存在连续读取过快发生的问题。通常读数之间的延迟解决了这个问题。我无法测试它,但它是一个很好的起点。请尝试以下方法:
import time
# after each handle_event() call in the second loop try adding a delay such as
handle.event(event)
time.sleep(1)
如果这样可以解决问题,请尝试将睡眠时间减少到更小的数字(.01)或直到问题重新出现。如果这没有帮助我们可以继续挖掘。
答案 1 :(得分:0)
我得到了一个Pi& SenseHat圣诞节。我尝试了你的程序,发现我是否删除了前两个if
语句中的一个。
(if event.type == KEYDOWN:) or ( if event.type == KEYUP:)
它只能工作一次。我知道我迟到了一年,但我希望这会有所帮助。
您的问题帮助我了解了SenseHat操纵杆的更多信息。