Random en Arduino: como usar números aleatorios Deja un comentario

random en arduino

Y Arduino no iba a ser menos, utilizando esta función obtendremos números aleatorios para nuestro sketch. Pero estos números aleatorios en realidad no lo son. Como ocurre en la mayoría de estos lenguajes, incluyendo Arduino, son números seudoaleatorios, es decir, si se inicia la función random con los mismos parámetros se obtiene la misma secuencia de números.

La función Random en Arduino

La sintaxis de esta función es la siguiente:

  • Random(max): Se obtiene un numero “aleatorio” desde 0 hasta max.
  • Random(min, max): Se obtiene un numero “aleatorio” desde min hasta max

Veamos cómo se comporta esta función escribiendo el resultado en el monitor serie con los parámetros random(1,100):

Números aleatorios monitor serie

Reseteamos y volvemos a lanzar el programa y nos fijamos en la salida del monitor serie:

Números aleatorios monitor serie

Como veis en las dos imágenes, la secuencia es la misma y no nos valdría para realizar un juego de azar. Siempre sabríamos que iba a salir.

Pero hay una solución llamada semilla y que existe en todos los lenguajes que implementan la función random. La semilla es un valor por defecto que coge la función random para inicializarse, si cambiamos esta semilla la secuencia de datos cambiara.

La función randomSeed en Arduino

La sintaxis de esta función es la siguiente:

  • randomSeed(semilla): Incializa la función random con el valor semilla pasado por parámetro. Esta función se incluirá dentro de la función setup de nuestro skecth

Con esta función ya obtendremos una secuencia distinta a la anterior. Veamos el ejemplo pasándole una semilla con valor 39 y fijémonos en el monitor serie.

Números aleatorios monitor serie

Como ves, se diferencia de la secuencia anterior. Pero paramos, reseteamos y volvemos a ver el resultado.

Números aleatorios monitor serie

Se vuelve a repetir la secuencia? Si!, a misma semilla mismo resultado. Como os contaba al principio lenguajes como PL SQL de Oracle lo solucionan muy eficazmente, tienen una semilla por defecto que se compone con la fecha del sistema y el identificador del usuario haciendo casi imposible que la secuencia se repita.

La solución en Arduino

Para conseguir que cada vez que iniciemos el skecth tengamos secuencias diferentes tenemos que pasarle cada vez una semilla diferente. Esto lo conseguimos si como semilla le pasamos el valor de una entrada analógica que no utilicemos en nuestro sketch mediante la función analogRead(). Estos pin analógicos cuando no son utilizados no tienen ninguna tensión de referencia y devolverá un valor de ruido que será diferente cada vez que preguntemos por su valor.

Así es que el código nos quedara así:

Y vamos a hacer nuestra comprobaciones con el monitor serie reseteando el proceso

Números aleatorios monitor serie

Ya tenemos la forma correcta de emular el azar con Random en Arduino ahora solo nos queda ver que podemos hacer. Os pongo un ejemplo sencillo con LEDs: En este ejemplo tenemos 4 LEDs y encendemos uno de ellos aleatoriamente según nos devuelva la función random.

Monta el esquema que te muestro a continuación.

Circuito LEDs aleatorio

Este es el código que debes utilizar para seleccionar los LEDs al azar con random en Arduino.

Gracias a Shutterstock por ceder los derechos de la imagen

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Enviar Whatsapp
Hola 👋
¿En qué podemos ayudarte?