Я пытаюсь создать систему полицейского освещения в стиле Великобритании на Raspberry Pi, используя GPIO или GPIOzero. Пока у меня мигает полицейский свет, но у меня проблемы с кнопками.
У меня 4кнопки: - (кнопка) 1 для включения синих огней (контакт 21 кнопки) (контакт 22 и 18 светодиодов) - (кнопка1) 1 для выключения синих источников (контакт 20) - (кнопка 2) 1 для включения красных индикаторов(Контакт 16 кнопки) (контакт 23 светодиодов и контакт 24) - (кнопка3) 1 для выключения красного света (контакт 26 кнопки)
Я могу включить синие огни с помощью кнопки 1 (это работает нормально), НО Iне могу включить красные огни (кнопка 3), не выключив синие огни (кнопка 1)
Я попытался включить их в функции, но это просто сломало кнопки выключения.
Iхотел бы иметь возможность включать кнопку и кнопку2, не нажимая кнопки 1 и кнопку 4.
import threading
from gpiozero import LED, Button
import time
import sys
import RPi.GPIO as GPIO
Lights = False
RLights = False
button = Button(21)
button1 = Button(20)
button2 = Button(16)
button3 = Button(26)
led = LED(22)
led1 = LED(18)
led3 = LED(23)
led4 = LED(24)
class StopThread(StopIteration): pass
threading.SystemExit = SystemExit, StopThread
class Thread2(threading.Thread):
def stop(self):
self.__stop = True
led.off()
led1.off()
def stopred(self):
self.__stop = True
led3.off()
led4.off()
def _bootstrap(self):
if threading._trace_hook is not None:
raise ValueError('Cannot run thread with tracing!')
self.__stop = False
sys.settrace(self.__trace)
super()._bootstrap()
def __trace(self, frame, event, arg):
if self.__stop:
raise StopThread()
return self.__trace
def led_flash():
while True:
led.on()
time.sleep(0.0625)
led.off()
time.sleep(0.0625)
led.on()
time.sleep(0.0625)
led.off()
time.sleep(0.0625)
led.on()
time.sleep(0.0625)
led.off()
time.sleep(0.0625)
led1.on()
time.sleep(0.0625)
led1.off()
time.sleep(0.0625)
led1.on()
time.sleep(0.0625)
led1.off()
time.sleep(0.0625)
led1.on()
time.sleep(0.0625)
led1.off()
time.sleep(0.0625)
def rled_flash():
while True:
led3.on()
time.sleep(0.0625)
led3.off()
time.sleep(0.0625)
led3.on()
time.sleep(0.0625)
led3.off()
time.sleep(0.0625)
led4.on()
time.sleep(0.0625)
led4.off()
time.sleep(0.0625)
led4.on()
time.sleep(0.0625)
led4.off()
time.sleep(0.0625)
while True:
''' BLUE LIGHTS ON '''
button.wait_for_press()
if Lights == False:
Lights = True
flashing_thread = Thread2(target=led_flash)
flashing_thread.start()
''' BLUE LIGHTS OFF '''
button1.wait_for_press()
if Lights == True:
Lights = False
flashing_thread.stop()
''' RED LIGHTS ON '''
button2.wait_for_press()
if RLights == False:
RLights = True
flashing_thread1 = Thread2(target=rled_flash)
flashing_thread1.start()
''' RED LIGHTS OFF '''
button3.wait_for_press()
if RLights == True:
RLights = False
flashing_thread1.stopred()