Funkcie času

Štandardne majú dosky Arduino štyri funkcie času. Jedná sa o funkcie delay(), delayMicroseconds(), milis() a micros(). Prvé dve a druhé dve pracujú na rovnakom princípe, pracujú len s inými jednotkami. Sú to milisekundy a mikrosekundy. Je dôležité pamätať na prenosový vzťah medzi časovými jednotkami, keď: 1 sekunda = 1.000 milisekúnd = 1.000.000 mikrosekúnd.

delay()

Táto funkcia má jeden parameter a to je čas čakania v milisekundách. Rozsah parametra je od 0 do 4.294.967.295 (unsigned long).

Veľkou nevýhodou funkcie delay() a aj nasledujúcej funkcie času delayMicroseconds() je fakt, že dôjde k zastaveniu takmer celej činnosti programu (pozastavenie čítania hodnôt zo senzorov, matematické operácie, nemožnosť ovládať logické hodnoty na pinoch atď.). Avšak nedôjde k zastaveniu tých funkcií, ktoré nie sú priamo závislé na programe procesoru. Jedná sa najmä o prerušenia, príjem informácií z Rx linky (kedy sa prijatými bytmi napĺňa buffer a na spracovanie dôjde až po skončení funkcie delay) a tiež o funkciu analogWrite() (generovanie signálu PWM brebieha mimo hlavný procesorový blok).

int ledPin = 13;                // LED pripojená na pin 13

void setup()
{
  pinMode(ledPin, OUTPUT);      // nastavenie pinu ako výstup
}

void loop()
{
  digitalWrite(ledPin, HIGH);   // zapnutie LED
  delay(1000);                  // čakanie 1000ms (jenda sekunda)
  digitalWrite(ledPin, LOW);    // vypnutie LED
  delay(1000);                  // čakanie 1000ms (jedna sekunda)
}

delayMicroseconds()

Táto funkcia je podobná ako delay()s tým rozdielom, že parameter je čas v mikrosekundách. Rozsah parametrov sa pohybuje od 0 do 65.535 (unsigned int).

Táto funkcia času pracuje veľmi presne v rozmedzí od 3 mikrosekúnd a viac. Pri oneskoreniach dlhších ako niekoľko tisíc mikrosekúnd by ste mali použiť delay().


millis()

Použitím funkcie millis() je možné určiť hodnotu uloženú v internom časovači procesora. Tam sú uložené informácie o dĺžke behu programu od jeho spustenia. Táto funkcia nepotrebuje žiadny parameter, ale vráti počet milisekúnd od začiatku behu programu. Toto číslo však nie je nekonečné. Maximálna návratová hodnota je 4.294.967.295 (unsigned long). Po prekročení dôjde k tzv. pretečeniu časovača a začne sa odpočítavanie od začiatku. Funkcia millis() sa používa napríklad, ak potrebujete čakať, ale nie je žiadúce prerušiť chod programu – blikanie LED bez delay().

