【发布时间】:2015-05-19 19:23:48
【问题描述】:
我从这里得到了一段 Python 代码: http://www.raspberry-pi-geek.com/Archive/2013/01/Adding-an-On-Off-switch-to-your-Raspberry-Pi
我想改进它。
由于这是我第一次使用 Python,所以我一直无法理解实际发生的情况。
代码如下:
# Import the modules to send commands to the system and access GPIO pins
from subprocess import call
import RPi.GPIO as gpio
from time import sleep
gpio.setmode(gpio.BCM) # Set pin numbering to board numbering
gpio.setup(22, gpio.IN) # Set up pin 22 as an input
rebootBool = 0
# Define a function to keep script running
def main(pin):
while True:
#gpio.remove_event_detect(pin)
gpio.add_event_detect(22, gpio.RISING, callback=confirmation, bouncetime=200) # Set up an interrupt to look for button presses
sleep(5000000)
def confirmation(pin):
gpio.remove_event_detect(pin)
gpio.add_event_detect(22, gpio.RISING, callback=shutdown, bouncetime=200)
sleep(3) # if button has been pressed again within 3 seconds, shut down will happen
main(22)
def reboot(pin):
rebootBool = 1
call('reboot', shell=False)
exit(0)
# Define a function to run when an interrupt is called
def shutdown(pin):
gpio.remove_event_detect(pin)
gpio.add_event_detect(22, gpio.RISING, callback=reboot, bouncetime=200)
sleep(3) # if the button has been pressed for a third time, within 3 seconds, Pi will reboot
if rebootBool == 0: # Just to make sure a halt is not called after the 3 seconds have passed, if reboot is called
call('halt', shell=False)
exit(0)
main(22) # Run the loop function to keep script running
我想做的是这样的:
- 如果按钮被按下一次,则会执行确认功能,如果在 3 秒内按下按钮,则会重置按钮以调用关机功能。
- 否则,使用主循环继续
- 在关机函数中,如果再次按下(3秒内),它会重置以调用重启函数。
- 否则继续,然后关闭
会发生什么:
如果我按下按钮两次或三次,它会告诉我 gpio.add_event_detect 已经定义,当它尝试在 main() 中定义它时。 所以它不会改变它,如果我再按一次它,它就会调用关闭函数。
我不明白的是:
为什么它要在 main 中定义 gpio 事件,而实际功能是重新启动或关闭(它应该调用重新启动或关闭)?
【问题讨论】:
标签: python linux raspberry-pi interrupt