Мигает светодиод Matrix при выполнении других входов. МАЛИНА - PullRequest
0 голосов
/ 09 октября 2019

Я создал световые индикаторы со светодиодной матрицей 8x8 с MAX 7219. Код прост, матрица мигает, пока не обнаружен вход, затем матрица показывает стрелку (вправо или влево).

Другая часть моего проекта использует ИК-датчики. Когда PIR обнаруживает движение, активируется зуммер и светодиод. Две части работают правильно, но мне нужно выполнить их одновременно. Поэтому я отредактировал код, пытаясь смешать их.

Дело в том, что когда ПИР обнаруживает движение, матрица выключается. Затем матрица включается до тех пор, пока PIR не обнаружит другое движение. Я хочу, чтобы мигание матрицы происходило каждый раз, но я не знаю, где следует изменить «Пока истинно»

#librerias para la matriz
from luma.led_matrix.device import max7219              #Para usar el max7219
from luma.core.interface.serial import spi, noop        #Usando la interfaz SPI de la Raspberry
from luma.core.render import canvas                     #canvas se usa para encender las direccionales y luz principal
import time                                             #Para los sleep
#librerias del GPIO
import RPi.GPIO as GPIO                                 #Para los pines de proposito general        


#Creacion de la matriz
serial = spi(port=0, device=0, gpio=noop())
device = max7219(serial, cascaded=2)
print("Created device")                                 #Mensaje de exito al crear la matriz


#Funcion para intermitente derecha
def Derecha():
        for i in range(10):                             #Realiza 10 veces el proceso (10 intermitentes)
                with canvas(device) as on:              #Enciende la flecha derecha por .3 seg
                        #flechaderecha1
                        on.point((7,7), fill="white")   #La funcion point enciende la coordenada indicada
                        on.point((6,7), fill="white")   #usando white la luz se enciende
                        on.point((6,6), fill="white")
                        on.point((5,6), fill="white")
                        on.point((5,5), fill="white")
                        on.point((4,5), fill="white")
                        on.point((4,4), fill="white")
                        on.point((3,4), fill="white")
                        on.point((4,3), fill="white")
                        on.point((3,3), fill="white")
                        on.point((5,2), fill="white")
                        on.point((4,2), fill="white")
                        on.point((5,1), fill="white")
                        on.point((5,1), fill="white")
                        on.point((7,0), fill="white")
                        on.point((6,0), fill="white")
                        #flechaderecha2
                        on.point((4,7), fill="white")
                        on.point((3,7), fill="white")
                        on.point((3,6), fill="white")
                        on.point((2,6), fill="white")
                        on.point((2,5), fill="white")
                        on.point((1,5), fill="white")
                        on.point((1,4), fill="white")
                        on.point((0,4), fill="white")
                        on.point((1,3), fill="white")
                        on.point((0,3), fill="white")
                        on.point((2,2), fill="white")
                        on.point((1,2), fill="white")
                        on.point((3,1), fill="white")
                        on.point((2,1), fill="white")
                        on.point((4,0), fill="white")
                        on.point((3,0), fill="white")
                        time.sleep(.3)

                with canvas(device) as off:             #Apaga la flecha derecha por .3 seg
                        #flechaderecha1
                        off.point((7,7), fill="black")   #La funcion point enciende la coordenada indicada
                        off.point((6,7), fill="black")   #usando black la luz se enciende
                        off.point((6,6), fill="black")
                        off.point((5,6), fill="black")
                        off.point((5,5), fill="black")
                        off.point((4,5), fill="black")
                        off.point((4,4), fill="black")
                        off.point((3,4), fill="black")
                        off.point((4,3), fill="black")
                        off.point((3,3), fill="black")
                        off.point((5,2), fill="black")
                        off.point((4,2), fill="black")
                        off.point((5,1), fill="black")
                        off.point((5,1), fill="black")
                        off.point((7,0), fill="black")
                        off.point((6,0), fill="black")
                        #flechaderecha2
                        off.point((4,7), fill="black")
                        off.point((3,7), fill="black")
                        off.point((3,6), fill="black")
                        off.point((2,6), fill="black")
                        off.point((2,5), fill="black")
                        off.point((1,5), fill="black")
                        off.point((1,4), fill="black")
                        off.point((0,4), fill="black")
                        off.point((1,3), fill="black")
                        off.point((0,3), fill="black")
                        off.point((2,2), fill="black")
                        off.point((1,2), fill="black")
                        off.point((3,1), fill="black")
                        off.point((2,1), fill="black")
                        off.point((4,0), fill="black")
                        off.point((3,0), fill="black")                        
            time.sleep(.3)


