V minulé lekci jsem nakousl práci s podmínkovými příkazy za pomocí logických podmínkových operátorů. Nyní si o tomto tématu popovídáme podrobněji a také si ho vyzkoušíme. Nejlépe si bude vše předvést na příkladu. Zapojte si následující obvod a pak si vyzkoušíme různé programy s různými verzemi logických operátorů.
Operátor logického součinu – Konjunkce
Tato složená podmínka funguje tak, že se LED dioda rozsvítí pouze jsou-li stisknuty obě tlačítka. Nainstalujte si do desky následující kód a vše vyzkoušejte.
/* Program pro obsluhu stisku dvou tlačítek */ //Nastavení desky – inicializace pinů void setup() { pinMode(2, OUTPUT); pinMode(7,INPUT_PULLUP); pinMode(8,INPUT_PULLUP); } //Provedení programu – spuštění v nekonečné smyčce void loop() { int tlacitko1 = digitalRead(7); int tlacitko2 = digitalRead(8); //konjunkce if ((tlacitko1==0)&&(tlacitko2==0)) { digitalWrite(2,1); delay(20); } else { digitalWrite(2,0); delay(20); } } |
Varianta programu | Tlačítko 1 | Tlačítko 2 | LED |
1 | 1 / neaktivní tlačítko | 1 / neaktivní tlačítko | 0 |
2 | 1 / neaktivní tlačítko | 0 / stisknuté tlačítko | 0 |
3 | 0 / stisknuté tlačítko | 1 / neaktivní tlačítko | 0 |
4 | 0 / stisknuté tlačítko | 0 / stisknuté tlačítko | 1 |
K čemu bychom tuto složenou podmínku mohli použít? Použití se samozřejmě neomezuje pouze na LED světla. Složené podmínkové příkazy s logickým operátorem konjunkce bychom mohli použít například tam, kde je třeba dvoustupňové jištění. Třeba dveře, které je možné otevřít pouze stiskem tlačítka ze dvou různých míst. Popřípadě ovládání funkcí konstrukce pouze je-li jiná část konstrukce v určité poloze – pro příklad posun ramena jeřábu možný pouze pokud je jeřáb v určité pozici (arduinu by splnění této podmínky automaticky nahlásily koncové spínače)
Operátor logického součtu – Disjunkce
Tato složená podmínka funguje pouze tehdy, když je stisknuté některé ze dvou tlačítek. Opět si do toho samého zapojení nainstalujte následující kód a vyzkoušejte si reakce zapojení nyní.
/* Program pro obsluhu stisku dvou tlačítek */ //Nastavení desky – inicializace pinů void setup() { pinMode(2, OUTPUT); pinMode(7,INPUT_PULLUP); pinMode(8,INPUT_PULLUP); } //Provedení programu – spuštění v nekonečné smyčce void loop() { int tlacitko1 = digitalRead(7); int tlacitko2 = digitalRead(8); //disjunkce if ((tlacitko1==0)||(tlacitko2==0)) { digitalWrite(2,1); delay(20); } else { digitalWrite(2,0); delay(20); } } |
Varianta programu | Tlačítko 1 | Tlačítko 2 | LED |
1 | 1 / neaktivní tlačítko | 1 / neaktivní tlačítko | 0 |
2 | 1 / neaktivní tlačítko | 0 / stisknuté tlačítko | 1 |
3 | 0 / stisknuté tlačítko | 1 / neaktivní tlačítko | 1 |
4 | 0 / stisknuté tlačítko | 0 / stisknuté tlačítko | 1 |
A k čemu je vhodná tato kombinace složených podmínek? Třeba pro zapnutí světla v objektu z různých míst.
Operátor logické negace
Tento operátor je asi nejjednodušší. Při použití tohoto operátoru je LED aktivní pouze pokud není stisknuto tlačítko. Tato funkce se dá použít pro vypínání činnosti programu, nebo třeba jako bezpečnostní stop tlačítko.
/* Program pro obsluhu stisku dvou tlačítek */ //Nastavení desky – inicializace pinů void setup() { pinMode(2, OUTPUT); pinMode(7,INPUT_PULLUP); pinMode(8,INPUT_PULLUP); } //Provedení programu – spuštění v nekonečné smyčce void loop() { int tlacitko1 = digitalRead(7); //negace if (!tlacitko1) { digitalWrite(2,1); delay(20); } else { digitalWrite(2,0); delay(20); } } |
Varianta programu | Tlačítko 1 | LED |
1 | 0 / stisknuté tlačítko | 0 |
2 | 1 / neaktivní tlačítko | 1 |
Úkoly:
1, Navrhněte konstrukci s RGB diodou, které bude ovládána třemi tlačítky. Pro ovládání stisku několika tlačítek najednou využijte operátoru logického součtu (konjunkce).
2, Nakreslete si půdorys nějakého objektu a umístěte na něj světla – LED diody. Vymyslete režim rozsvěcení skupin světel – okruhů tak, aby bylo možné rozsvítit jak menší skupinky světel (například chodby), tak celý objekt (všechny světla najednou). Ovládání vytvořte ze dvou míst. V programu využijte v konstrukci podmínkových příkazů i logických operátorů.
Prohozené funkce And a Or. Součin není součet. Stane se.
Nějak jsem to nenašel, kde je ta chybka?
Je mi to skoro líto, ale součin je násobení a součet sčítání. První je součin 0001 a ne součet 0111. Opravdu je to prohozené.
Jo koukám, že jsem to opravdu prohodil :-). Díky za upozornění, ale trvalo mi to. 😀