2016-04-09 2 views
-3

Я программирую скрипт на Python, чтобы делать снимок с помощью веб-камеры каждый раз, когда вы вводите вывод на GPIO 17. Я использую цикл while и до тех пор, пока buttom, подключенный к контакту 17, не нажата, его значение равно True. Если этот параметр установлен на False, и код запускается.Продолжайте выполнение инструкции if

Моя проблема: код в инструкции if can not заканчивается до того, как buttom отпущен и вернется к True. Поэтому он просто останавливается и показывает картинку. Любая идея, как я могу получить код, чтобы закончить, а затем он возвращается к состоянию True?

EDIT: Оператор if работает до тех пор, пока кнопка нажата. Когда он отпускается, он останавливается. Значение: за время, которое я нажимаю до выпуска, скрипт получает только изображение, а команда «waitKey» и исполняемый дозатор выполняются. Потому что он вернулся к «True». Но мне это нужно, чтобы закончить

Heres код:

import RPi.GPIO as GPIO 
import time 
import cv2 
import os 

GPIO.setmode(GPIO.BCM) 

GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP) 

while True: 
    input_state = GPIO.input(17) 
    if input_state == False: 
    print('Button Pressed') 
    capture = cv2.VideoCapture(0) 
    capture.set(3,1280) 
    capture.set(4,1024) 
    ret, img = capture.read() 
    cv2.imshow("input", img) 
    cv2.waitKey(1500) 
    del(capture) 
    cv2.VideoCapture(0).release() 
+3

Является ли отступ в вашем вопросе правильным? Я не могу определить, что делает эта одинокая линия 'if'. – usr2564301

+0

В настоящее время ничего не делает. Вот почему я спросил. – usr2564301

+0

класть abother в то время как там вместо если. while input_state read-input, поэтому, как только он будет ложным, он закончит цикл и продолжит следующий код. – Micka

ответ

1

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

попробуйте использовать форматированный ниже.

import RPi.GPIO as GPIO 
import time 
import cv2 
import os  
GPIO.setmode(GPIO.BCM)  
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP) 

while True: 
    input_state = GPIO.input(17) 
    if not input_state: # not False = True 
     print('Button Pressed') 
     capture = cv2.VideoCapture(0) 
     capture.set(3,1280) 
     capture.set(4,1024) 
     ret, img = capture.read() 
     cv2.imshow("input", img) 
     cv2.waitKey(1500) 
     del(capture) 
     cv2.VideoCapture(0).release() 
     input_state = True 
+1

if not input_state ... –

+0

@JacquesdeHooge изменен :) – Mitty

+0

Протестировано. Без изменений – bjsi9

0

Im не питон кодировщик поэтому не уверен, о синтаксисе:

попробуйте этот код: вместо одного, если оператор, цикл, пока условие не выполнено.

import RPi.GPIO as GPIO 
import time 
import cv2 
import os 

GPIO.setmode(GPIO.BCM) 

GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP) 

while True: 
    input_state = GPIO.input(17) 
    while input_state: 
     input_state = GPIO.input(17) 
    print('Button Pressed') 
    capture = cv2.VideoCapture(0) 
    capture.set(3,1280) 
    capture.set(4,1024) 
    ret, img = capture.read() 
    cv2.imshow("input", img) 
    cv2.waitKey(1500) 
    del(capture) 
    cv2.VideoCapture(0).release() 
+0

Без изменений, все тот же. Изображение отображается в отдельном окне, а дозировка снова закрывается. Если я нажму кнопку, появится новое изображение в том же окне. – bjsi9

+0

какое поведение вы хотите/ожидаете? вам нужно закрыть окно вручную: cv.DestroyWindow (name) – Micka

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