Použitie generátora náhodných čísel v Arduino: funkcie Random a RandomSeed. Arduino Course - Čas a náhodné Arduino generujúce náhodnú bitovú sekvenciu

Pri programovaní Arduina sú chvíle, keď potrebujete získať číslo, ktoré nebude vopred známe ani programátorovi píšucemu skicu, ani používateľovi, 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 materiál vám ukáže, ako s týmito funkciami pracovať, ako aj ako sa zbaviť pseudonáhodnosti pri generovaní čísel.


Generátor pseudonáhodných čísel vo všeobecnosti simuluje chaotický alebo náhodný vzhľad čísel, ale v skutočnosti, ak analyzujete sériu týchto čísel počas dostatočne dlhého obdobia, môžete si všimnúť určitý vzor.


Náhodná funkcia na generovanie pseudonáhodných čísel teda môže mať až dva parametre a zapisuje sa ako random(max) alebo random(min, max). Tu max parameter, ktorý je povinný, určuje hornú hranicu rozsahu pre generovanie pseudonáhodných čísel. Používaním dodatočný parameter min môžete nastaviť spodnú hranicu rozsahu. Výsledkom je, že funkcia vráti nejaké pseudonáhodné číslo v rozsahu od min do 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. Napríklad, ak vytvoríte automat a pri prvom stlačení kľučky sa zobrazí výherná kombinácia, potom si môžete byť istí, že ak resetujete Arduino a znova stlačíte kľučku, automat zobrazí rovnakú výhernú kombináciu. . Skutočne nie je jednoduché implementovať herný automat s úplne náhodným generovaním čísel na Arduino, 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 nadobudne hodnotu (napríklad celé číslo) a použije toto čí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. Ale aj potom je háčik v tom, že hoci sa postupnosť náhodných čísel bude pri použití funkcie randomSeed() líšiť, pri každom spustení skice bude stále rovnaká.


Jediným riešením v tomto prípade môže byť použitie analógových periférnych zariadení (ADC) a zodpovedajúcej funkcie analogRead(). Ak analógový vstup nie je k ničomu pripojený, to znamená, že zostane „visieť“ vo vzduchu, potom vďaka šumu na tejto linke môžete získať skutočne náhodné čísla. Potom v nastavení nastavenia môžete napísať 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 hovoríme o 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 môžem vygenerovať náhodné číslo na %controllername%?“ Okrem toho rozsah odpovedí siaha od „pozrite sa na Google/Wikipediu“ až po „použitie štandardnej funkcie“. Táto „štandardná funkcia“ nie vždy existuje a vyhovuje vývojárovi vo všetkých ohľadoch, častejšie je to naopak: niekedy čísla nie sú ani zďaleka náhodné, niekedy je rýchlosť prevádzky príliš nízka alebo výsledný kód niekedy nie vôbec zapadnúť do voľnej pamäte.
Pokúsme sa zistiť, aké sú algoritmy generovania 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.

Hodnotenie "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. Existujú špeciálne testy na posúdenie kvality (úroveň „náhodnosti“) generátora. Tu sú tie najzákladnejšie z nich:
  • Frekvenčný test. Pozostáva z počítania núl a jednotiek v sekvencii bitov. Počet jednotiek a núl by mal 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érie vyskytujú, v závislosti od ich dĺžky, by malo zodpovedať tomuto rozdeleniu pre skutočne náhodný signál.
  • Spektrálny test. Na pôvodnú sekvenciu sa aplikuje diskrétna Fourierova transformácia. 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 oblasti 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 presne definované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 alebo neskôr dostane do slučky, iná vec 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 výrazne obmedzení v rýchlosti a dostupnej pamäti, mnohé ovládače nepodporujú skutočné aritmetické alebo dokonca násobiace inštrukcie. Berúc do úvahy tieto obmedzenia, pozrime sa na niektoré dobre známe algoritmy.
