Hola,
¿Existe alguna función en Arduino para generar números aleatorios del estilo la clase Random de Java?
En caso negativo ... ¿cómo puedo generar un número aleatorio en Arduino sin utilizar sensores?
Muchas gracias,
Igor
Hola,
¿Existe alguna función en Arduino para generar números aleatorios del estilo la clase Random de Java?
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
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.
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