Použitie generátora náhodných čísel Arduino: funkcie Random a RandomSeed. Kurz Arduino – časovanie a náhodné generovanie náhodných bitových sekvencií Arduina

Pri programovaní Arduina sú chvíle, keď potrebujete získať číslo, ktoré nebude vopred známe ani programátorom píšucim skicu, ani používateľom, ktorý bude Arduino s takýmto programom používať. V tomto prípade prichádza na pomoc generátor náhodných (alebo skôr pseudonáhodných) čísel.



Na aktiváciu tohto generátora stačí použiť funkcie random() alebo randomSeed(). Tento článok ukáže, ako s týmito funkciami pracovať, a tiež ako sa zbaviť pseudonáhodnosti pri generovaní čísel.


Generátor pseudonáhodných čísel vo všeobecnosti napodobňuje náhodnosť alebo náhodnosť vzhľadu čísel, ale v skutočnosti, ak analyzujete niekoľko týchto čísel počas dostatočne dlhého obdobia, môžete si všimnúť určitý vzor.


Takže náhodná funkcia na generovanie pseudonáhodných čísel môže mať až dva parametre a môže byť napísaná ako náhodná (max) alebo náhodná (min, max). Tu max parameter, ktorý je povinný, nastavuje hornú hranicu rozsahu generovania pseudonáhodných čísel. Používaním dodatočný parameter min možno použiť na nastavenie spodnej hranice rozsahu. Výsledkom je, že funkcia vráti nejaké pseudonáhodné číslo medzi min a max-1.


Je dôležité pochopiť, že pri použití funkcie random() sa zakaždým vygeneruje presne rovnaký zoznam pseudonáhodných čísel. Ak napríklad vytvoríte automat a pri prvom stlačení kľučky sa objaví výherná kombinácia, potom si môžete byť istí, že ak resetujete Arduino a znova stlačíte kľučku, tento automat zobrazí rovnakú výhru. kombinácia. Na Arduine skutočne nie je jednoduché implementovať hrací automat s úplne náhodným generovaním čísel, ako je to napríklad implementované v herných automatoch www.igrovye-apparati-vulcan.com/ , ale problém môžete čiastočne vyriešiť pomocou randomSeed () funkcia.


Táto funkcia preberá hodnotu (napríklad celé číslo) a používa číslo na úpravu náhodného zoznamu vygenerovaného funkciou random(). Môžete vložiť randomSeed() do funkcie nastavenia a použiť funkciu random() v nekonečne slučka. No v tomto prípade to bude mať háčik, ktorý spočíva v tom, že hoci pri použití funkcie randomSeed() bude postupnosť náhodných čísel iná, pri každom spustení skice bude stále rovnaká.


Jediným riešením v tomto prípade môže byť možnosť využívajúca analógové periférne zariadenia (ADC) a zodpovedajúcu funkciu analogRead (). Ak analógový vstup k ničomu nepripojíte, teda necháte „visieť“ vo vzduchu, tak vďaka šumu na tejto linke môžete získať naozaj náhodné čísla. Potom v nastavení nastavenia môžete písať takto randomSeed(analogRead(A0)). Za predpokladu, že analógový port A0 nie je nikde pripojený.

O generátoroch náhodných čísel sa toho napísalo veľa, ale takmer vždy, pokiaľ ide o implementáciu, sa predpokladá (alebo je výslovne uvedené), že rozprávame sa o x86/x64 a iných "dospelých" architektúrach. Zároveň sú fóra venované vývoju zariadení na mikrokontroléroch plné otázok „ako vygenerujem náhodné číslo na %controllername%?“. Okrem toho rozsah odpovedí siaha od „pozri Google / Wikipedia“ až po „použitie štandardnej funkcie“. Táto „štandardná funkcia“ nie je ani zďaleka vždy prítomná a vývojárovi vyhovuje vo všetkých ohľadoch, častejšie je to naopak: buď čísla nie sú ani zďaleka náhodné, alebo rýchlosť práce je príliš nízka, prípadne výsledný kód nevyhovuje vôbec zapadnúť do voľnej pamäte.
Pokúsme sa zistiť, aké sú algoritmy na generovanie náhodných čísel, ako si vybrať ten správny, a čo je najdôležitejšie, aké sú vlastnosti implementácie týchto algoritmov na ovládačoch.

Skóre náhodnosti

