Raspberry PI Sense Hat重置时操纵杆触发事件

时间:2016-02-16 02:34:24

标签: python raspberry-pi pygame raspberry-pi2

我有一个简单的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

2 个答案:

答案 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操纵杆的更多信息。