Aunque en este ejemplo se usa un arduino uno se puede utilizar cualquiera. El pro-mini vale como un attiny y tiene más posibilidades.
int esperas[13] = {0,1,2,3,4,5,6,7,8,9,10,11,12};
int espera = 0;
int midelay = 150;
void setup(){
for(byte i=0;i<13;i++){
pinMode(i, OUTPUT);
esperas[i] = random(0,9);
digitalWrite(i, (random(0,2)==0? LOW:HIGH) );
}
delay(midelay * random(1,3));
}
void loop(){
if(espera > 9) espera = 0;
for(byte i=0;i<13;i++){
if( esperas[i] == espera ){
esperas[i] = random(0,9);
digitalWrite(i, (random(0,3)==0? LOW:HIGH) );
}
delay( midelay * random(1,3) );
}
espera+=1;
delay(midelay * random(1,3));
}
Si se necesitan menos LEDs es mejor modificar el valor «esperas» . Modificando el valor de «midelay» se pueden modificar los tiempos. Modificando la fórmula «random(0,3)» por random(0,2) o random(0,1) aumenta la posibilidad de que un LED se quede apagado del 25% al 33% o el 50%. Si aumentamos a random(0,4) disminuye al 20%.
Explicación del código:
- Variables
- esperas – es un conjunto de valores para almacenar el valor usado para calcular los ciclos del loop que no modifican el estado de cada LED. Es preferible que tenga el tamaño del número de LEDs (por ejemplo para 5 LEDs sería esperas[5] = {0,0,0,0,0};) Los valores no importan, se generan aleatoriamente en el setup.
- espera – es una cuenta de ciclos del loop.
- midelay – es un valor para calcular las pausas
- setup
- Empieza con un bucle que configura los pines como salidas, asigna una espera para ese pin/LED entre 0 y 9 y sortea (33%) si se queda apagado o se enciende.
- Hace una pausa para que el primer cambio no sea en milisegundos.
- loop
- Comprueba que el valor «espera» sea menor o igual a 9, si es mayor lo pone a 0.
- Hace otro bucle para recorrer todos los valores de «esperas»
- Si el valor de la espera de un LED coincide con el valor de «espera» modifica la espera de ese LED, decide (25%) si se enciende o se apaga y esperamos un rato aleatorio para pasar al siguiente LED.
- Aumenta el valor «espera» en 1
- Espera un rato aleatorio para volver a ejecutar el loop
Accede desde aquí a la simulación en https://www.tinkercad.com/ 