Aplikácie pre RNG môžu byť veľmi odlišné, od hračiek až po serióznu kryptografiu. V súlade s tým sa tiež značne líšia požiadavky na generátor. Na posúdenie kvality (úroveň „náhodnosti“) generátora existujú špeciálne testy. Tu sú tie najzákladnejšie:
  • frekvenčný test. Pozostáva z počítania núl a jednotiek v sekvencii bitov. Jednotky a nuly by mali byť približne rovnaké.
  • Test na sekvenciu identických bitov. Hľadajú sa riadky identických bitov, napríklad 000...0 alebo 111...1. Rozdelenie frekvencií, s ktorými sa séria stretáva, v závislosti od ich dĺžky by malo zodpovedať takémuto rozdeleniu pre skutočne náhodný signál.
  • Spektrálny test. Diskrétna Fourierova transformácia sa aplikuje na pôvodnú sekvenciu. Výsledné spektrum by nemalo mať výrazné píky, ktoré by naznačovali prítomnosť periodických vlastností sekvencie.
  • Autokorelačný test. Vypočíta sa korelačná hodnota medzi kópiami sekvencie posunutými voči sebe navzájom. Test vám umožňuje nájsť opakujúce sa časti v sekvencii.
Existujú špeciálne súpravy, ktoré obsahujú desiatky podobných testov:
NIST - používa sa v súťaži AES na hodnotenie šifrovacích algoritmov.
DIEHARD je jedným z najprísnejších setov, aké existujú.

Algoritmy PRNG

Akákoľvek sekvencia vygenerovaná podľa pevne zakódovaného algoritmu nemôže byť považovaná za skutočne náhodnú, preto, keď hovoríme o algoritmických generátoroch, používajú termín pseudonáhodný podsekvencia. Akýkoľvek generátor pseudonáhodných čísel (PRNG) sa skôr či neskôr zacyklí, ďalšou vecou je, že toto „neskoro“ môže prísť o niekoľko milisekúnd alebo možno o niekoľko rokov. Dĺžka cyklu závisí od veľkosti vnútorného stavu generátora N (v skutočnosti ide o množstvo pamäte, ktorú generátor potrebuje) a pohybuje sa od 2 (N / 2) do 2 N bitov.
Bolo vynájdených veľké množstvo algoritmov PRNG, ale nie všetky sú vhodné na implementáciu na mikrokontroléroch. Sme veľmi obmedzení v rýchlosti a dostupnej pamäti, mnohé ovládače nepodporujú skutočné aritmetické a dokonca ani násobiace príkazy. S ohľadom na tieto obmedzenia sa pozrime na niektoré dobre známe algoritmy.
Lineárna kongruentná metóda
Ďalší člen postupnosti sa vypočíta podľa vzorca
X i+1 = (aX i + c) mod m
číslo m určuje maximálnu periódu sekvencie, celé čísla a A c- "magické" koeficienty. číslo m je rozumné zvoliť rovnajúcu sa mocnine dvoch, v takom prípade sa operácia modulo redukcie zredukuje na vyradenie vysokých bitov. Ak chcete získať maximálne obdobie, musia byť splnené nasledujúce podmienky:
- c a m musí byť coprime,
- a-1 by mal byť násobkom p pre všetkých prvočíselníkov pčísla m,
- Ak m je násobkom 4 (a v našom prípade to bude násobok), potom a-1 musí byť násobkom 4.
Je tu ešte jedna jemnosť: ako výsledok by sa mali brať iba vysoké bity stavovej premennej X, pretože štatistické parametre náhodnosti sú oveľa horšie pre nízke bity. Lineárny kongruenciálny algoritmus je zvyčajne implementovaný ako štandardný rand() v mnohých knižniciach.

Výhody:

  • maximálne možné obdobie pre danú veľkosť stavovej premennej;
  • dostatočne rýchlo;
  • často už implementované v knižnici kompilátora.
mínusy:
  • je potrebná operácia násobenia;
  • nie všetky bity sú rovnako náhodné.
Zhrnutie: rýchly a jednoduchý algoritmus pre menej zodpovedné aplikácie.
Fibonacciho metóda s oneskorením
Tento algoritmus používa vzťah
X i \u003d X i-a - X i-b,
kde je stavová premenná X je celé číslo bez znamienka. Hodnoty oneskorenia a A b berú sa nie hocijaké, ale striktne definované, na dosiahnutie maximálnej kvality sa odporúčajú dvojice (17,5), (55,24) alebo (97,33). Čím väčšie oneskorenie, tým dlhšia perióda a lepšie spektrálne vlastnosti sekvencie. Na druhej strane, aby generátor fungoval, je potrebné uložiť max(a,b) predchádzajúcich čísel, čo nie je vždy prijateľné. Na spustenie generátora tiež potrebujete max(a,b) čísla, ktoré sa zvyčajne získavajú pomocou jednoduchšieho PRNG.

