Ostatné IO funkcie

U Arduina je možné generovať i zvuk, ale iba v najjednoduchšej podobe. Neumožňuje totiž generovať analógové hodnoty. Rozlišuje teda iba 0V a 5V. Výsledná vlna nazývaná squarewave vychádzajúca z Arduina vyzerá takto:

squarewave, štvorcová vlna

Výška tónu závisí na frekvencii, to je počet opakovania “vrcholov” vlny za jednu sekundu. U Arduina to znamená počet zmien z 0 na 5V za sekundu. Jednotkou frekvencie je hertz (Hz). Ľudské ucho je schopné rozlíšiť približne tóny medzi 20Hz až 20.000Hz. Rozsah sa však líši medzi jedincami.

tone(pin, frekvencia, čas)

Funkcia tone() slúži na generovanie tónu. Má dva povinné a jeden nepovinný parameter. Prvým z nich je pin, na ktorom bude pripojený reproduktor alebo piezobzučiak, druhým parametrom je frekvencia tónu a nepovinný parameter je dĺžka tónu v milisekundách (inak tón pokračuje až do volania noTone()). Strieda vlny je 50%. Frekevenčný rozsah je cca 31Hz až 65535Hz. Naraz môže znieť iba jeden tón. Ak už znie na jednom pine jeden tón, volanie funkcie tone() na inom pine neurobí nič. Ak sa funkcia zavolá na tom istom pine, zmení jeho frekvenciu. Pozor, použitie funkcie tone() bude ovplyvňovať generovanie PWM signálov.

void tone(uint8_t pin, unsigned int frequency, unsigned long duration=0);

noTone(pin)

Touto funkciou sa vypne generovaný tón na danom pine. Používa sa vtedy, keď nie je nastavená dĺžka tónu vo funkcii tone().

void noTone(uint8_t pin);

shiftOut(dataPin, clockPin, bitOrder, hodnota)

Funkcia shiftOut() vykonáva postupné odosielanie jednotlivých bitov (hodnota) na výstupný pin (dataPin). Funkcia postupuje podľa nastavenia poradia bitov (bitOrder) tak, že najprv nastaví hodnotu bitu na dataPin a potom urobí krátky impulz hodín na clockPin. Toto je softvérová implementácia rovnakej funkcionality ako vykonáva rozhranie SPI. SPI je síce voči tejto funkcii rýchlejšie, ale nemôže zase odosielať bity na ľubovoľnom pine. DataPin a clockPin musia byť už nakonfigurované ako výstupy pomocou volania pinMode().

void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t value);

Nastavenie poradia bitov bitOrder je:

  • MSBFIRST – Most Significant Bit First. Najvýznamnejšie bity idú ako prvé
  • LSBFIRST – Least Significant Bit First. Najmenej významné bity idú ako prvé.

Táto funkcia shiftOut() sa spravidla používa s externým hardvérom, napr. s posuvným registrom 74HC595. Takto vieme Arduino rozšíriť o ďalšie výstupné piny napr. pre LED. Tieto obvody sa dajú samozrejme reťaziť a rozširovať tak o ďalšie a ďalšie výstupné piny.


shiftIn(dataPin, clockPin, bitOrder)

Funkcia shiftIn() vykonáva postupné prečítanie jednotlivých bitov na vstupnom pine (dataPin). Funkcia postupuje podľa nastavenia poradia bitov (bitOrder – MSBFIRST alebo LSBFIRST) tak, že urobí krátky pulz hodín na clockPin a potom prečíta hodnotu bitu na dataPin. Hodinový signál je signalizáciu pre druhú stranu, aby poslala ďalší bit.

uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder);

Táto funkcia shiftIn() sa spravidla používa s externým hardvérom, napr. s posuvným registrom 74HC165. Takto vieme Arduino rozšíriť o ďalšie vstupné piny napr. pre tlačítka. Tieto obvody sa dajú samozrejme reťaziť a rozširovať tak o ďalšie a ďalšie vstupné piny.


pulseIn(pin, hodnota, limit)

