martes, 10 de marzo de 2015

LEDs con encendido aleatorio

Vamos a usar la función RANDOM() para generar números aleatorios que nos digan que LED toca encender cada vez.

Puedes ver el proyecto en el siguiente enlace:


int timer=300;
int cont = 13;              //tenemos 13 LEDs

void setup(){
 for (int pin=1; pin<=cont; pin++){
  pinMode (pin, OUTPUT);
 }
 randomSeed(analogRead(0));  //para generar una nueva semilla
}
          
void loop () {
 int rnd=random(14);        // ponemos hasta 14 ya que nunca se llega a 14
 digitalWrite (rnd, HIGH);
 delay (timer);
 digitalWrite (rnd, LOW);
 delay (timer);
}

La línea siguiente se añade para elegir una nueva semilla para la serie de números pseudo-aleatorios:

randomSeed(analogRead(0));


Lo que hace es una llamada al pin analógico cero para escuchar el ruido blanco del sistema y usarlo como semilla. Equivale a barajar un mazo de cartas. El problema es que si esto lo probamos en el simulador no hay ruido blanco y por tanto la secuencia de encendido de los LEDs se repite siempre siguiendo la misma serie de números pseudo-aleatorios.

También se podría generar una nueva semilla usando la expresión siguiente:

randomSeed(millis());  // genera una semilla para aleatorio a partir de la función millis()

3 comentarios:

  1. Me ha gustado mucho el post, era sencillo y claro.
    Tengo una pequeña duda, si se quisiera que no se encendiera la siguiente luz hasta el un boton no se pulsara, como se haría? Muchas gracias.

    ResponderEliminar
  2. Se podría definir que se enciendan cada x cantidad de segundos?

    ResponderEliminar