/* mbed Microcontroller Library * Copyright (c) 2019 ARM Limited * SPDX-License-Identifier: Apache-2.0 */ #include "ButtonEvent.h" #include "ButtonEventDispatcher.h" #undef __ARM_FP // fix FPU warning #include "mbed.h" #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(); } int main() { // Initialise the digital pin LED1 as an output button.fall(press); button.rise(release); bed.RegisterButtonHandler(setLed); while (true) { printf("sizeof(ButtonEvent): %zu Counter: %i\r\n", sizeof(ButtonEvent), counter); ThisThread::sleep_for(500ms); } }