Tlačítko

V dnešní hodině si ukážeme, jak pracovat s tlačítky. V našem edushield je tlačítko na pinu číslo 2. Více info ohledně pinů v edushield: https://github.com/arduino-edushield/edushield/blob/master/extras/learning/course/cz/cheatsheet.md

Následující kód nám zařídí, že se bude do konzole vypisovat číslo 0, pokud je tlačítko stisknuto. Pokud není, bude se nám vypisovat číslo 1.

// nastaví, že na pinu číslo 2 máme tlačítko. Díky tomuto můžeme pak rovnou použít button místo čísla pinu
#define button 2

void setup() {
    // spustí konzoli s datovým přenosem o rychlosti 9600 baudů za sekundu
    Serial.begin(9600);
    // nastaví pin tlačítka jako vstupní
    pinMode(button,INPUT_PULLUP);
}

void loop() {
    // vytvoří proměnnou typu int (číslo), do které budeme ukládat stav tlačítka. 1 = tlačítko není stisknuto, 0 = tlačítko je stisknuto
    int b = digitalRead(button);
    // vypíše obsah proměnné b do seriové konzole
    Serial.println(b);
}

Vzhledem k tomu, že víme, že 0 znamená že tlačítko bylo stisknuto a 1 znamená že tlačítko bylo puštěno, můžeme si pomocí podmínky výstup trochu zpřehlednit.

// nastaví, že na pinu číslo 2 máme tlačítko. Díky tomuto můžeme pak rovnou použít button místo čísla pinu
#define button 2

void setup() {
    // spustí konzoli s datovým přenosem o rychlosti 9600 baudů za sekundu
    Serial.begin(9600);
    // nastaví pin tlačítka jako vstupní
    pinMode(button, INPUT_PULLUP);
}

void loop() {
    // vytvoří proměnnou typu int (číslo), do které budeme ukládat stav tlačítka. 1 = tlačítko není stisknuto, 0 = tlačítko je stisknuto
    int b = digitalRead(button);

    // Pokud je tlačítko stisknuto, vypíše text v uvozovnách do konzole
    if (b == 0) {
        Serial.println("Tlačítko bylo stisknuto");
    }
    // Pokud tlačítko není stisknuto, vypíše text v uvozovnách do konzole
    else if (b == 1) {
        Serial.println("Tlačítko bylo puštěno");
    }
}

Můžeme si rovnou vytvořit pro uživatele trochu přívětivější kód, kdy se nám do konzole vypíše pouze změna stavu:

// nastaví, že na pinu číslo 2 máme tlačítko. Díky tomuto můžeme pak rovnou použít button místo čísla pinu
#define button 2
// vytvoří proměnnou lastState a uloží si do ní číslo 1. Tuto proměnnou budeme později využívat k tomu, aby se nám do konzole vypsala pouze změna stavu tlačítka
int lastState = 1;

void setup() {
    // spustí konzoli s datovým přenosem o rychlosti 9600 baudů za sekundu
    Serial.begin(9600);
    // nastaví pin tlačítka jako vstupní
    pinMode(button,INPUT_PULLUP);
}

void loop() {
    // vytvoří proměnnou typu int (číslo), do které budeme ukládat stav tlačítka. 1 = tlačítko není stisknuto, 0 = tlačítko je stisknuto
    int b = digitalRead(button);

    // Pokud se lastState NErovná b
    if (lastState != b){
        // Pokud je tlačítko stisknuto, vypíše text v uvozovnách do konzole
        if (b == 0) {
            Serial.println("Tlačítko bylo stisknuto");
        }
        // Pokud tlačítko není stisknuto, vypíše text v uvozovnách do konzole
        else if (b == 1) {
            Serial.println("Tlačítko bylo puštěno");
        }

        // uloží do proměnné lastState poslední stav. Díky tomuto v kombinaci s if výše se vypíše pouze změna, místo toho aby se vypisoval stav neustále
        lastState = b;
    }
}

Zadání

Vzpomeňte si na předchozí lekci a vytvořte program, který rozsvítí diodu, pokud je tlačítko stisknuto. Pokud bude tlačítko puštěno, dioda zhasne. Led diodu máte připojenou na pinu číslo 13.

Doporučuji pro led diodu nastavit následující kód v části setup: pinMode(led,OUTPUT);, čímž Arduinu řeknete, že tam je led dioda a bude tam posílat vyšší proud -> led dioda bude svítit více.

Nezapomeňte odevzdat váš kód na Google učebnu:
https://classroom.google.com/c/ODA4MjE5ODMxODM0/a/ODQ3MDU2NzM4MDk1/details

Příliš snadné?

Na arduinu máme také další led diody na pinech 16 a 17. Udělejte kód, kdy se při stisknutí tlačítka rozsvítí jedna z těchto diod a po opětovném stisknutí ta co nyní svítí zhasne a rozsvítí se jiná.