PRA

Multitasking (neblokující kód) s Arduinem

Cíl lekce

Problém s 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á.

Úkol 1

Připojte k Arduinu 2 LEDky a tlačítko. Vytvořte program:

Otázky

Jak to řešit jinak?

Místo čekání použijeme jiný přístup:

Nebudeme čekat, ale budeme se ptát: „Už uběhl potřebný čas?“

Funkce 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.

Úkol 2

Vypisujte hodnotu millis() na sériový monitor:

unsigned long cas = millis();
Serial.println(cas);

Sledujte

Úkol 3

Rozsviťte LED po 2 sekundách od startu programu.

Použití funkce millis() pro časování

Porovnáváme rozdíl časů, ne konkrétní hodnotu.

if (currentMillis - previousMillis > interval)

Úkol 4

Vytvořte program:

Zdroj obrázku: https://www.programmingelectronics.com/arduino-sketch-with-millis-instead-of-delay/

Úkol 5

Vytvořte program:

Nápověda

Každá úloha potřebuje:

Příklad struktury

// LED1
if (...) {
  ...
}

// LED2
if (...) {
  ...
}

// tlačítko
if (...) {
  ...
}

Shrnutí

Arduino neumí skutečný multitasking, ale můžeme ho napodobit.

Další užitečné články a videa

Video k funkci millis()

Zpět na obsah