1. Vývojové prostředí 2. Dálkové ovládání 3. Nový projekt 4. První program 5. Formátování kódu 6. Komentáře 7. Proměnná 8. Větvení 9. Cyklus 10. Funkce 11. LEDky 12. LED pásek 13. Sériová linka 14. Koncová tlačítka 15. Práce s tlačítky Použitelné funkce 16. Ultrazvuk 17. IR senzor 18. Motory 19. Monitorování robotky 20. Serva (hloupá) 21. Úpravy dálkového ovládání Dokumentace Příklady

Práce s tlačítky

Použitelné funkce

Tento program ukazuje základní práci s vestavěnými tlačitky: UP, DOWN, LEFT, RIGHT, ON a OFF. Tato tlačítka je v programu nezbytné označovat předponou BTN_, tedy tlačítko BTN_UP reprezentuje tlačítko UP na desce, tlačítko BTN_LEFT potom LEFT, a tak dále. Oproti koncovým tlačitkům, které jsou popsány v předchozí kapitole máme větší možnosti, jak s tlačítkem pracovat (detekovat více stavů):

Funkce pro všechna tlačítka
  • rkButtonIsPressed - Detekuje, zda je tlačítko stisknuto. Vrací logickou hodnotu pravda true, pokud je tlačítko stisknuté, jinak vrací nepravda false. Jako parametr očekává jedno z tlačítek (BTN_UP, BTN_DOWN, BTN_LEFT, BTN_RIGHT, BTN_ON nebo BTN_OFF) a hodnotu true, pokud chceme čekat na uvolnění nebo false pokud na uvolnění čekat nechceme. Například rkButtonIsPressed(BTN_UP, false) čeká pouze na stisk tlačíka UP, ale už nečeká na jeho uvolnění.
  • rkButtonWaitForRelease - Čeká, stisknuté tlačítko není uvolněno. Tato funkce pozastaví běh celého programu, dokud se tlačítko neuvolní. Jako parametr požaduje pouze jedno z tlačítek BTN_UP, BTN_DOWN, BTN_LEFT, BTN_RIGHT, BTN_ON nebo BTN_OFF.
Funkce pro jednotlivá tlačítka
  • rkButtonDown - Detekuje, zda je stisknuto tlačítko Down -> funguje pouze pro tlačítko BTN_DOWN
  • rkButtonUp - Detekuje, zda je stisknuto tlačítko UP -> funguje pouze pro tlačítko BTN_UP
  • rkButtonLeft - Detekuje, zda je stisknuto tlačítko LEFT -> funguje pouze pro tlačítko BTN_LEFT
  • rkButtonRight - Detekuje, zda je stisknuto tlačítko RIGHT -> funguje pouze pro tlačítko BTN_RIGHT
  • rkButtonOn - Detekuje, zda je stisknuto tlačítko ON -> funguje pouze pro tlačítko BTN_ON
  • rkButtonOff - Detekuje, zda je stisknuto tlačítko OFF -> funguje pouze pro tlačítko BTN_OFF Všechny tyto funkce očekávají pouzze jeden parametr a to, true, pokud chceme, aby se čekalo na uvolnění, jinak false.

Ukázka detekce stavu tlačítka:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "robotka.h"

void setup() {
    rkConfig cfg;
    rkSetup(cfg);
    
    while(true){
        if( rkButtonIsPressed(BTN_UP, false) ){ // tlacitko je stiskle a necekame na uvolneni
            printf("Tlacitko UP je stiskle\n");
        }
        else{   // tlacitko je uvolnene
            printf("Tlacitko UP je uvolnene\n");
        }
    }   
}

Předchozí ukázka vypíše, že je tlačítko UP stisknuté, pomocí funkce rkButtonIsPressed(). Pokud se stiskne, tak vypíše že stistklé je if, jinak vypíše, že není stisklé else.

Ukázka čekání na uvolneni tlačítka:

1
2
3
4
5
6
7
8
9
10
11
12
#include "robotka.h"

void setup() {
    rkConfig cfg;
    rkSetup(cfg);
    
    while(true){
        printf("Cekam na uvolneni tlačítka UP!\n");
        rkButtonWaitForRelease(BTN_UP); // ceka, dokud neni tlacitko UP uvolneno
        printf("Tlačítko UP bylo uvolneno!\n");
    }   
}

Tento program vypíše, že čeká na uvolnění tlačítka UP. Následně čeká na funkci rkButtonWaitForRelease(), dokud se tlačítko neuvolní. Po uvolnění se vypíše, že se uvolnilo.

Ukázka čekání na stisk dvou tlačítek:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include "robotka.h"

void setup() {
    rkConfig cfg;
    rkSetup(cfg);
    
    while(true){
        // kontrola, zda je zmacknute tlacitko LEFT i RIGHT soucasne
        if( rkButtonIsPressed(BTN_LEFT, false) && rkButtonIsPressed(BTN_RIGHT, false) ){
            printf("Tlačítko LEFT a RIGHT je stisknuto!\n");
        }
    }   
}

Předchozí program je možné číst následovně. Je stisknuté tlačítko LEFT a zároveň je stisknuté tlačítko RIGHT? Pokud ano, tak tuto informaci vypíše vypíše. Tento program lze lépe zapsat takto:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include "robotka.h"

void setup() {
    rkConfig cfg;
    rkSetup(cfg);
    
    while(true){
        // kontrola, zda je zmacknute tlacitko LEFT i RIGHT soucasne
        if( rkButtonLeft(false) && rkButtonRight(false) ){
            printf("Tlačítko LEFT a RIGHT je stisknuto!\n");
        }
    }   
}

Další kapitola: Ultrazvuk