Výhody:

  • nevyžaduje operácie násobenia;
  • všetky bity náhodného čísla sú štatisticky ekvivalentné.
mínusy:
  • vyžaduje veľké množstvo pamäte;
  • vyžaduje na spustenie veľké pole čísel.
Zhrnutie: veľmi kvalitný, ale na zdroje náročný algoritmus.
Posunový register s lineárnou spätnou väzbou


Stavová premenná je uložená v registri dĺžky N. Generovanie ďalšieho stavu zahŕňa dva kroky:
  1. Vypočíta sa hodnota bitu C = X i1 xor X i2 xor… X ik, kde i1, i2...ik- registrovať čísla bitov, tzv ohyby.
  2. Register je posunutý o 1 bit doprava, hodnotu nadobudne bit úplne vľavo S.
Výstup generátora je úplne vpravo (alebo úplne vľavo, alebo čokoľvek iné) bit registra, t.j. pseudonáhodná sekvencia sa generuje jeden bit na iteráciu. Pri správne zvolených počtoch odbočiek bude perióda generátora 2 N - 1. "Mínus jedna", keďže je zakázaný nulový stav registra. Čísla pobočiek pre N od 3 do 168 si môžete pozrieť v tomto dokumente.
Okrem konfigurácie opísanej vyššie, ktorá sa mimochodom nazýva Fibonacciho konfigurácia (nepliesť si s rovnomennou metódou PRNG!), existuje tzv. Konfigurácia Galois.


Namiesto použitia súčtu bitov v sekvencii klepnutia na generovanie nového bitu najviac vľavo XOR každý bit sekvencie klepnutia s bitom najviac vpravo a potom otočte celý register doprava. Táto schéma je náročnejšia na pochopenie, ale ľahšie implementovateľná, keďže všetky operácie XOR je možné vykonávať súčasne. Fibonacciho a Galoisove schémy sú ekvivalentné z hľadiska dĺžky periódy a kvality pseudonáhodných čísel.

Výhody:

  • veľmi jednoduchá implementácia, nie je potrebná ani aritmetika, iba bitové operácie a posuny;
  • veľmi rýchly algoritmus (najmä schéma Galois);
  • dobré štatistické vlastnosti.
mínusy:
  • musíte skontrolovať počiatočnú hodnotu nerovnosti nula.
Zhrnutie: veľmi rýchly a pomerne kvalitný algoritmus.
Algoritmy odolné voči kryptomenám
Pre aplikáciu v kryptografii má PRNG ešte jednu zásadnú požiadavku: nezvratnosť. Všetky vyššie uvedené algoritmy nemajú túto vlastnosť: ak poznáme niekoľko výstupných hodnôt PRNG, je možné riešením jednoduchého systému rovníc nájsť parametre algoritmu (rovnaké „magické“ konštanty a, b, c atď). A ak poznáte parametre, môžete reprodukovať celú pseudonáhodnou sekvenciu.
Ako kryptograficky silný algoritmus PRNG možno použiť akúkoľvek dostatočne silnú blokovú šifru. Výberom tajného kľúča je možné získať bloky pseudonáhodných čísel aplikovaním algoritmu na po sebe idúce prirodzené čísla. Pre N-bitovú blokovú šifru bude perióda najviac 2 N . Bezpečnosť takejto schémy úplne závisí od utajenia kľúča.
Všetky moderné kryptografické algoritmy sú testované na použitie ako PRNG, to znamená, že pri použití certifikovaného algoritmu nie je potrebné venovať osobitnú pozornosť štatistickým a spektrálnym vlastnostiam výstupného toku. Musíte sa obávať iba výpočtovej „nenásytnosti“ krypto-algoritmov. Ak potrebujete vykonať veľké množstvo šifrovacích operácií, má zmysel zvoliť si ovládač s hardvérovými kryptografickými blokmi. Často sa v takýchto ovládačoch nachádza aj veľmi dobrý hardvér PRNG odolný voči kryptomenám.

Zdroje entropie

