Lekce 9

Kvízový bzučák

Devátá lekce Arduino kurzu pro začátečníky: postavíte si vlastní kvízový (soutěžní) bzučák se čtyřmi tlačítky, čtyřmi LED a bzučákem. Ukážeme si zapojení, režim vstupu INPUT_PULLUP i kód do Arduino IDE – kdo zmáčkne tlačítko první, tomu se rozsvítí LED a bzučák pípne. Přesně jako ve vědomostních soutěžích.

🧩Co budeš potřebovat
Arduino USB kabel Breadboard 4× tlačítko 4× LED 4× rezistor 220 Ω Aktivní bzučák Propojovací vodiče
🔌Zapojení
Schéma zapojení Arduino – kvízový bzučák, 4 tlačítka, 4 LED a bzučák na breadboardu

Popisek obrázku: tři soutěžní tlačítka (1, 2, 3) na pinech 2, 3 a 4, resetovací tlačítko (4) na pinu 9. Čtyři LED přes rezistory 220 Ω na pinech 6, 7, 8 a 10, bzučák na pinu 5. Druhé nožičky tlačítek a katody LED vedou na GND.

🔗Připojení pinů
KomponentaArduino
Tlačítko 1 (odpověď)pin 2
Tlačítko 2 (odpověď)pin 3
Tlačítko 3 (odpověď)pin 4
Tlačítko 4 (reset)pin 9
Bzučák (+)pin 5
LED 1 (přes 220 Ω)pin 6
LED 2 (přes 220 Ω)pin 7
LED 3 (přes 220 Ω)pin 8
LED 4 (přes 220 Ω)pin 10
Tlačítka (2. nožičky), katody LED, bzučák (−)GND
💡Jak to funguje

Tlačítka 1, 2 a 3 slouží k odpovídání, tlačítko 4 celý systém resetuje. Kdo z hráčů stiskne své tlačítko jako první, tomu se rozsvítí příslušná LED, bzučák krátce pípne a ostatní LED zhasnou – další stisky už se ignorují. Tlačítka jsou v režimu INPUT_PULLUP, takže jsou v klidu ve stavu „vysoko“ a stisk je stáhne dolů. Pro další kolo stačí zmáčknout resetovací tlačítko 4 a soutěž může pokračovat.

Postup
  1. Sestavte obvod podle schématu a tabulky výše – tři tlačítka na piny 2, 3, 4, reset na pin 9, LED na piny 6, 7, 8, 10 a bzučák na pin 5.
  2. Zkopírujte kód do Arduino IDE, zkompilujte ho a nahrajte do Arduina.
  3. Nejdřív zmáčkněte tlačítko 4 (start). Pak ať soutěžící zkusí tlačítka 1–3 – první stisk vyhrává. Dalším stiskem tlačítka 4 spustíte nové kolo.
</>Kód
lekce09_kvizovy_bzucak.ino
// Kvízový bzučák
// Nejprve zmáčkněte tlačítko 4 pro nastartování.
// Když nejdřív stisknete tlačítko 1, rozsvítí se odpovídající LED a bzučák zabzučí.
// Poté zmáčkněte znovu tlačítko 4 pro restart (dříve, než zmáčknete jiné tlačítko).
// Email: podpora@laskakit.cz · Web: laskakit.cz

#define button1 2          // pin 1. tlačítka
#define button2 3          // pin 2. tlačítka
#define button3 4          // pin 3. tlačítka
#define button4 9          // pin 4. tlačítka (reset)
#define buzzerPin 5        // pin bzučáku
#define LED1 6             // pin 1. LEDky
#define LED2 7             // pin 2. LEDky
#define LED3 8             // pin 3. LEDky
#define LED4 10            // pin 4. LEDky
#define uint8 unsigned char

uint8 flag = 0;                // indikace stavu tlačítka 4
uint8 b1State, b2State, b3State, b4State = 0;

void setup() {
  // nastavení pinů LED a bzučáku jako výstupů
  pinMode(buzzerPin, OUTPUT);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  // nastavení pinů tlačítek jako vstupů s pullup odporem
  pinMode(button1, INPUT_PULLUP);
  pinMode(button2, INPUT_PULLUP);
  pinMode(button3, INPUT_PULLUP);
  pinMode(button4, INPUT_PULLUP);
  // vypnout všechny LEDky
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, LOW);
  digitalWrite(LED4, LOW);
}

void loop() {
  // vypnout všechny LEDky
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, LOW);
  digitalWrite(LED3, LOW);
  digitalWrite(LED4, LOW);
  // přečíst stav pinu tlačítka 4
  b4State = digitalRead(button4);
  // pokud je tlačítko 4 stisknuté
  if (b4State == 0) {
    flag = 1;                    // nastavit flag na 1
    digitalWrite(LED4, HIGH);     // zapnout 4. LEDku
    delay(200);
  }
  if (1 == flag) {
    // přečíst stav pinů tlačítek 1 až 3
    b1State = digitalRead(button1);
    b2State = digitalRead(button2);
    b3State = digitalRead(button3);
    // pokud bylo tlačítko 1 stisknuto jako první
    if (b1State == 0) {
      flag = 0;
      digitalWrite(LED4, LOW);
      Alarm();                    // zvuk bzučáku
      digitalWrite(LED1, HIGH);   // zapnout jen 1. LEDku
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, LOW);
      // čekání na stisknutí tlačítka 4
      while (digitalRead(button4));
    }
    // pokud bylo tlačítko 2 stisknuto jako první
    if (b2State == 0) {
      flag = 0;
      digitalWrite(LED4, LOW);
      Alarm();
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, HIGH);
      digitalWrite(LED3, LOW);
      while (digitalRead(button4));
    }
    // pokud bylo tlačítko 3 stisknuto jako první
    if (b3State == 0) {
      flag = 0;
      digitalWrite(LED4, LOW);
      Alarm();
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, HIGH);
      while (digitalRead(button4));
    }
  }
}

// zvuk bzučáku
void Alarm() {
  for (int i = 0; i < 300; i++) {
    digitalWrite(buzzerPin, HIGH);   // zapnout bzučák
    delay(1);                        // pauza nastaví frekvenci
    digitalWrite(buzzerPin, LOW);    // vypnout bzučák
    delay(1);                        // pauza nastaví frekvenci
  }
}
Výsledek
💡
Po nahrání nejprve zmáčkněte tlačítko 4 pro nastartování (rozsvítí se 4. LED). Jakmile pak někdo stiskne tlačítko 1, 2 nebo 3 jako první, rozsvítí se jeho LED a bzučák pípne – ostatní už nic nezmůžou. Pro další kolo zase zmáčknete tlačítko 4. Máte hotový spravedlivý soutěžní bzučák!
Časté chyby
?Kontrolní otázka

QK čemu slouží v tomto obvodu tlačítko 4?