как заставить кнопки GPIO работать отдельно, а не по порядку - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь создать систему полицейского освещения в стиле Великобритании на 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...