Как запустить последовательность «мигающий свет» нажатием кнопки (Raspberry pi) - PullRequest
0 голосов
/ 21 марта 2020

У меня есть этот простой код:

import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(14, GPIO.OUT)
GPIO.setup(2,GPIO.OUT)
GPIO.setup(21,GPIO.IN)

break_prog=False

def key_press(key):
   print("BREAK")
   global break_prog
   break_prog=True

GPIO.add_event_detect(21,GPIO.FALLING,callback=key_press,bouncetime=300)

for i in range(5):
    if break_prog:
       print("STOP THE LOOP")
       break
    else:
       print("GREEN")
       GPIO.output(2,True)
       GPIO.output(14,False)
       time.sleep(3)
       print("RED")
       GPIO.output(2,False)
       GPIO.output(14,True)   
       time.sleep(6)

GPIO.cleanup()

Моя цель - просто заставить свет мигать 5 раз (для l oop).

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

Но то, что я хотел бы сделать, это запустить последовательность при нажатии кнопки.

Может кто-нибудь подсказать мне, как этого добиться простым способом ?

Спасибо.

1 Ответ

0 голосов
/ 21 марта 2020

Я был бы счастлив узнать лучший способ достичь этого, но так я и сделал:

import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(14, GPIO.OUT)
GPIO.setup(2,GPIO.OUT)
GPIO.setup(21,GPIO.IN)

run=False

def key_press(key):
   global run
   if run:
      print("run=0")
      run=False
   else:
      print("run=1")
      run = True

GPIO.add_event_detect(21,GPIO.FALLING,callback=key_press,bouncetime=300)

def seq():
       if(not run):
         print("stop")
         return
       print("GREEN")
       GPIO.output(2,True)
       GPIO.output(14,False)
       time.sleep(3)
       if(not run):
         print("stop")
         return
       print("RED")
       GPIO.output(2,False)
       GPIO.output(14,True)   
       time.sleep(6)

while True:
   if run:
      print("start")
      for i in range (5):
         if(run):
            seq()
      run=False


GPIO.cleanup()
...