No artigo anterior vimos como configurar o mbed para programação da micro:bit usando a abstração de hardware desenvolvida pela Lancaster University. Neste artigo vamos explorar a leitura de eventos de botões.
API para leitura de Botões da micro:bit
A micro:bit possui dois botões de uso geral: buttonA e buttonB, conforme exibido na imagem a seguir:
Os botões são configurados da seguinte forma na API:
Message Bus ID
|
Constant |
Value |
|
MICROBIT_ID_BUTTON_A |
1 |
|
MICROBIT_ID_BUTTON_B | 2 |
Há ainda uma terceira constante para a leitura da combinação dos dois botões: MICROBIT_ID_BUTTON_AB
Os seguintes eventos estão disponíveis para a leitura dos botões:
Message Bus Events
|
Constant |
Value |
|
MICROBIT_BUTTON_EVT_DOWN |
1 |
|
MICROBIT_BUTTON_EVT_UP |
2 |
|
MICROBIT_BUTTON_EVT_CLICK |
3 |
|
MICROBIT_BUTTON_EVT_LONG_CLICK |
4 |
|
MICROBIT_BUTTON_EVT_HOLD |
5 |
|
MICROBIT_BUTTON_EVT_DOUBLE_CLICK |
6 |
Vamos aos códigos de teste.
Código para leitura de botões no mbed
Vamos usar como base o exemplo feito no artigo anterior, que já traz toda a configuração para a micro:bit no mbed. Faça um clone e dê um nome para o seu novo projeto.
Vamos testar os eventos para os botões e visualizá-los em um terminal serial.
Digite o seguinte código:
#include "MicroBit.h"
MicroBit uBit;
//Evento dos botões
void onButton(MicroBitEvent e)
{
if (e.source == MICROBIT_ID_BUTTON_A)
uBit.serial.printf("BOTAO A: ");
if (e.source == MICROBIT_ID_BUTTON_B)
uBit.serial.printf("BOTÂO B: ");
if (e.source == MICROBIT_ID_BUTTON_AB)
uBit.serial.printf("BOTAO A+B: ");
if (e.value == MICROBIT_BUTTON_EVT_DOWN)
uBit.serial.printf("DOWN");
if (e.value == MICROBIT_BUTTON_EVT_UP)
uBit.serial.printf("UP");
if (e.value == MICROBIT_BUTTON_EVT_CLICK)
uBit.serial.printf("CLICK");
if (e.value == MICROBIT_BUTTON_EVT_LONG_CLICK)
uBit.serial.printf("LONG_CLICK");
if (e.value == MICROBIT_BUTTON_EVT_HOLD)
uBit.serial.printf("HOLD");
if (e.value == MICROBIT_BUTTON_EVT_DOUBLE_CLICK)
uBit.serial.printf("DOUBLE_CLICK");
uBit.serial.printf("\n");
}
int main()
{
// Initialise the micro:bit runtime.
uBit.init();
uBit.messageBus.listen(MICROBIT_ID_BUTTON_A, MICROBIT_EVT_ANY, onButton);
uBit.messageBus.listen(MICROBIT_ID_BUTTON_B, MICROBIT_EVT_ANY, onButton);
uBit.messageBus.listen(MICROBIT_ID_BUTTON_AB, MICROBIT_EVT_ANY, onButton);
while (1)
uBit.sleep(10000);
}
Faça o upload e abra um terminal serial com a seguinte configuração: baudrate 115200, 8N1.
Agora teste os botões e veja os eventos no terminal serial:
Também podemos gerar eventos para os pinos P0, P1 e P2, usados como entradas touch.
Digite o seguinte código para leitura de eventos desses pinos:
#include "MicroBit.h"
MicroBit uBit;
//Evento dos botões
void onButton(MicroBitEvent e)
{
if (e.source == MICROBIT_ID_IO_P0)
uBit.serial.printf("TOUCH P0: ");
if (e.source == MICROBIT_ID_IO_P1)
uBit.serial.printf("TOUCH P1: ");
if (e.source == MICROBIT_ID_IO_P2)
uBit.serial.printf("TOUCH P2: ");
if (e.value == MICROBIT_BUTTON_EVT_DOWN)
uBit.serial.printf("DOWN");
if (e.value == MICROBIT_BUTTON_EVT_UP)
uBit.serial.printf("UP");
if (e.value == MICROBIT_BUTTON_EVT_CLICK)
uBit.serial.printf("CLICK");
if (e.value == MICROBIT_BUTTON_EVT_LONG_CLICK)
uBit.serial.printf("LONG_CLICK");
if (e.value == MICROBIT_BUTTON_EVT_HOLD)
uBit.serial.printf("HOLD");
if (e.value == MICROBIT_BUTTON_EVT_DOUBLE_CLICK)
uBit.serial.printf("DOUBLE_CLICK");
uBit.serial.printf("\n");
}
int main()
{
// Initialise the micro:bit runtime.
uBit.init();
uBit.messageBus.listen(MICROBIT_ID_IO_P0, MICROBIT_EVT_ANY, onButton);
uBit.messageBus.listen(MICROBIT_ID_IO_P1, MICROBIT_EVT_ANY, onButton);
uBit.messageBus.listen(MICROBIT_ID_IO_P2, MICROBIT_EVT_ANY, onButton);
// configura os pinos P0, P1 and P2 para o modo touch sense.
uBit.io.P0.isTouched();
uBit.io.P1.isTouched();
uBit.io.P2.isTouched();
while (1)
uBit.sleep(10000);
}
Carregue o código para sua Micro:bit e veja os eventos no terminal serial:
Chegamos ao fim deste tutorial. Recomendo que você teste os eventos seguindo os exemplos apresentados e também use outros métodos oferecidos pela API para se trabalhar com botões.
Se ficou alguma dúvida, crítica ou sugestão, deixe seu comentário abaixo.
Saiba mais
Programando a BBC micro:bit no mbed







