Descargo de responsabilidad: No conozco la forma "correcta" de resolver este problema. Pero presentaré mis pensamientos sobre el enfoque para resolver esto, y las personas pueden agregar comentarios y votar arriba / abajo para, con suerte, incluir esto en una respuesta que lo ayude.
Lo primero que hago es pensar en la solución con mayor fuerza bruta. Asumamos que tus dos colores son rojo y verde. Por lo tanto, necesitarás 49 LED rojos y 49 verdes. Debe conectar la alimentación y la conexión a tierra a cada uno, así como a una resistencia limitadora de corriente, pero solo concentrémonos en las conexiones por ahora, ya que quiere usar un Arduino. Los cátodos de los 98 LED se pueden unir a tierra y los otros 98 se pueden conectar a su microcontrolador.
Claramente, esto no funciona porque no tendría suficientes salidas digitales para abordar cada LED individualmente. Y desea cambiar el brillo, por lo que también necesitará varias salidas PWM.
Huella / estética, si puede obtener un LED bicolor que tenga los dos colores que desea, intentaría usar uno de esos en su lugar y asumirá esa dirección por el resto de esta "respuesta".
Ahora tenemos un diseño con 49 LED bicolores, con todos los cátodos atados a un terreno común. Ahora debe pensar en las 7 filas de colores discretos y controladas por brillo, y en el control individual de encendido / apagado. Cuando pienso en el brillo, mi primer enfoque es usar PWM. Creo que técnicamente esta no es la forma "correcta" de hacerlo, pero no sé cómo crear fuentes actuales, por lo que PWM es la ruta que tomo normalmente. Supongamos que tiene 7 salidas reservadas y va con una solución de software del 100%, probablemente imprecisa, es decir, no puede simplemente establecer el ciclo de trabajo de PWM en un registro y tener automáticamente el interruptor de salida para usted.
El siguiente problema a considerar son las 49 salidas individuales para controlar cada LED. Es un poco loco tratar de obtener un micro con tantas salidas solo para hacer los LED, e imposible en un Arduino, por lo que recomiendo buscar registros de desplazamiento de entrada en serie y salida en paralelo. La última vez que usé uno de estos fue para una pantalla matricial de LED en la escuela, y tenía 16 salidas. Por ahora, tal vez tienen más grandes. Pero con 16 salidas, solo necesita 3 registros de desplazamiento + 1 registro separado, o 4 registros de cambio, y uno de ellos solo se conectará a un único LED. Una especie de desperdicio. Su software será responsable de tomar los píxeles que desea mostrar, convertirlos en una transmisión en serie y luego colocar la entrada en el registro de desplazamiento en consecuencia.
Pero ¿qué pasa con el LED bicolor? Necesita dos conexiones a cada LED. Al principio, pensé que podría resolver esto con un simple circuito lógico, de modo que al activar o desactivar una única salida se obtenga un color diferente. Pero obviamente, también quieres tener un tercer estado: OFF. :) Entonces, básicamente, creo que no se puede tener dos "salidas" por LED.
Quizás la mejor manera de resolver esto es utilizar dos conjuntos de registros de desplazamiento: un conjunto de 3 (o 4) registros de desplazamiento para un color, y otro conjunto para el otro color. Estos registros de desplazamiento deben tener sus salidas paralelas configuradas en sincronización, o obtendrá una mezcla de colores cuando ambos colores se enciendan simultáneamente. Sin embargo, no creo que esto vaya a ser un problema. Simplemente transmita sus datos en serie en ambos conjuntos de registros de desplazamiento primero, luego llame a una función que traba los bits (casi) simultáneamente. Creo que también necesitará ICs o transistores de búfer adicionales para estas salidas adicionales.
En este punto, tenemos algunas ideas para resolver el control de brillo, la selección de color y la capacidad limitada de E / S del Arduino, pero no lo hemos unido todo con un controlador LED. La capacidad de la unidad de LED puede ser manejada por transistores, o un búfer IC que genera suficiente corriente. Si desea obtener PWM por encima de la clasificación actual de un LED (que aprendí que es aceptable dentro de lo razonable), entonces probablemente tendrá que usar transistores discretos, o tal vez un IC como un ULN2003A. Solo necesitas uno por fila controlada por brillo. Una vez más, PWM es controlado por Arduino a través de una salida digital y software.
Entonces, ¿cómo se mantiene todo unido? Bueno, creo que la forma en que lo haría es así:
- vincule las salidas de todos los registros de desplazamiento a una entrada de una puerta OR
- vincule las salidas PWM a la otra entrada de las compuertas OR. Tendrá una compuerta OR por LED y color, por lo que son 98 compuertas OR, y puede encontrar circuitos integrados con 4 compuertas por chip. Eso es todavía un montón de fichas. Lo sentimos, tal vez alguien más pueda sugerir algo mejor.
- la salida de las puertas OR va a las entradas del búfer IC / transistores
- las salidas de los búferes van a sus respectivas patas de LED
Uf. Sé que esta no es la solución más óptima, pero espero que algunas de las cosas que he mencionado te ayuden. También espero que los miembros con más experiencia aquí puedan comentar formas de mejorar este enfoque.