Ako už bolo spomenuté, použitím iba deterministických algoritmov nie je možné vygenerovať skutočne náhodné číslo. Preto sa zvyčajne používa veľa PRNG + externé zdroj entropie. Zdroj entropie sa používa na nastavenie počiatočnej hodnoty pre PRNG a jeho úlohou je zabezpečiť spektrálnu a štatistickú čistotu sekvencie. Čo možno použiť ako zdroj entropie? Áno, prakticky čokoľvek.
Aktivita používateľa
Ak zariadenie nejakým spôsobom interaguje s používateľom, je celkom dobrý nápad použiť ako zdroj entropie samotného používateľa. Napríklad čas stlačenia tlačidla, meraný s presnosťou na mikrosekundu (alebo skôr jeho najmenej významné číslice), je úplne nepredvídateľný. Často však zariadenie musí pracovať autonómne, čo znamená, že strácame tento úžasný informačný kanál.
Analógovo-digitálny prevodník
Mnoho ovládačov má vstavané ADC. A v mnohých ovládačoch sú veľmi priemernej kvality, vyrobené len "na mieru". Nízke bity výsledku ADC takmer vždy obsahujú významný šum, aj keď sa meria jednosmerné napätie. Toto sa dá použiť: pripojte vstup ADC k napájaciemu napätiu cez delič, urobte niekoľko desiatok meraní, urobte najmenej významné bity - tu je pre vás skvelé náhodné číslo. Ak ADC obsahuje vstavaný predzosilňovač, zapnite ho, tiež vydáva hluk.
Asynchrónne generátory
Môžete použiť časový rozdiel dvoch nesynchronizovaných hodín. Väčšina ovládačov obsahuje napríklad watchdog timer. Pre zlepšenie spoľahlivosti je taktovaný zo samostatného oscilátora, ktorý nie je nijako spojený s hlavným hodinovým signálom. Stačí spočítať počet cyklov hlavného hodinového signálu v jednej perióde strážneho časovača. Ak zvolíte periódy tak, aby počítadlo počas merania mnohokrát pretieklo, môžete získať pomerne náhodné číslo. Nevýhodou tejto metódy je, že trvá dlho, až niekoľko sekúnd.
Hodiny reálneho času
Ak má schéma hodiny reálneho času, môžete použiť ich aktuálne hodnoty na inicializáciu PRNG. Napríklad prevodom aktuálneho dátumu/času do formátu času Unix okamžite získame 32 bitov, ktoré nikdy sa znova nevyskytne, pokiaľ neodčítate viac ako raz za sekundu. Použitie reálneho času dáva jedinečnosť hodnôt, ale nedáva žiadnu nepredvídateľnosť, takže je lepšie kombinovať tadiaľto s ostatnými.
RC obvod
Ak ovládač žiadne nemá periférií, s výnimkou I / O portov, môžete urobiť nasledovné: jedna z nôh je pripojená cez kondenzátor k zemi a cez odpor - k napájaciemu napätiu. Ak majú vstupy regulátora interné pull-up odpory, nie je potrebný žiadny externý odpor.

Do tohto portu vyšleme signál „0“ - kondenzátor je vybitý. Port prepneme do vstupného režimu - kondenzátor sa začne nabíjať. Keď napätie na ňom dosiahne prahovú hodnotu, vstup sa prepne zo stavu "0" na "1". Doba nabíjania je veľmi závislá od mnohých faktorov: napájacie napätie, drift parametrov RC obvodu, nestabilita prahu, teplota, únik, rušenie. Meraním s dostatočnou presnosťou a odberom najmenej významných bitov môžete získať dobrú náhodnosť.
Hardvérový generátor šumu
Pre mnohé seriózne aplikácie (predovšetkým kryptografia) je potrebný spoľahlivejší zdroj entropie ako tie, ktoré sú uvedené vyššie. V takýchto prípadoch je signál digitalizovaný z generátora šumu na základe tepelných, výstrelových alebo dokonca kvantových efektov. Šumovým prvkom je zvyčajne špeciálna dióda alebo zenerova dióda, ktorej signál sa zosilňuje a privádza do komparátora, ktorý tvorí binárny bitový tok.

Aby prah odozvy komparátora neovplyvňoval štatistické vlastnosti prijímaného signálu, používajú sa dva generátory šumu, ktoré pracujú na jednom komparátore:

Záver