Funkcia pulseIn() je určená pre meranie dĺžky impulzu na pine. Nastavením začiatku sledovania na úroveň HIGH (alebo LOW) sa časovač spustí pri detekovaní signálu HIGH (LOW) na danom pine. Po jeho zmene na LOW (HIGH) sa časovač zastaví. Funkcia následne vráti dĺžku impulzu v mikrosekundách alebo 0, ak nebol prijatý žiadny úplný impulz v časovom limite. Voliteľný parameter limit je štandardne nastavený na jednu sekundu alebo na zadanú hodnotu ideálne v rozmedzí 10ms až 3 minúty.

unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout);

Príklad: sledovanie impulzu na pine 7, výsledok sa uloží do premennej trvanie

int pin = 7;
unsigned long trvanie;

void setup() {
  pinMode(pin, INPUT);
}

void loop() {
  trvanie = pulseIn(pin, HIGH);
}

Tento text je preložený a upravený zo stránok arduino.cc pod licenciou Creative Commons Attribution-ShareAlike 3.0.

Výber na čítanie...

swDuino 2
swDuino 2

Aplikácia swDuino funguje ako webový server na stolnom PC so systémom Windows, cez ktorý môžeme interaktívne monitorovať a ovládať pripojené Arduino cez sériovú linku (Serial to Web). K dispozícii je i...

Čítať viac...

Dallas DS18B20 – meranie teploty
Dallas DS18B20 – meranie teploty

Ďalší vynikajúci senzor na meranie teploty je Dallas DS18B20. V článku popisujem jeho parametre, dva spôsoby napájania, vnútornú pamäť (registre) a samozrejme zapojenie s Arduinom, jednoduchý program a nejaké fotky. Teplotný senzor (alebo tiež čidlo) DS18B20 od firmy Maxim (predtým Dallas) je v Arduino komunite veľmi obľúbené. Za veľmi dobrú cenu umožňuje...

Čítať viac...

ako na ošetrenie spínacích kontaktov - debouncing
Ako na ošetrenie spínacích kontaktov – debouncing

Všeobecne najčastejším spôsobom ovládania aplikácií Arduinom s okolitým svetom sú tlačítka, klávesnice (membránové, kapacitné alebo s mikrospínačmi), rotačné enkódery (rotation encoders, inkrementálne otočné ovládače) a rad ďalších spínačov, pracujúcich na...

Čítať viac...

Obľúbené produkty...

Keyestudio Nano IO Shield

9.26 EUR

9.26 EUR

Keyestudio Mini Tank Robot V2

90.48 EUR

90.48 EUR

Vyhľadať články
Programovanie...
  • Relačné operátory

    Relačné operátory sú < > = == !=. Sú definované pre operandy všetkých základných dátových typov. ...

  • Funkcie času

    Štandardne majú dosky Arduino štyri funkcie času. Jedná sa o funkcie delay (), delayMicroseconds ...

  • Adresové operátory

    Adresové operátory označované aj ako ukazovatele (anglicky pointer, česky ukazovateľ, slovensky s...

  • Špeciálne operátory

    Spomenieme ešte špeciálne operátory alebo špeciálne znaky, ktoré sa používajú pri programovaní a ...

  • Konverzie

    Možno ste sa už pri programovaní dostali do situácie, kedy si program robil s číslami a dátovými ...

Podpora webu
Na kávu už prispeli
Dátum Meno Suma
08.01.2024 Veres Dusan 10€
15.05.2023 Ivan Danis 10€
28.09.2022 Ivan Vrab 7€
14.05.2022 Nemcic Marian 10€
04.02.2022 Robert Bilko 5€
29.01.2022 Peter Buffa 5€
19.11.2021 Rastislav Rehak 5€
16.09.2021 Anton Strela 5€
13.09.2021 Juraj Jedlak 5€
02.09.2021 Michal Marek 7€
08.08.2021 František Uhrík 5€
21.07.2021 Juraj Hrdina 5€
25.03.2021 Jan Nemec 10€
16.03.2021 Igor Pavlov 5€
25.02.2021 Lukas Lacuch 5€
06.11.2020 Pavol Balint 5€
05.11.2020 Marek Horečný 5€
05.10.2020 Jan Kusnir 5€
27.04.2020 Jan Zuskin 15€
26.04.2020 Dušan Sojka 5€
24.02.2020 Juraj Lackanič 5€
22.01.2020 František Žilinec 10€
20.05.2018 Tomáš F. 2€
17.12.2018 Pavol P. 5€
QR Donate 10Eur