/* Blikanie LED bez Delay (Blink without Delay)
 Vypína a zapína LED pripojenú k digitálnemu pinu
 a to bez použitia funkcie delay(). 
 Vo výsledku to znamená, že program môže vykonávať aj iné výpočty 
 bez toho, aby bol prerušený čakaním medzi bliknutiami LED.

 Obvod:
 * LED je pripojená medzi pinom 13 a zemou.
 * Poznámka: na väčšine Arduin je k pinu 13 LED už pripojená,
 v takom prípade nieje potrebný žiadny ďalší hardware.

 vytvorené 2005 autorom: David A. Mellis
 upravené 8. Feb. 2010 Paul Stoffregen 
 preložil 11.9.2017 Šášik Rastislav www.arduinoposlovensky.sk

 http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/

// konštanty sa v programe nemenia, takže ich použijeme k nastaveniu čísiel pinov:
const int ledPin = 13;   // číslo pinu pre LED
// premenné sa v programe menia:
int ledState = LOW;      // ledState sa používa k nastavovaniu stavu LED

// nasledujúce premenné sú typu „unsigned long“, pretože čas je meraný v milisekundách,
// a hodnoty sa nám rýchlo menia na vysoké čísla, takže by nám typ "int" nestačil 
unsigned long previousMillis = 0; // bude ukladať poslední čas, kedy bola LED aktualizovaná
unsigned long interval = 1000;    // časový interval v milisekundách, v akom nám bude LED blikať

void setup() {
  // nastavenie pinu ako výstup:
  pinMode(ledPin, OUTPUT);
}
void loop(){
  // Sem vložíte kód, ktorý sa bude neustále opakovať.

  // Teraz si skontrolujeme, či je správny čas na bliknutie LED, t.j. či
  // je rozdiel medzi aktuálnym časom a časom posledného bliknutia LED
  // dlhší ako je interval, v ktorom chceme, aby LED blikala.
  unsigned long currentMillis = millis();

  if(currentMillis - previousMillis > interval) {
    // uložíme si čas, kedy sme naposledy blikli s LED
    previousMillis = currentMillis;

    // ak je LED vypnutá, zapneme ju a naopak:
    if (ledState == LOW)
       ledState = HIGH;
    else
       ledState = LOW;

    // nastavíme LED podľa premennej ledState:
    digitalWrite(ledPin, ledState);
  }
}

K pretečeniu časovača dôjde približne raz za 50 dní (4.294.967.295ms = 4.294.967s = 71.582min = 1193h = 49,7 dní).


micros()

Funkcia micros() je rovnaká ako Millis(), len vracia hodnotu v mikrosekundách. Rozsah hodnôt je rovnaký (unsigned long), ale keďže platí, že 1 milisekunda = 1000 mikrosekúnd, doba pretečenia bude tisíckrát menšia, teda asi 71,5 minúty. Nutné dodať, že rozlíšenie funkcie je u 16MHz procesorov 4 mikrosekundy a u 8MHz je to 8 mikrosekúnd. Výstupom funkcie teda bude násobok štyroch alebo ôsmich.

unsigned long time;

void setup(){
  Serial.begin(9600);
}
void loop(){
  Serial.print("Time: ");
  time = micros();
  //vypíše čas od spustenia programu
  Serial.println(time);
  // počká jednu sekundu, aby sme neposielali mnoho dát
  delay(1000);
}

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

Výber na čítanie...

Programino IDE – návod na inštaláciu
Programino IDE – návod na inštaláciu

PROGRAMINO IDE je alternatívne pohodlné a ľahko použiteľné vývojové prostredie pre Arduino a kompatibilné dosky. Rôzne dostupné nástroje uľahčujú rýchlu realizáciu projektu. Obsahuje dva UART terminály, náhľad hardvéru, prispôsobiteľné zvýraznenie syntaxe, možnosť vyhľadávania...

Čítať viac...

Arduino Ethernet
Arduino Ethernet

Arduino Ethernet je mikroprocesorová doska založená na čipe ATmega328 ako Arduino Uno, ale má integrovaný RJ45 Ethernet kontrolér W5100 TCP / IP. Podporuje voliteľný modul POE...

Čí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...

Obľúbené produkty...

TTP229L 16-key Touch Sensor

7.99 EUR

7.99 EUR

Keyestudio ESP32 Learning Kit

52.99 EUR

52.99 EUR

Vyhľadať články
Programovanie...
  • Goniometrické funkcie

    Goniometrické funkcie v matematike označuje termín používaný pre jednu zo šiestich funkcií veľkos...

  • Pomocné premenné

    Ako pomocné premenné môžeme využiť funkcie sizeof() a PROGMEM. Ich popis rozoberiem v tomto článku...

  • Funkcie času

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

  • Relačné operátory

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

  • Špeciálne operátory

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

Podpora webu
Na kávu už prispeli
Dátum Meno Suma
22.03.2025 Radoslav Kopera 5€
30.12.2024 Jozef Greš 5€
20.10.2024 Radovan Nosáľ 20€
02.10.2024 Milan Durkoš 10€
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