2015-09-29 1 views
0

Я очень расстроен. Я не знаю python, но я использую его в классе прототипирования. Я хочу использовать штырь GPIO на моем RPi, чтобы загорелся светодиод. Эта часть, которую я получил, не проблема. Но теперь я хочу добавить кнопку, и она будет мигать при нажатии кнопки и продолжит мигать после отпускания кнопки. Например: Светодиод включен, кнопка нажата, светодиод выключен, включен, светодиод выключен, горит, горит, остается включенным, светодиод выключен, включен, светодиод выключен, горит, горит, остается включенным, навсегда. Это то, что у меня есть:Постоянно мигает светодиод, когда кнопка нажата на малиновый пи?

import RPi.GPIO as GPIO 
import time 

def blink(pin): 
    GPIO.output(11, GPIO.LOW) 
    time.sleep(.2) 
    GPIO.output(11, GPIO.HIGH) 
    time.sleep(.2) 
    GPIO.output(11, GPIO.LOW) 
    time.sleep(.2) 
    GPIO.output(11, GPIO.HIGH) 
    time.sleep(.2) 
    GPIO.output(11, GPIO.LOW) 
    time.sleep(.2) 
    GPIO.output(11, GPIO.HIGH) 
    time.sleep(4) 

def main(): 

    GPIO.setmode(GPIO.BOARD) 

    GPIO.setup(11, GPIO.OUT) 
    GPIO.setup(16, GPIO.IN) 

    GPIO.output(11, GPIO.HIGH) 

    while True: 
     if GPIO.input(16): 
      blink(11) 
     else: 
      pass 
     time.sleep(.1) 

    GPIO.cleanup() 

if __name__ == "__main__": 
    main() 

Это похоже только на то, чтобы оно мигало сразу после нажатия кнопки, но не постоянно. Не могли бы вы мне помочь? Я очень расстроен. Благодаря!

+0

Вы ожидали, что вам не придется вводить код в класс прототипирования? знаете ли вы какой-то другой язык и боретесь с синтаксисом python? что вы ожидали, когда подписались на этот класс? –

+0

@joran его класс прототипирования. Не класс программирования. Он не должен включать в себя технологию/код/​​электронику, поскольку люди строят алюминиевые кузницы и улучшают химическое оборудование. Я выбрал этот проект, чтобы бросить вызов самому себе. Я знаю htlm CSS и javascrip. так что вы можете взять свой бесполезный дикий комментарий и пойти куда-нибудь. – TyTilton

+0

им просто спрашивали, не был ли каталог непонятным? или что вы будете прототипировать, что не связано ни с одной из этих трех вещей? im искренне любопытно, что я вообще не пытаюсь быть хуй ... Я никогда не слышал о классе прототипирования, который не включал все три из этих вещей ... –

ответ

1

Вы хотите что-нибудь заставить его перестать мигать? Если нет:

blinking = False 
while True: 
    if GPIO.input(16): 
     blinking = True 

    if blinking: 
     blink(11) 

    time.sleep(.1) 

То, что вы первоначально проверки ввода 16 (кнопка состояния) несколько раз, и вызывает функцию blink() один раз, когда кнопка нажата; в следующий раз, когда вы дойдете до вершины while True с входным 16, не установленным, blink() не вызывается.

(Если у вас есть вторая кнопка остановки на другой входной контакт, вы можете добавить еще один GPIO.input() чек с другим номером, чтобы установить blinking к ложным.)

Обратите внимание, что вы передаете номер выходного штырька, 11 , для функции мигания, но не используют переданное значение; чтобы сделать эту функцию более универсальной, вы можете изменить ее на:

def blink(pin): 
    GPIO.output(pin, GPIO.LOW) 
    time.sleep(.2) 
    GPIO.output(pin, GPIO.HIGH) 
    time.sleep(.2) 
    GPIO.output(pin, GPIO.LOW) 
    time.sleep(.2) 
    GPIO.output(pin, GPIO.HIGH) 
    time.sleep(.2) 
    GPIO.output(pin, GPIO.LOW) 
    time.sleep(.2) 
    GPIO.output(pin, GPIO.HIGH) 
    time.sleep(4) 
+0

Пока что я не хочу останавливаться. В конце концов я добавлю язычный переключатель, который, когда сработает, заставит его остановиться, но на данный момент я просто хочу, чтобы он мигнул после нажатия кнопки. Дайте мне минуту, чтобы попробовать это. – TyTilton

0

Ваша проблема проста в объяснении. Пока программа спит, она спит. Ничего не случится. Когда вы вводите blink(), остальная часть программы блокируется примерно на 5 секунд. Не будет нажата кнопка. Также будет разрыв в 4 с, где ничего не произойдет.

Вы опции:

  1. использовать нити. Темы могут запускать код одновременно. См. Пример How to use threading in Python?.

  2. Запустите петлю с коротким (0,1 или менее) сна в конце. В цикле проверьте, чтобы кнопка нажала и перевернула светодиодный вывод на каждую n-ю итерацию. Добавьте логику, чтобы она включалась только в состояние.

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