Как я могу попросить устройство подождать немного, чтобы увидеть, нажата кнопка или нет, и выполнить другое действие? - PullRequest
0 голосов
/ 07 ноября 2018

Я строю кнопку-камеру с питоном на Raspberry Pi перед камерой установлен затвор.

Я пытался построить:

Затвор откроется автоматически, и камера автоматически сделает снимок.

однако, когда я нажал кнопку, фотокамера перестанет снимать, и затвор тоже закроется.

простая иллюстрация, см. Эту фотографию

это мой текущий скрипт на python.

from time import sleep
from picamera import PiCamera
from picamera import PiCamera
import RPi.GPIO as GPIO
import datetime
import time

camera = PiCamera()
sleep(WAIT_TIME)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(15, GPIO.OUT)

p15 = GPIO.PWM(15, 50) #P15 is shutter motor
p15.start(0)

GPIO.setup(3, GPIO.IN) #P3 is button

def take_photo():
    for i in range(2):
    date = datetime.datetime.now().strftime("%m_%d_%Y_%H_%M_%S")
    timeCaptured = '/home/pi/timelapse/TEST_%s.jpg' %date
    camera.capture(timeCaptured)
    time.sleep(1)

def open_shutter():
    print('move')
    p15.ChangeDutyCycle(3)
    time.sleep(1)
    p15.ChangeDutyCycle(0)
    time.sleep(0.5) 


def close_shutter():
    p15.ChangeDutyCycle(6.2)
    time.sleep(1)
    p15.ChangeDutyCycle(0)
    time.sleep(1)

Это работает. Ждем 1 мин. Тем не менее, я должен всегда нажимать кнопку, иначе она всегда будет фотографировать. Как я могу попросить устройство подождать немного, чтобы увидеть, нажата кнопка или нет, и выполнить другое действие?

while True:
try:
    GPIO.wait_for_edge(3, GPIO.RISING)
    time.sleep(60)
    if GPIO.input(3) == GPIO.LOW:
        print('Button pressed')
        close_shutter()
        time.sleep(1)

    elif GPIO.input(3) == GPIO.HIGH:
        open_shutter()
        take_photo()
        close_shutter()
        time.sleep(1)
    exit()

except(KeyboardInterrupt):
    print('AN Error was raised in sequence')
    close_shutter()
    p15.stop()
    GPIO.cleanup()
...