Lekce 9
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.
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.
| Komponenta | Arduino |
|---|---|
| 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 |
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.
// 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
}
}
#define sedí se zapojením. LED patří na piny 6, 7, 8 a 10, tlačítka na 2, 3, 4 a 9.INPUT_PULLUP by navíc vstup „plaval“ a hodnota by byla nepředvídatelná.QK čemu slouží v tomto obvodu tlačítko 4?