0

여기 내 코드입니다 :라즈베리 파이 - 메인 루프를 일시 정지 스레드 콜백을 사용하여

#import the GPIO and time package 
import RPi.GPIO as GPIO 
import time 
GPIO.setmode(GPIO.BCM) 
GPIO.setup(2, GPIO.IN, pull_up_down = GPIO.PUD_UP) 
GPIO.setup(3, GPIO.OUT) 
def hold(channel): 
    GPIO.output(3, True) 
    time.sleep(5) 
    GPIO.output(3, False) 

GPIO.add_event_detect(2, GPIO.FALLING, callback=hold, bouncetime=300) 
try: 
    while True: 
     GPIO.output(3, True) 
     time.sleep(1) 
     GPIO.output(3, False) 
     time.sleep(1) 

except KeyboardInterrupt: 
    GPIO.cleanup() 

그래서, 난 할 노력하고있어 것은 빛 깜박임이,하지만 즉시 버튼을 누르면로 즉시 전환 5 초 동안 계속 켜기 전에 다시 시작합니다. if 문을 사용하여 일반 이벤트 검색을 시도했지만 주 루프의 sleep() 함수로 인해 그 시간이 지날 때까지 아무 것도 일어나지 않고 즉시 발생하려고합니다. 제 질문은, 그렇지 않으면 LED가 정상적으로 깜박이는 것처럼 보이기 때문에 메인 루프의 실행을 일시 중지하는 방법이 있습니까, 아니면 이벤트 감지를 사용하여 구현하는 다른 방법이 있습니까?

편집은 : 경우는 명확하지 않았다, 버튼, 2 핀에 연결된 3

답변

0

가 알아 낸 핀 안내된다. 내 콜백 함수 내에 전역 Boolean 변수를 만들었습니다. 메인 루프가 조명을 켜거나 끄기 전에 부울 값이 true로 설정되어 있지 않은지 확인합니다.