Generazione di numeri casuali

Arduino:
Generazione di numeri casuali

Come fare:

Arduino fornisce funzioni semplici per generare numeri casuali: randomSeed() e random(). Per iniziare, inizializza il generatore di numeri casuali per assicurare diverse sequenze di numeri ogni volta che il tuo programma viene eseguito. Un approccio spesso utilizzato è quello di inizializzare con una lettura analogica da un pin non connesso.

void setup() {
  Serial.begin(9600);
  // Inizializza il seme casuale
  randomSeed(analogRead(0));
}

void loop() {
  // Genera un numero casuale tra 0 e 99
  int randomNumber = random(100);
  Serial.println(randomNumber);
  delay(1000); // Ritardo di un secondo per la leggibilità dell'output
}

Il programma sopra inizializza il generatore di numeri casuali nella funzione setup() e genera un nuovo numero tra 0 e 99 in ogni iterazione del loop, trasmettendo il numero al Monitor Seriale.

Output di esempio:

42
17
93
...

Approfondimento

La funzione random() di Arduino, sotto il cofano, sfrutta un generatore di numeri pseudo-casuali (PRNG), che segue una sequenza deterministica ma appare statisticamente casuale. Il valore iniziale, o seme, della sequenza influenza fortemente la sua imprevedibilità, da qui l’uso comune di randomSeed() con un input in qualche modo casuale come punto di partenza. È importante notare che la casualità generata da Arduino è sufficiente per la maggior parte dei progetti amatoriali ma potrebbe non rispettare i criteri per applicazioni ad alta sicurezza a causa della sua prevedibilità nel tempo. Per scopi crittografici, è consigliabile esplorare algoritmi più sofisticati e generatori di numeri casuali hardware (HRNGs), che possono fornire vera casualità utilizzando processi fisici.