Skip to content
Snippets Groups Projects
main.cpp 1.53 KiB
Newer Older
Christian Werner's avatar
Christian Werner committed
/* mbed Microcontroller Library
 * Copyright (c) 2019 ARM Limited
 * SPDX-License-Identifier: Apache-2.0
 */
Christian Werner's avatar
Christian Werner committed

#include "ButtonEvent.h"
#include "ButtonEventDispatcher.h"
#undef __ARM_FP // fix FPU warning
Christian Werner's avatar
Christian Werner committed
#include "mbed.h"
Christian Werner's avatar
Christian Werner committed
#include "platform/mbed_thread.h"


DigitalOut led(LED1);
//DigitalOut led2(LE

InterruptIn button(BUTTON1);

ButtonEventDispatcher bed;

Timer t;

volatile int counter=0;

void setLed(const ButtonEvent& e ) {
    if(e.getType() == ButtonEvent::shortPress) {
        led = !led; // toggle LED1
        counter=counter+1;
    }

    if(e.getType() == ButtonEvent::longPress) {
        led = 0;
        counter=counter+2;
    }

    if(e.getType() == ButtonEvent::veryLongPress) {
        led = 1;
        counter=counter+3;
    }
}

void press() {
    t.start();
}

void release() {
    t.stop();
    if (t.elapsed_time() < 50ms) {
        // bouncing -> ignore
    } else if (t.elapsed_time() < 500ms) {
        bed.Dispatch(ButtonEvent(ButtonEvent::shortPress, ButtonEvent::button1));
    } else if (t.elapsed_time() < 2000ms) {
        bed.Dispatch(ButtonEvent(ButtonEvent::longPress, ButtonEvent::button1));
    } else {
        bed.Dispatch(ButtonEvent(ButtonEvent::veryLongPress, ButtonEvent::button1));
    }
    t.reset();
}
Christian Werner's avatar
Christian Werner committed

int main()
Christian Werner's avatar
Christian Werner committed
    // Initialise the digital pin LED1 as an output
Christian Werner's avatar
Christian Werner committed
    button.fall(press);
    button.rise(release);

    bed.RegisterButtonHandler(setLed);
Christian Werner's avatar
Christian Werner committed

    while (true) {
Christian Werner's avatar
Christian Werner committed
        printf("sizeof(ButtonEvent): %zu Counter: %i\r\n", sizeof(ButtonEvent), counter);
        ThisThread::sleep_for(500ms);
Christian Werner's avatar
Christian Werner committed
    }
}