Función para generar números aleatorios (RANDOM)

Hola,

¿Existe alguna función en Arduino para generar números aleatorios del estilo la clase Random de Java?

http://java.sun.com/j2se/1.4.2/docs/api/java/util/Random.html

En caso negativo ... ¿cómo puedo generar un número aleatorio en Arduino sin utilizar sensores?

Muchas gracias,

Igor

Tom Igoe tenia un truquillo fantastico... no me acuerdo donde lo lei, si en su libro physical computing o en la pagina de tutorials de arduino

el truco consiste en - cojer un cable - quitarle la plastica de proteccion asì que se quede solo un pedacito de metal - enchufar el cable en uno de los analog in pins - leer el ruido radio del ambiente -(eventualmente filtrar y coger solo el range que te interese)

el resultado tendria que ser bastante natural de parecer random...

si lo haces cuentanos los resultados :) ciao b.

You can try using analogRead() on an non-connected pin. It should give random values.

(Apologies for replying in English.)

Gracias, Beltran. Thanks, mellis

No he podido probarlo el fin de semama. Esta tarde lo pruebo y os cuento mis resultados.

Salu2,

Igor

Hola de nuevo,

He estado desaparecido porque he estado bastante liado estas semanas. Este fin de semana he podido cacharrear un rato. Os paso mis avances en cuanto a la obtención de números aleatorios.

La dificultad no está en obtener la lectura analógica, sino en el puñetero cable pelado. Dependiendo de la posición del cable o el tipo de material sobre el que esté tanto la placa como el cable los resultados son muy distintos. He comprobado que lo mejor es mover un poco el cable nada más iniciar la lectura evitar obtener números repetidos constantemente: 0 ... 1023 ... 0 ... 1023 ...

Este es el código fuente con el que he hecho las pruebas. Mi objetivo era obtener un valor aleatorio entre 1 y 9.

/* Números aleatorios * ------------------ * */

// DEFINICIÓN E INICIALIZACIÓN DE VARIABLES

// PINES ANALOGICOS

int random = 4; // PIN del que obtener números aleatorios

// CONFIGURACIÓN

void setup() { beginSerial(9600); }

// DEFINICIÓN DE FUNCIONES

int randomize(){ // Obtiene un valor aleatorio entre 0 y 1023 int value = 0; value = analogRead(random); // Lee el PIN con el cable pelado conectado return (value); }

int randomizeRange(int rango){ // Obtiene un valor aleatorio entre 0 y el valor de la vble. rango // La vble. rango debe ser menos de 1023 int value = 0; int ventana = 0; value = randomize(); ventana = 1023 / rango; return (value / ventana); }

// PROGRAMA PRINCIPAL

void loop() { int aleatorio = 0; aleatorio = randomizeRange(9); printString("Valor:"); printInteger(aleatorio); printNewline(); delay(500); }

Y estos son los resultados ...

1.- Valor entre 0 y 1023

Valor:0 Valor:787 Valor:161 Valor:934 Valor:80 Valor:829 Valor:128 Valor:0 Valor:920 Valor:54 Valor:860 Valor:101 Valor:978 Valor:1023 Valor:8 Valor:1023 Valor:0 Valor:1023 Valor:0 Valor:1023 Valor:0 Valor:1011 Valor:0 Valor:974 Valor:1023 Valor:865 Valor:231 Valor:768 Valor:331 Valor:670 Valor:432 Valor:567

2.- Valor entre 0 y 9

Valor:5 Valor:4 Valor:6 Valor:0 Valor:9 Valor:0 Valor:6 Valor:2 Valor:3 Valor:5 Valor:0 Valor:0 Valor:7 Valor:0 Valor:6 Valor:2 Valor:3 Valor:5 Valor:0 Valor:7 Valor:0 Valor:6 Valor:2 Valor:3 Valor:5 Valor:0 Valor:7 Valor:0 Valor:6 Valor:3 Valor:2 Valor:6 Valor:0 Valor:7 Valor:0 Valor:5 Valor:5 Valor:3 Valor:2 Valor:7 Valor:0 Valor:8 Valor:1 Valor:5 Valor:5 Valor:4 Valor:1 Valor:8 Valor:0

Y para acabar un par de fotos del cable sobre la Arduino ...

Un saludo,

Igor

bien! :) para que lo vas a usar este generador del numeros aleatorios?

b.

Hola,

Lo del random lo necesitaba para un pequeño juego que he hecho para practicar y conocer la placa. Es un SIMON ... es decir ... un juego te muestra una secuencia de números (ilumina unos LED) y tu la tienes que repetir. He utilizado un disco de teléfono para introducir los números por probar algo diferente a un teclado.

http://img.photobucket.com/albums/v20/igortme/Arduino/ProyectoSIMON.jpg

Siguiendo con el random ... la obtención de números aleatorios es un poco complicada. Si el cable pelado no se mueve mucho se repiten demasiado los números. Voy aprobar con disitintas superficies sobre las que colocar el cable a ver que sucede.

Un saludo,

Igor