Lineárna kongruentná metóda
Ďalší člen postupnosti sa vypočíta pomocou vzorca
X i+1 = (aX i + c) mod m
číslo m definuje maximálnu periódu sekvencie, celé čísla a A c- „magické“ koeficienty. číslo m Je rozumné zvoliť rovnajúcu sa mocnine dvoch; v tomto prípade sa operácia konverzie modulo zredukuje na vyradenie najvýznamnejších bitov. Na získanie maximálneho obdobia musia byť splnené tieto podmienky:
- c a m musí byť relatívne prvočíslo,
- a-1 musí byť násobok p pre všetky hlavné faktory 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ť len najvýznamnejšie bity stavovej premennej X, pretože pre najnižšie bity sú štatistické parametre náhodnosti oveľa horšie. Lineárny kongruentný algoritmus je bežne 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 náročné aplikácie.
Fibonacciho metóda s oneskorením
Tento algoritmus používa vzťah
Xi = Xi-a - Xi-b,
kde je stavová premenná X- 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ú ekvivalentné v štatistických vlastnostiach.
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. Hodnota bitu sa vypočíta 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 bit úplne vpravo (alebo úplne vľavo alebo čokoľvek iné) v registri, to znamená, že pseudonáhodná sekvencia sa generuje jeden bit na iteráciu. Pri správne zvolených číslach odbočiek bude perióda generátora 2 N - 1. „Mínus jedna“, pretože je zakázaný nulový stav registra. Čísla pobočiek pre N od 3 do 168 nájdete 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 odbočiek na vygenerovanie nového bitu najviac vľavo, vykoná XOR každý bit v sekvencii odbočenia s bitom najviac vpravo a potom otočí celý register doprava. Táto schéma je zložitejšia na pochopenie, ale ľahšie sa implementuje, pretože všetky operácie XOR možno vykonávať súčasne. Z hľadiska dĺžky periódy a kvality pseudonáhodných čísel sú Fibonacciho a Galoisove schémy ekvivalentné.

Výhody:

  • veľmi jednoduchá implementácia, nevyžaduje ani aritmetiku, 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 na nulu.
Zhrnutie: veľmi rýchly a pomerne kvalitný algoritmus.
Kryptoodolné algoritmy
Na použitie v kryptografii majú PRNG ešte jednu základnú požiadavku: nezvratnosť. Všetky vyššie uvedené algoritmy nemajú túto vlastnosť: ak poznáte niekoľko výstupných hodnôt PRNG, môžete 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 môžete získať bloky pseudonáhodných čísel použitím algoritmu na postupné prirodzené čísla. Pre N-bitovú blokovú šifru nebude perióda väčšia ako 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é sa špeciálne starať o štatistické a spektrálne vlastnosti výstupného toku. Musíte sa obávať iba výpočtovej „obžerstva“ 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 majú takéto ovládače aj veľmi dobrý hardvér PRNG odolný voči kryptomenám.

Zdroje entropie

Ako už bolo uvedené, použitím iba deterministických algoritmov nie je možné vygenerovať skutočne náhodné číslo. Preto sa zvyčajne používa kombinácia 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, takmer čokoľvek.
Aktivita používateľa
Ak zariadenie akýmkoľvek spôsobom interaguje s používateľom, celkom dobré rozhodnutie bude používať samotný používateľ ako zdroj entropie. Napríklad čas stlačenia tlačidla, meraný s presnosťou mikrosekundy (alebo skôr jeho najmenej významných číslic), je úplne nepredvídateľný. Často však zariadenie musí pracovať autonómne, čo znamená, že sme zbavení tohto úžasného informačného kanála.
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 „aby boli“. Bity nízkeho rádu výsledku ADC takmer vždy obsahujú významný šum, dokonca aj pri meraní jednosmerného napätia. 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 máte skvelé náhodné číslo. Ak ADC obsahuje vstavaný predzosilňovač, zapnite ho, je tiež hlučný.
Asynchrónne generátory
Môžete použiť rozdiel v periódach dvoch nesynchronizovaných generátorov hodín. Väčšina ovládačov obsahuje napríklad watchdog timer. Pre zvýšenie spoľahlivosti je taktovaný zo samostatného generá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 počas jednej periódy strážneho časovača. Ak zvolíte periódy tak, že počítadlo počas merania mnohokrát pretečie, môžete získať pomerne náhodné číslo. Nevýhodou tejto metódy je, že trvá veľa času, až niekoľko sekúnd.
Hodiny reálneho času
Ak má diagram 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 nestane znova, pokiaľ nebudete čítať viac ako raz za sekundu. Použitie reálneho času dáva jedinečnosť hodnôt, ale neposkytuje žiadnu nepredvídateľnosť, preto je lepšie kombinovať túto metódu s ostatnými.
RC obvod
Ak má ovládač č periférne zariadenia, okrem I/O portov môžete urobiť nasledovné: jedna z nožičiek je pripojená cez kondenzátor k zemi a cez odpor k napájaciemu napätiu. Ak majú vstupy regulátora interné pull-up odpory, externý odpor nie je potrebný.

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 silne závisí od mnohých faktorov: napájacie napätie, drift parametrov RC obvodu, prahová nestabilita, teplota, netesnosti, 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 (najmä kryptografiu) je potrebný spoľahlivejší zdroj entropie ako tie, ktoré sú uvedené vyššie. V takýchto prípadoch využívajú digitalizáciu signálu z generátora šumu na základe tepelných, výstrelových, či 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ý generuje binárny bitový tok.

