Hola mirasu... hace un tiempo estuve jugando con el manejo de leds y descubrí algunas cosas interesantes.
Particularmente quería manejar la intensidad de los leds y los colores por lo que era mas complejo de lo que estás planteando pero... muchas cosas en común.
1- Si queres hacer algo bien claro a nivel soft tenes que pensar en diseñar algo basado en objetos. Ahora bien... cuando uno encara ese tipo de soluciones en este tipo de entornos (microcontroladores) lo que suele suceder (dependiendo de lo que estés diseñando) es relentizar todo el proceso de ejecución. Ojo con esto. Por mas linda que parezcan las clases y todo eso... creo que al final afectan temas de performance y....
2- En este caso puntual donde tenes que multiplexar la performance debe ser alta... como te dicen "ionhs" los leds se van a atenuar por ello te combiene usar leds de alta iluminación.
Si queres hacer algo mucho mas escalable... y salir de lo que es 3x3 ya vas a tener que pensar en otros componentes que te solucionen este tipo de problemas (multiplexado) y hasta te multipliquen la cantidad de puertos digitales. Pero eso ya es para otro post je.
Yo te recomendaría:
Hacer algo mas modularizado (si queres orientarloa objetos mejor)
Juga con los valores de delay(???)... es super importante encontrar el equilibrio en esto para evitar que la luz se atenue o se vean parpadeos.
Aprovecho para poner el codigo de la página que me costó encontrar je
int Columnas[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int Filas[] = {12, 11, 10};
int RandFila;
int RandColumna;
int tiempo;
int barrera = 0;
void setup()
{
int contador;
for (int contador = 0; contador < 10; contador++)
{
pinMode(Columnas[contador], OUTPUT);
}
for (int contador = 0; contador < 4; contador++)
{
pinMode(Filas[contador], OUTPUT);
}
Serial.begin(9600);
}
void loop()
{
RandLed();
}
void RandLed()
{
RandFila = random(0,3);
RandColumna = random(0,9);
digitalWrite(Filas[RandFila], HIGH);
digitalWrite(Columnas[RandColumna], HIGH);
delay(75);
digitalWrite(Filas[RandFila], LOW);
digitalWrite(Columnas[RandColumna], LOW);
delay(50);
}
Contá como te fue con esto y.... obviamente posteate el código final.
Suerte,
Market