delay() způsobuje problémymillis()delay()Doteď jsme pro časování používali funkci delay():
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(2000);
Funguje to, ale má to zásadní nevýhodu: Během delay() procesor nic jiného nedělá.
Připojte k Arduinu 2 LEDky a tlačítko. Vytvořte program:
Místo čekání použijeme jiný přístup:
Nebudeme čekat, ale budeme se ptát: „Už uběhl potřebný čas?“
millis()Funkce millis() vrací počet milisekund od startu programu.
Představte si, že máte stopky, které běží nepřetržitě od chvíle, kdy jste Arudino zapnuli. Funkcí millis() se jednoduše zeptáme: ‘Kolik milisekund na těch stopkách právě je?’ — a okamžitě dostaneme odpověď. Nic to nepozastaví, nic neblokuje.
Vypisujte hodnotu millis() na sériový monitor:
unsigned long cas = millis();
Serial.println(cas);
Rozsviťte LED po 2 sekundách od startu programu.
millis() pro časováníPorovnáváme rozdíl časů, ne konkrétní hodnotu.
if (currentMillis - previousMillis > interval)
Vytvořte program:
delay()ale millis()
Zdroj obrázku: https://www.programmingelectronics.com/arduino-sketch-with-millis-instead-of-delay/
Vytvořte program:
Každá úloha potřebuje:
// LED1
if (...) {
...
}
// LED2
if (...) {
...
}
// tlačítko
if (...) {
...
}
delay() blokuje programmillis() umožňuje neblokující časováníklíč je porovnání rozdílu časů
currentMillis - previousMillis
Arduino neumí skutečný multitasking, ale můžeme ho napodobit.