Simon säger med lysdioder (5 / 6 steg)
Steg 5: Vänta, inte är "random" nästan omöjligt med mikrokontroller?
Men hur kom mikrokontroller med "random" mönster?
Elektroniska chips, såsom PIC32 chip från Microchip, har inte något sätt att godtyckligt komma med ett antal av något slag, men vad chipet på uC32 har är en mycket lång sekvens av nummer. Denna sekvens av nummer nås via random() funktion, som väljer ett nummer baserat på gränserna att du ger den. Till exempel med åtta lysdioderna som kunde tändas upp, är random() funktion skriven som random(1,9) att välja ett nummer mellan 1 och 8. Den övre numret i random() funktion anses vara 1 större än önskad utdataområdet av random() funktion.
Detta är trevligt, skulle vi finna att varje gång vi spelar Simon Says som mönstret av lysdioder som lyser upp alltid är samma eftersom nummerserien som random() drar från är alltid samma. För att komma runt detta och gör spelet mer "random" kan vi anropa funktionen randomSeed() innan du använder funktionen random(). RandomSeed() berättar mikrokontroller var du ska börja dra nummer från i nummerserien baserat på vilket värde vi ger den. Således kunde vi berätta randomSeed() att få ett värde baserat off analoga ljudet av en I/O stift på mikrokontroller, att få oss en "random" plats att börja i vår nummerserie med random() funktion.
Det har dock varit min erfarenhet att de elektriska störningar på ett stift tenderar att begränsas till ett mycket litet antal nummer, exempelvis 0 till 5, vilket inte är helt så godtyckligt som jag skulle vilja. Så har jag istället de randomSeed() samla sitt nummer från den funktion millis(), som rapporterar värdet på den ständigt rinnande tiden counter som varar för nästan 50 dagar. Med hjälp av millis(), där random() funktion drar sina värden från är inneboende beroende på hur länge spelaren tar för att lämna in sina svar. Förutsatt att spelaren är människan i stället för en annan mikrokontroller, garanterar denna metod att en annan plats i nummerserien väljs varje gång spelet spelas.