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 pravdatrue, pokud je tlačítko stisknuté, jinak vrací nepravdafalse. Jako parametr očekává jedno z tlačítek (BTN_UP,BTN_DOWN,BTN_LEFT,BTN_RIGHT,BTN_ONneboBTN_OFF) a hodnotutrue, pokud chceme čekat na uvolnění nebofalsepokud na uvolnění čekat nechceme. NapříkladrkButtonIsPressed(BTN_UP, false)čeká pouze na stisk tlačíkaUP, 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čítekBTN_UP,BTN_DOWN,BTN_LEFT,BTN_RIGHT,BTN_ONneboBTN_OFF.
Funkce pro jednotlivá tlačítka
rkButtonDown- Detekuje, zda je stisknuto tlačítko Down -> funguje pouze pro tlačítkoBTN_DOWNrkButtonUp- Detekuje, zda je stisknuto tlačítko UP -> funguje pouze pro tlačítkoBTN_UPrkButtonLeft- Detekuje, zda je stisknuto tlačítko LEFT -> funguje pouze pro tlačítkoBTN_LEFTrkButtonRight- Detekuje, zda je stisknuto tlačítko RIGHT -> funguje pouze pro tlačítkoBTN_RIGHTrkButtonOn- Detekuje, zda je stisknuto tlačítko ON -> funguje pouze pro tlačítkoBTN_ONrkButtonOff- Detekuje, zda je stisknuto tlačítko OFF -> funguje pouze pro tlačítkoBTN_OFFVšechny tyto funkce očekávají pouzze jeden parametr a to,true, pokud chceme, aby se čekalo na uvolnění, jinakfalse.
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");
}
}
}