Я создал световые индикаторы со светодиодной матрицей 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))