2016-06-11 7 views
3

Это моя первая попытка кодирования малины Pi и аппаратной кнопки на макете. Программа проста, когда нажата кнопка, включите светодиод на макете в течение 1 секунды. Мой код, похоже, работает, но, как ни странно, каждый раз одна кнопка нажата дважды вызывает функцию обратного вызова. Я полный программирование noob, поэтому я не уверен, что проблема с моим кодом, или если HW или кнопка как-то фактически падают дважды. Я надеюсь, что кто-то здесь поможет мне устранить эту странность. Вот мой код:Нажатие кнопки GPIO.FALLING вызывает срабатывание дважды

#!/usr/bin/env python 
import RPi.GPIO as GPIO 
import time 


LedPin = 11 # pin11 --- led 
BtnPin = 12 # pin12 --- button 

def setup(): 
    GPIO.setmode(GPIO.BOARD)  # Numbers GPIOs by physical location 
    GPIO.setup(LedPin, GPIO.OUT) # Set LedPin's mode is output 
    GPIO.setup(BtnPin, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Set BtnPin's mode is input, and pull up to high level(3.3V) 
    GPIO.output(LedPin, GPIO.HIGH) # Set LedPin high(+3.3V) to off led 

def Light(ev=None): 
     print 'A button press was detected' 
     GPIO.output(LedPin, 0) # switch led status on 
     time.sleep(1) 
     GPIO.output(LedPin, 1) # switch led status off 

def loop(): 
    GPIO.add_event_detect(BtnPin, GPIO.FALLING, callback=Light) # wait for Button Press (GPIO Falling) 
    while True: 
     pass # Don't do anything, sit forever 

def destroy(): 
     GPIO.output(LedPin, GPIO.HIGH)  # led off 
     GPIO.cleanup()      # Release resource 

if __name__ == '__main__':  # Program start from here 
    setup() 
    try: 
     loop() 
    except KeyboardInterrupt: # When 'Ctrl+C' is pressed, the child program destroy() will be executed. 
     destroy() 
+0

Почему вы зацикливаетесь навсегда? –

+0

Мне нужен мой код для непрерывного запуска. Если у вас есть лучший способ сделать это, я с удовольствием попробую другой подход. – szaske

+0

Но разве вы не должны слушать события в цикле? –

ответ

1

Я нашел решение. Используя код here, я решил свою проблему.

Если вы похожи на меня и получаете случайную дублируемую кнопку, нажмите события при использовании GPIO.add_event_detect, попробуйте связанный код.

 Смежные вопросы

  • Нет связанных вопросов^_^