"Arduino" beslut "Box" vara (Attiny85) (6 / 13 steg)
Steg 5: "Sanna" slumpmässighet
Många "random" funktioner är faktiskt allt utom slumpmässiga: de gå igenom en lista med aritmetiska resultat baserat på tidigare resultat. Detta innebär att om startvärdet är samma, den andra, tredje o.s.v. värden också kommer att vara identiska. För att lösa problemet den aktuella tiden används ofta som utgångspunkt, det är aldrig samma.
Utom du kodning för en mikrokontroller. De har inte en pågående klocka. Om de återställs, börjar de från standardvärdena. Visst, du kan använda peka av tid av tryck på knapp som en källa till slumpmässiga data för att göra de timers måste köra men effektförbrukningen är således relativ hög.
I min strategi används en LED som en källa till slumpmässiga data. Lysdioder är känsliga för ljus och generera, om unpowered, en liten spänning. Fantastiska är att denna spänning är extremt känsliga för temperaturförändringar, naturlig radioaktivitet och andra bullerkällor. De små variationerna kan upptäckas med ADC av Attiny, vilket resulterar i en nästan slumpmässiga sista biten. Jag säger "nästan" eftersom 1 eller 0 är något föredra, särskilt under korta perioder.
Bara denna lilla icke-slumpmässighet är märkbar. Alltså använder jag bara "random" buller som utsäde (startvärdet) av en "random" math funktion. Jag har räknas enskilda händelser (se lista ovan). Resultatet stämmer ganska mycket ange sannolikheten för 40% röd, 40% gröna och 20% gul.
För ännu mer slumpmässighet kunde värdet av funktionen matematik och nya slumpmässigt brus värden slås samman. Jag vet inte hur man gör detta på rätt sätt, men om du gör, lämna gärna ett förslag i kommentarerna.