Arduino:
Generering av tilfeldige tall
Hvordan:
Arduino tilbyr enkle funksjoner for å generere tilfeldige tall: randomSeed()
og random()
. For å starte, så den tilfeldige nummergeneratoren for å sikre forskjellige sekvenser av tall hver gang programmet ditt kjører. En ofte brukt tilnærming er å så med en analog avlesning fra en ukoblet pin.
void setup() {
Serial.begin(9600);
// Initialiser tilfeldig seed
randomSeed(analogRead(0));
}
void loop() {
// Generer et tilfeldig tall mellom 0 og 99
int randomNumber = random(100);
Serial.println(randomNumber);
delay(1000); // Forsinkelse på et sekund for lesbarhet av output
}
Programmet ovenfor initialiserer den tilfeldige nummergeneratoren i setup()
-funksjonen og genererer et nytt tall mellom 0 og 99 i hver løkkeiterasjon, og skriver ut tallet til Serial Monitor.
Eksempel på output:
42
17
93
...
Dypdykk
Arduinos random()
-funksjon benytter seg under panseret av en pseudo-tilfeldig tallgenerator (PRNG), som følger en deterministisk sekvens, men ser statistisk tilfeldig ut. Den innledende verdien, eller såkornet, til sekvensen påvirker i høy grad dens uforutsigbarhet, derfor den vanlige bruken av randomSeed()
med en noenlunde tilfeldig inngang som et utgangspunkt. Det er viktig å merke seg at tilfeldigheten som genereres av Arduino er tilstrekkelig for de fleste hobbyprosjekter, men kan ikke oppfylle kriteriene for høy-sikkerhetsapplikasjoner på grunn av dens forutsigbarhet over tid. For kryptografiske formål er det rådelig å se nærmere på mer sofistikerte algoritmer og maskinvaretilfeldige nummergeneratorer (HRNGs), som kan tilby ekte tilfeldighet ved å utnytte fysiske prosesser.