Random poco casuale

Salve a tutti, sto avendo un problemino con la funzione random(), in pratica genera valori casuali come dovrebbe ma ogni volta che resetto la scheda i numeri che escono sono sempre gli stessi. Inserisco lo sketch:

const int barra1 = 3; //20 led
const int barra2 = 5; //20 led
const int barra3 = 6; //20 led
const int barra4 = 9; //20 led
const int barra5 = 10; //20 led
const int barra6 = 11; //20 led

float valoreBarre[6]; // valori pwm
// 255(pwm max) / numero led presenti nelle barre:
float valoreStepBarre[6] = {12.75, 12.75, 12.75, 12.75, 12.75, 12.75};
int numeroLedBarre[6] = {20,20,20,20,20,20};

void setup()
{
Serial.begin(9600);
pinMode(barra1,OUTPUT);
pinMode(barra2,OUTPUT);
pinMode(barra3,OUTPUT);
pinMode(barra4,OUTPUT);
pinMode(barra5,OUTPUT);
pinMode(barra6,OUTPUT);

for(int i=0;i<6;i++)
{
valoreBarre = random(1 , numeroLedBarre_+1) * valoreStepBarre*;
Serial.println(valoreBarre);
}
}
void loop()
{
analogWrite(barra1, valoreBarre[0]);
analogWrite(barra2, valoreBarre[1]);
analogWrite(barra3, valoreBarre[2]);
analogWrite(barra4, valoreBarre[3]);
analogWrite(barra5, valoreBarre[4]);
analogWrite(barra6, valoreBarre[5]);
}
[/quote]*

nel serial monitor tutte le volte che resetto la scheda mi restituisce sempre gli stessi numeri:
102.00
127.50
178.50
242.25
140.25
165.75
E' normale?!?
Saluti_

Chiedo venia, mi rispondo da solo :stuck_out_tongue:
Sembra essere normale, qui Google Code Archive - Long-term storage for Google Code Project Hosting. c'è la spiegazione e una libreria apposita.

"The Arduino default random() function generates what appear to be random numbers. They are actually calculated from a formula. On reset, the formula is reset at a start point, then progresses through a long sequence of random looking numbers. However, Arduino starts at the same point in the sequence every reset."

ciao Pelletta

Sí é normale.

La funzione random() é una funzione che genera dei numeri preudo-casuali.
Con lo stesso valore di partenza genera la stessa sequenza di numeri "casuali".

random() non genera numeri casuali ma genera una sequenza di numeri dove il numro seguente deriva dal precedente e dal valore di partenza. Spazia abbastanza omogeniamente tutti i valori nel intervallo definito dai parametri.

come leggi qua: http://arduino.cc/en/Reference/RandomSeed
per avere un a sequenza di numeri veramente casuali devi avere un valore di partenza casuale. Le possibilitá sono:

  • Leggere il disturbo su un entrata analogica:
  • Usare millis() nel caso che la esecuzione del programma dipende da fattori esterni non prevedibile come attesa a un premere un tasto; Un utente umano non puó ripetere piú volte esatamente il tempo dall'accensiona di Arduino fino al azionare per esempio un tasto. Anche differenze minimali cambiano il valore.
    D'altra parte se parti dallo stesso valore di inizializzazione puoi riperter la sequenza dei numeri. (ognitanto anche questo é voluto).

Dei generatori di numeri veramente casuali sono molto complessi perché devono garantire la distribuzione casuale dei valori all'interno del range di output e non favoreggiare certi numeri o certi range di numeri.

Ciao Uwe