Lekce 3
Z osmi LED postavíte světelný had, který přebíhá zleva doprava a zpět – jako tekoucí voda. Naučíte se ovládat víc LED najednou pomocí cyklu for, místo abyste každý pin psali ručně.
Popisek obrázku: osm LED vedle sebe v řadě. Delší nožka každé LED jde přes vlastní rezistor 220 Ω na piny 2 až 9 (postupně), kratší nožky všech LED jsou společně připojené na GND.
| LED (přes rezistor 220 Ω) | Arduino |
|---|---|
| LED 1 | pin 2 |
| LED 2 | pin 3 |
| LED 3 | pin 4 |
| LED 4 | pin 5 |
| LED 5 | pin 6 |
| LED 6 | pin 7 |
| LED 7 | pin 8 |
| LED 8 | pin 9 |
| kratší nožky všech LED | GND |
Princip je jednoduchý: rozsvěcujeme osm LED za sebou, jednu po druhé, s malou prodlevou mezi nimi. Když to běží dostatečně rychle, oko vidí plynulý pohyb světla – jako vlnu nebo tekoucí vodu. Aby se kód zbytečně neopakoval osmkrát, použijeme cyklus for, který projde piny 2 až 9 a u každého řekne „rozsviť, počkej, zhasni“.
Dobré vědět: cyklus for je v programování základní nástroj – nechá vás udělat stejnou věc mnohokrát za sebou jediným kouskem kódu. Místo osmi řádků digitalWrite tak napíšete jen jeden a necháte ho proběhnout pro všechny piny.
// LED Tekoucí potok
// Osm LED v řadě se postupně rozsvěcuje a zhasíná jako tekoucí voda
// Email: podpora@laskakit.cz · Web: laskakit.cz
const int lowestPin = 2; // pin první LEDky
const int highestPin = 9; // pin poslední LEDky
void setup() {
// nastavení pinů 2 až 9 jako výstupů
for (int thisPin = lowestPin; thisPin <= highestPin; thisPin++) {
pinMode(thisPin, OUTPUT);
}
}
void loop() {
// rozsvítit LEDky od první do poslední
for (int thisPin = lowestPin; thisPin <= highestPin; thisPin++) {
digitalWrite(thisPin, HIGH); // zapnout LEDku
delay(100); // počkat 100 ms
}
// zhasnout LEDky od poslední do první
for (int thisPin = highestPin; thisPin >= lowestPin; thisPin--) {
digitalWrite(thisPin, LOW); // vypnout LEDku
delay(100);
}
// a zpět – rozsvítit od poslední do první
for (int thisPin = highestPin; thisPin >= lowestPin; thisPin--) {
digitalWrite(thisPin, HIGH);
delay(100);
}
// zhasnout od první do poslední
for (int thisPin = lowestPin; thisPin <= highestPin; thisPin++) {
digitalWrite(thisPin, LOW);
delay(100);
}
}
QČím v této lekci docílíme toho, abychom neopakovali stejný příkaz osmkrát pro každou LED?