Beh è strano perché la analogRead(A0) dovrebbe fluttuare se il pin viene lasciato libero. Perché tu l'hai lasciato libero, ossia non connesso a nulla (e magari anche con un pezzetto di filo tanto per fare da "antenna"), vero?...
Non è che l'hai messo a massa o collegato a qualcosa?
Se poi ci facessi vedere il codice (quello che non ti piace che dà sempre gli stessi valori)...
Si, ho visto quella discussione ma usare persino Galois per avere un polinomio ed un algoritmo di generazione di numeri casuali migliori mi pare eccessivo, soprattutto per gli scopi del 99.99% delle applicazioni con Arduino: conosco bene LFSR o registri a scorrimento lineare di Galois, l'ho studiato per lavoro per un progetto di qualche anno fa, e qui non stiamo facendo crittografia né gestiamo "soldi"...
L'algoritmo di Arduino va benissimo, a patto che tu dia un "seed" (quello che dai con "randomSeed()") sufficientemente variato. Tempo fa ne parlai anche qui nel forum, comunque ora vado "a braccio" perché non lo ritrovo.
Se leggi da "analogRead()" tu avrai sempre un seed tra 0 e 1023. Ci siamo fin qui? Ok. Ora, questo significa che tu avrai fino a 1024 sequenze diverse di numeri (pseudo) casuali, ma di fatto sono molte meno perché un pin analogico lasciato a fluttuare ha una distribuzione di valori non omogenea nell'intervallo. Il che restringe il numero di possibili sequenze (pseudo, ok, non lo ripeto più) casuali, diciamo all'incirca alla metà. Se per gli scopi che ti prefiggi ti bastano, ok, altrimenti devi usare qualcosa di leggermente differente. Come vedi, in pratica (soprattutto per un progettino didattico e non per far volare un aereo) è solo una questione di "seed" come ti ha già evidenziato correttamente anche @Datman.
Sapendo che la "randomSeed()" accetta a parametro un "unsigned long", ossia un intero 32 bit, dargli in pasto un "int" per di più "tagliato" a soli 10 bit è uno spreco.
Quello che ho fatto per un progettino di tempo fa, nel quale volevo ben più di quelle circa 500 possibili sequenze diverse, è stato combinare più letture analogiche "floating" per comporre un valore più ampio. Una cosa di questo tipo, simile a quello che feci anni fa:
void setup()
{
Serial.begin(115200);
}
unsigned long vMin = 10000000, vMax = 0;
void loop()
{
Serial.print(bestSeed(A0));
Serial.print(" ");Serial.print(vMin);
Serial.print(" ");Serial.println(vMax);
delay(100);
}
unsigned long bestSeed(byte pin) {
analogRead(pin);
delay(50);
unsigned long seed = analogRead(pin);
for (unsigned long n=100; n < 100000; n *= 10) {
seed += analogRead(pin) * n;
delay(10);
}
if (seed < vMin) vMin = seed;
if (seed > vMax) vMax = seed;
return seed;
}
Da un breve test ottengo valori in un range di ampiezza all'incirca pari a 10.000.000, quindi teoricamente fino a 10 milion di possibili diverse sequenze. Direi più che sufficiente.