Lendo os botões da micro:bit no mbed

Este post faz parte da série micro:bit no mbed

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:

Botões da micro:bit

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

Micro:bit – Tecnologia ao alcance de todos

Curso mbed e FRDM KL25Z da NXP

micro:bit no mbed

Programando a BBC micro:bit no mbed Lendo o acelerômetro da micro:bit com mbed
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
0 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Home » Software » Lendo os botões da micro:bit no mbed

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: