09.D Arduino – úplné základy: Blikanie diódy – START / STOP tlačidlom (stavový program)

09.D Arduino – úplné základy: Blikanie diódy – START / STOP tlačidlom (stavový program)

Cieľom tejto lekcie je:

  • naučiť sa ovládať blikanie diódy tlačidlom,
  • pochopiť pojem stav programu,
  • vytvoriť START / STOP multivibrátor,
  • naučiť sa rozlíšiť stlačenie a držanie tlačidla.

Čo znamená „stavový program“

Stavový program:

  • pamätá si, v akom stave sa nachádza,
  • nereaguje len na okamžitú hodnotu vstupu,
  • ale na zmenu stavu (napr. stlačenie tlačidla).

V našom prípade budeme mať dva stavy:

  • STOP – dióda nebliká,
  • START – dióda bliká.

Použité súčiastky a porty

  • dióda (LED) + rezistor 220–330 Ω
  • tlačidlo
  • Arduino Uno / Mega

Použité porty:

  • D12 – dióda (výstup)
  • D2 – tlačidlo (vstup, INPUT_PULLUP)

Zapojenie (reálne Arduino)

Zapojenie:

  • D12 → rezistor → anóda LED
  • katóda LED → GND
  • tlačidlo: jedna noha → GND, druhá → D2

Myšlienka riešenia (veľmi dôležité)

  • tlačidlo nebliká,
  • tlačidlo iba zapína alebo vypína blikanie,
  • blikanie riadi premenná (stav).

Použijeme premennú:





bool blinking = false;
  • false → STOP (nebliká)
  • true → START (bliká)

Program: START / STOP blikanie diódy





bool blinking = false;        // stav blikania
bool lastButton = HIGH;       // predchádzajúci stav tlačidla

void setup() {
  pinMode(12, OUTPUT);        // dióda
  pinMode(2, INPUT_PULLUP);   // tlačidlo
}

void loop() {
  bool button = digitalRead(2);

  // detekcia stlačenia tlačidla
  if (lastButton == HIGH && button == LOW) {
    blinking = !blinking;     // prepnutie START / STOP
    delay(200);               // jednoduchý debounce
  }

  lastButton = button;

  if (blinking) {
    digitalWrite(12, HIGH);
    delay(500);
    digitalWrite(12, LOW);
    delay(500);
  } else {
    digitalWrite(12, LOW);    // STOP = dióda zhasnutá
  }
}

Čo máš vidieť

  • po prvom stlačení tlačidla sa dióda rozbliká,
  • po druhom stlačení sa blikanie zastaví,
  • tlačidlo sa môže pustiť – stav zostane zachovaný.

➡️ Toto je skutočný stavový program.


Vysvetlenie kľúčových častí

Premenná blinking

  • pamätá si stav programu,
  • je nezávislá od tlačidla.

lastButton

  • slúži na zistenie zmeny stavu,
  • zabraňuje tomu, aby program reagoval na držanie tlačidla.

blinking = !blinking;

  • prepne:
    • false → true
    • true → false

Tinkercad – rovnaké riešenie

V Tinkercade:

  • použi Arduino Uno,
  • zapoj LED a tlačidlo rovnako ako v reále,
  • vlož ten istý program,
  • spusti Start Simulation.

Správanie musí byť identické.


Najčastejšie chyby študentov

  • chýbajúca premenná lastButton,
  • použitie INPUT namiesto INPUT_PULLUP,
  • očakávanie, že tlačidlo musí byť držané,
  • zabudnutý rezistor pri dióde.

Úlohy pre študentov

Úloha 1 (ľahká)

Zmeň rýchlosť blikania na 200 ms.

Úloha 2 (stredná)

Použi iný port pre diódu (napr. 11).

Úloha 3 (výzva)

Pridaj druhú diódu:

  • jedna svieti pri START,
  • druhá pri STOP.

Poznámka

Toto je zlomová lekcia:

  • študenti prestávajú myslieť „riadok po riadku“,
  • začínajú chápať logiku programu,
  • vytvára sa základ pre automaty, regulátory a maturitné úlohy.

Odporúčanie:

  • nechať študentov najprv program len pozorovať,
  • až potom kresliť stavový diagram (START / STOP).

Čo bude nasledovať

V ďalšej lekcii:

  • odstránime delay() a použijeme millis(),
  • vytvoríme profesionálny multivibrátor,
  • pripravíme riešenie priamo na maturitnú úroveň.

Odkazy na nadväzujúce lekcie: 09, 09.A, 09.B, 09.C, 09.D .