【发布时间】:2018-08-03 01:10:58
【问题描述】:
我正在尝试在树莓派上为我的学校项目编写一个程序。程序概念相当简单。 pi 正在查看 4 个 GPIO 引脚输入,并将根据输入向 LED 矩阵输出不同的基本动画。
主循环是一个始终运行的简单 while(1) 循环。在这个循环中,程序不断检查 pi 上的 4 个 GPIO 输入引脚的输入。当输入与其中一个 if 语句匹配时,它会运行一个简短的“动画”,其中在 LED 矩阵上显示一个图像,等待,清除矩阵,显示另一个图像,等待,然后再次清除。例如,这可以是“闪烁的笑脸”动画,其中显示的第一张图像是睁着眼睛的笑脸,第二张图像是闭着眼睛的笑脸。随着显示图片之间的暂停,屏幕上的图像似乎实际上在闪烁。
为清楚起见,下面显示了此设置(不是实际代码,但可以理解):
while(1) {
currentState = [GPIO.input(pin1), GPIO.input(pin2), GPIO.input(pin3), GPIO.input(pin4)]
if((currentState[0] == 1) and (currentState[1] == 0) and (currentState[2] == 1) and (currentState[3] == 0)) {
matrix.SetImage(open_eyes)
time.sleep(.3)
matrix.Clear()
matrix.SetImage(closed_eyes)
time.sleep(.3)
matrix.Clear()
}
if((currentState[0] == 0) and (currentState[1] == 1) and (currentState[2] == 0) and (currentState[3] == 1)) {
matrix.SetImage(closed_mouth)
time.sleep(.3)
matrix.Clear()
matrix.SetImage(open_mouth)
time.sleep(.3)
matrix.Clear()
}
}
我在此设置中遇到的问题是,如果输入在在动画期间发生变化,那么它不会切断当前正在播放的动画以开始下一个动画。这很明显是代码的结构方式,因为 currentState 变量仅在 while 循环的开头设置。
为了完成这个立即 切换,我尝试让每个动画都成为一个函数,并在 if 语句中运行该函数。但是,程序永远不会跳出这些函数来检查输入是什么。我现在被困住了,如果有人对如何实现这一点有任何想法,我很想听听他们的意见。
【问题讨论】:
-
您可以为动画启动一个线程,然后您可以在按下新按钮时杀死并启动另一个线程。 stackoverflow.com/a/7752174/7311767
标签: python while-loop nested