Na záver vám poviem jeden príbeh z môjho života. Začalo to ďalšou otázkou položenou na fóre „ako vygenerujem náhodné číslo na ovládači?“. Autor otázky vysvetlil, čo robí zariadenie, ktoré napodobňuje hádzanie kockou, ako projekt kurzu. Po niekoľkých neúspešných pokusoch zistiť algoritmy sa topikstarter podelil o svoje riešenie: jednoducho hodil skutočnú kocku 1000-krát a výslednými číslami zaznamenal celú voľnú pamäť ovládača. Generátor obstál vo všetkých testoch na „náhodnosť“ na výbornú, keďže počas predvádzania spotreboval menej ako tretinu svojej „rezervy“.
Aj takéto riešenie má teda právo na život, najmä ak sú na náhodnosť čísel kladené veľmi prísne požiadavky, ktoré sa však veľmi často nevyžadujú. S klesajúcimi cenami pamätí môže byť rozumné naskladniť zariadenie s flash diskom „chaos headroom“, ktorý vydrží celý život zariadenia.
Ďakujem za pozornosť!

UPD1: Ako bolo správne uvedené v komentároch, ak sa predpokladá útok na RNG a útočník má hardvérový prístup k zariadeniu, externé zdroje entropie by sa mali používať veľmi opatrne, pretože nie je veľmi ťažké nahradiť signál z externý zdroj. Malo by sa použiť interné zdroje, môže byť okrem externého.
Tiež je dobré hromadiť entropiu všetkého voľný čas a použite ho, keď potrebujete vygenerovať ďalšie náhodné číslo. Zvyčajne sa v takýchto prípadoch používa tzv. Bazén entropie- pole, nad ktorým sa periodicky vykonáva jedna z funkcií PRNG a kde sa neustále miešajú údaje zo zdrojov entropie.

UPD2: V mnohých prípadoch je užitočné uložiť obsah Entropy poolu (prepáčte, nepoznám normálny ruský preklad) do EEPROM, aby sa po vypnutí a zapnutí zariadenia znova nehromadil. Týka sa to predovšetkým získania entropie metódou asynchrónnych generátorov: za dostatočne stabilných podmienok možno po každom zapnutí generovať rovnakú sekvenciu.
Ak sa očakáva útok, urobte opatrenia proti neoprávnenej manipulácii s obsahom EEPROM. Ak to ovládač umožňuje, blokujte čítanie / mazanie / zapisovanie pomocou blokovacích bitov, po zapnutí kontrolujte integritu EEPROM, aspoň pomocou najjednoduchších kontrolných súčtov.

Značky:

  • rfc
  • gpsch
  • mikrokontroléry
  • algoritmy
Pridať značky

randomSeed (semeno)

Nastaví hodnotu alebo semeno ako počiatočný bod funkcie random().

randomSeed(hodnota); // nastaví 'value' ako počiatočnú náhodnú hodnotu

Keďže Arduino nedokáže generovať skutočne náhodné čísla, randomSeed vám umožňuje vložiť do náhodnej funkcie premennú, konštantu alebo inú funkciu, ktorá pomáha generovať viac náhodných čísel.

„náhodné“ čísla. Existuje mnoho rôznych zárodkov alebo funkcií, ktoré možno použiť v tejto funkcii, vrátane millis() alebo dokonca analogRead() na čítanie elektrického šumu cez analógový kolík.

náhodný (max.)

náhodný (min, max)

Funkcia náhodného výberu vám umožňuje vrátiť pseudonáhodné číslo v rámci rozsahu daného minimálnou a maximálnou hodnotou.

hodnota = nahodne(100, 200); // nastaví 'value' na náhodnú

// číslo medzi 100 a 200

Poznámka: Použite to po použití funkcie randomSeed(). Nasledujúci príklad generuje náhodné číslo medzi 0 a 255 a vydáva PWM

signál na výstup PWM rovný náhodnej hodnote:

int randNumber; // premenná na uloženie náhodnej hodnoty

int led = 10; // LED s odporom na kolíku 10

void setup() () // nastavenie nie je potrebné

randomSeed(millis()); // nastaví millis() ako základ

randNumber = random(255); // náhodné číslo od 0 do 255 analogWrite(led, randNumber); // výstupný PWM signál

oneskorenie(500); // pauza na pol sekundy

Zdroj: Gololobov V. - Kde začínajú roboty. O projekte Arduino pre školákov (nielen) - 2011

Súvisiace príspevky