def Izquierda():
        for i in range(10):
                with canvas(device) as on:              #Enciende la flecha izquierda por .3 seg
            #flechaizquierda1
                        on.point((4,7), fill="white")   #La funcion point enciende la coordenada indicada
                        on.point((3,7), fill="white")   #usando white la luz se enciende
                        on.point((5,6), fill="white")
                        on.point((4,6), fill="white")
                        on.point((6,5), fill="white")
                        on.point((5,5), fill="white")
                        on.point((7,4), fill="white")
                        on.point((6,4), fill="white")
                        on.point((7,3), fill="white")
                        on.point((6,3), fill="white")
                        on.point((6,2), fill="white")
                        on.point((5,2), fill="white")
                        on.point((5,1), fill="white")
                        on.point((4,1), fill="white")
                        on.point((4,0), fill="white")
                        on.point((3,0), fill="white")
                        #flechaizquierda2
                        on.point((1,7), fill="white")
                        on.point((0,7), fill="white")
                        on.point((2,6), fill="white")
                        on.point((1,6), fill="white")
                        on.point((3,5), fill="white")
                        on.point((2,5), fill="white")
                        on.point((4,4), fill="white")
                        on.point((3,4), fill="white")
                        on.point((4,3), fill="white")
                        on.point((3,3), fill="white")
                        on.point((3,2), fill="white")
                        on.point((2,2), fill="white")
                        on.point((2,1), fill="white")
                        on.point((1,1), fill="white")
                        on.point((1,0), fill="white")
                        on.point((0,0), fill="white")
                        time.sleep(.3)

                with canvas(device) as off:             #Apaga la flecha izquierda por .3 seg
                        #flechaizquierda1
                        off.point((4,7), fill="black")   #La funcion point enciende la coordenada indicada
                        off.point((3,7), fill="black")   #usando black la luz se enciende
                        off.point((5,6), fill="black")
                        off.point((4,6), fill="black")
                        off.point((6,5), fill="black")
                        off.point((5,5), fill="black")
                        off.point((7,4), fill="black")
                        off.point((6,4), fill="black")
                        off.point((7,3), fill="black")
                        off.point((6,3), fill="black")
                        off.point((6,2), fill="black")
                        off.point((5,2), fill="black")
                        off.point((5,1), fill="black")
                        off.point((4,1), fill="black")
                        off.point((4,0), fill="black")
                        off.point((3,0), fill="black")
                        #flechaizquierda2
                        off.point((1,7), fill="black")
                        off.point((0,7), fill="black")
                        off.point((2,6), fill="black")
                        off.point((1,6), fill="black")
                        off.point((3,5), fill="black")
                        off.point((2,5), fill="black")
                        off.point((4,4), fill="black")
                        off.point((3,4), fill="black")
                        off.point((4,3), fill="black")
                        off.point((3,3), fill="black")
                        off.point((3,2), fill="black")
                        off.point((2,2), fill="black")
                        off.point((2,1), fill="black")
                        off.point((1,1), fill="black")
                        off.point((1,0), fill="black")
                        off.point((0,0), fill="black")
                        time.sleep(.3)

#def buzzer():

#Estados de los PIR
est_p1 = 0
est_p2 = 0

#______________Configuracion de los botones_____________________
GPIO.setmode(GPIO.BCM)         #Uso de la numeracion BCM de los pines GPIO
#Usados para los pir
GPIO.setup(05, GPIO.OUT)      #Altavoz en modo salida
GPIO.setup(13, GPIO.OUT)      #LED1 como salida
GPIO.setup(06, GPIO.IN)       #PIR1 en modo entrada
GPIO.setup(12, GPIO.IN)       #PIR2 en modo entrada

#Boton para la flecha izquierda
GPIO.setup(21, GPIO.IN)         #GPIO 21 usado como entrada
#Boton para la flecha derecha
GPIO.setup(20, GPIO.IN)         #GPIO 20 usado como entrada


#Funcion principal que mantiene intermitente la luz
def Intermitente():                                             #loop infinito                                                        
        with canvas(device, dither=True) as on:                                         #usando canvas y la funcion rectangle
                on.rectangle(device.bounding_box, outline="white", fill="white")        #se enciende toda la matriz
                time.sleep(.3)                                                          #por .3 segundos    

        with canvas(device, dither=True) as off:
                off.rectangle(device.bounding_box, outline="black", fill="black")       #Apaga la matriz
                time.sleep(.3)                                                          #por .3 segundos
        #continue
while True:
        Intermitente()

        Value21 = GPIO.input(21)        #El estado del GPIO 21 es igual a Value21
        if (Value21 == True):           #si se presiona el boton
                Izquierda()             #llama a la funcion Izquierda()

        Value20 = GPIO.input(20)        #El estado del GPIO 20 es igual a Value20
        if (Value20 == True):           #si se presiona el boton
                Derecha()               #llama a la funcion Derecha()

        est_p1 = GPIO.input(06)           #Estado del PIR1
        est_p2 = GPIO.input(12)           #Estado del PIR2

        if est_p1:
            print("GPIO pin 06 is %s" % (est_p1))
            GPIO.output(05, True)           #Activa el buzzer
            GPIO.output(13, True)           #Activa el LED
            time.sleep(2)                   #por un segundo
            GPIO.output(05, False)          #buzzer off
            GPIO.output(13, False)          #led1 off
            time.sleep(6)                   #5 seg para volver a detectar otro objeto

        elif est_p2:
            print("GPIO pin 12 is %s" % (est_p2))
            GPIO.output(05, True)           #Activa el buzzer
            GPIO.output(13, True)           #Activa el LED
            time.sleep(2)                   #por un segundo
            GPIO.output(05, False)          #buzzer off
            GPIO.output(13, False)          #led1 off
            time.sleep(6)                   #5 seg para volver a detectar otro objeto

        else:
            print("GPIO pin 06 and 12 are %s and %s" % (est_p1, est_p2))
...