Aby sa zabezpečilo, že prah odozvy komparátora neovplyvní štatistické vlastnosti prijímaného signálu, používajú sa dva generátory šumu pracujúce 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 môžem vygenerovať náhodné číslo na ovládači? Autor otázky vysvetlil, že ako projekt kurzu vyrába zariadenie, ktoré napodobňuje hádzanie kockami. Po niekoľkých neúspešných pokusoch porozumieť algoritmom sa zadávateľ témy podelil o svoje riešenie: jednoducho 1000-krát hodil skutočnú kocku a výslednými číslami zaplnil celú voľnú pamäť ovládača. Generátor brilantne obstál vo všetkých „náhodných“ testoch, keďže počas demonštrácie spotreboval menej ako tretinu svojej „rezervy“.
Preto má aj takéto riešenie právo na život, najmä ak sú na náhodnosť čísel kladené veľmi prísne požiadavky, ktoré sa však nevyžadujú príliš často. S klesajúcimi cenami pamätí môže byť rozumné vybaviť zariadenie „rezervou chaosu“, ktorá vydrží celú životnosť zariadenia.
Ďakujem za pozornosť!

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

UPD2: V mnohých prípadoch je užitočné uložiť obsah Entropy poolu (ospravedlňujem sa, 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 môže byť po každom zapnutí generovaná rovnaká sekvencia.
Ak sa očakáva útok, urobte opatrenia proti manipulácii s EEPROM. Ak to ovládač umožňuje, blokujte čítanie/mazanie/zápis pomocou zámkových bitov a pri zapnutí sledujte integritu EEPROM aspoň pomocou jednoduchých kontrolných súčtov.

Značky:

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

randomSeed(seed)

Nastaví hodnotu alebo semeno ako počiatočný bod pre funkciu 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 rozsahu určenom hodnotami min a max.

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 vytvorí náhodné číslo medzi 0 a 255 a vydá 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() na počiatočné číslo

randNumber = random(255); // náhodné číslo od 0 – 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 (rate) 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é 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ď., pridelenie jedinečného názvu premennej a navyše…….

Dobre, tento program sme nainštalovali. Odladili sme „mechanizmus“ práce s modulom. A pozreli sme sa na niekoľko 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áhodnosť. Reakcia

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

Budeme potrebovať:

  • Taktovacie tlačidlo
  • Squeaker
  • Pripojenie káblov „MALE-MALE“

Reakcia

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

Keď kliknete na ľ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.

Tí zruční si to vyskúšajú sami a my sa pozrieme 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 ); // Vygenerujme "náhodný" čas oneskorenia = čas + Rand; //Pridajte oneskorenie oneskorenia (Rand); //Počkajte na tón (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("Time: "); // Výstup času 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ď ich označujú, nemusia mať žiadnu hodnotu. Túto premennú sme použili na prepojenie dvoch príkazov if.

V C++ premenné deklarované vo vnútri cyklu nebudú prístupné v iných slučkách, pretože majú účinok iba v rámci tohto cyklu. Toto sa robí, 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, aby sme zmerali čas, ktorý uplynul od vyslania signálu po stlačenie tlačidla.

náhodný(min,max); Toto je generátor náhodných čísel. Má dve hodnoty. Generuje číslo v rozsahu od min do max.

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

Táto funkcia inicializuje generátor. A ak nastavíme parameter na náhodný, potom dostaneme sekvencie, ktoré potrebujeme. Ak je parameter pevný, poradie bude rovnaké.

Záver

Teraz môžete trénovať svoju reakciu pomocou zariadenia, ktoré ste si sami vyrobili. Alebo môžete pokračovať v ďalšom štúdiu.

Zoznam rádioelementov

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 žiaričPasívne1 Do poznámkového bloku
Taktovacie tlačidloBez zámku2 Do poznámkového bloku
Spojovacie vodiče"Papa-Papa"1



Hore