Serial.begin (rýchlosť) Otvorí sériový port a nastaví rýchlosť sériového prenosu dát. Typická prenosová rýchlosť pre počítačovú komunikáciu je 9600, aj keď sú podporované aj iné prenosové rýchlosti. void setup()( Serial.begin…….

Všetky premenné musia byť pred použitím deklarované. Deklarovanie premennej znamená definovanie typu jej hodnoty: int, long, float atď., nastavenie jedinečného názvu premennej a navyše…….

Dobre, tento program sme nainštalovali. Odladili sme „mechanizmus“ práce s modulom. A pozrite si pár príkladov. Ale rád by som sám vytvoril niečo užitočné. Vyskúšajme. Najprv zatvorme predchádzajúci projekt. Pre to…….

Pozor! Pri práci s modulom Arduino v iných vývojových prostrediach by ste si mali dávať pozor na konfiguráciu mikrokontroléra (Fuses). Kým presne neviete, k čomu môže zmena viesť…….

Čas a náhoda. Reakcia

Tentokrát sa dozvieme, čo sú „náhodné“ hodnoty, a tiež sa naučíme pracovať s časom.

Budeme potrebovať:

  • Tlačidlo hodín
  • piskor
  • Spojovacie vodiče "PAPA-PAPA"

Reakcia

Našou dnešnou úlohou je zostaviť obvod, ktorý nám umožní zistiť rýchlosť našej reakcie.

Keď stlačíte ľavé tlačidlo, po „náhodnom“ čase zaznie signál. A keď stlačíte pravé tlačidlo, zaznamená sa, koľko času uplynulo od pískania po stlačenie pravého tlačidla.

Kto je šikovný - vyskúša si to sám a pozrieme sa na schému.

#define BUZ 8 #define START 9 #define STOP 7 int time; // Premenná pre synchronizáciu void setup() ( Serial. begin(9600); pinMode(START, INPUT_PULLUP); pinMode(STOP, INPUT_PULLUP); pinMode(BUZ, OUTPUT); ) void loop() ( if(digitalRead(START) == 0) // Keď stlačíte tlačidlo START.. ( int start_time = millis();// Zapamätajte si čas stlačenia time = start_time; // Zapíšte ho do globálnej premennej. int Rand = random(0, 4000) ; // Vygenerujte "náhodný" čas oneskorenia = čas + Rand; //Pridajte oneskorenie oneskorenia (Rand); //Tón čakania (BUZ, 3000, 500); //Pípnutie! ) if(digitalRead(STOP) = = 0 && digitalRead( START) == 1)// Keď stlačíte tlačidlo STOP... ( int stop_time = millis(); //Zapamätajte si čas zastavenia. time = stop_time - čas; // Vypočítajte časový rozdiel. Serial .println("Čas: "); // Vytlačí čas do Serial. Serial. println(time); delay(1000); ) ) // Pred druhým pokusom znova stlačte tlačidlo ŠTART.

Vysvetlenia

int čas; Premenné (nie všetky), keď sú určené, nemusia mať priradenú žiadnu hodnotu. Túto premennú sme použili na prepojenie dvoch príkazov if.

V C++ premenné deklarované v rámci cyklu nebudú dostupné v iných cykloch, pretože sú platné iba v rámci tohto cyklu. Deje sa tak, aby sa predišlo chybám pri programovaní. Keď sa kód programu rozrastie, pochopíte, o čom hovorím.

Ak chcete sprístupniť premennú viacerým príkazom, musíte ju urobiť globálnou. Tie. deklarovať premennú mimo funkcií.

millis(); Vráti počet milisekúnd, ktoré uplynuli od spustenia programu.

Potrebujeme ho na meranie času, ktorý uplynul od signalizácie po stlačenie tlačidla.

náhodný(min,max); Je to generátor "náhodných" čísel. Má dve hodnoty. Vygeneruje číslo medzi min a max.

„Náhodné“ čísla, pretože ide o určitú postupnosť hodnôt. Veľmi dlhé, ale rovnaké. Ak chcete získať rôzne sekvencie, mali by ste použiť NáhodnýSemeno();

Ona, funkcia, inicializuje generátor. A ak nastavíte parameter na náhodný, získame sekvencie, ktoré potrebujeme. Rovnaká postupnosť bude, ak je parameter pevný.

Záver

Teraz môžete trénovať svoju reakciu pomocou vlastného zariadenia. A môžete pokračovať.

Zoznam rádiových prvkov

Označenie Typ Denominácia Množstvo PoznámkaObchodMôj poznámkový blok
Arduino doska

Arduino Uno

1 Do poznámkového bloku
Doska na chliebBreadboard-polovica1 Do poznámkového bloku
Piezo bzučiakPasívne1 Do poznámkového bloku
Tlačidlo hodínBez držiaka2 Do poznámkového bloku
Spojovacie vodiče"Papa papa"1



Hore