Driver to control buttons (with hardware debounce). This driver considered external pull-ups (or pull-downs) are in use

Dependents:   buttons is_released is_pressed button_status ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Hotboards_buttons.cpp Source File

Hotboards_buttons.cpp

00001 /*
00002   Hotboards_buttons.h - Driver to control buttons (with hardware debounce)
00003   this driver considered external pull-ups (or pull-downs) are in use
00004   Hotboards buttons board (http://hotboards.org)
00005   Created by Diego Perez, January 16, 2016.
00006   Released into the public domain.
00007 */
00008 #include "Hotboards_buttons.h"
00009 
00010 Hotboards_buttons::Hotboards_buttons( PinName pin, bool active ) :
00011    _pin( pin )
00012 {
00013     _lastButtonState = 0;
00014     _pressed = active;
00015     _isPressed = 0;
00016     _isReleased = 0;
00017 }
00018 
00019 bool Hotboards_buttons::isPressed( void )
00020 {
00021     bool isPressed;
00022     poll( );
00023     isPressed = _isPressed;
00024     _isPressed = 0;
00025     return isPressed;
00026 }
00027 
00028 bool Hotboards_buttons::isReleased( void )
00029 {
00030     bool isReleased;
00031     poll( );
00032     isReleased = _isReleased;
00033     _isReleased = 0;
00034     return isReleased;
00035 }
00036 
00037 bool Hotboards_buttons::status( void )
00038 {
00039     if( _pin == _pressed ) return 1;
00040     else return 0;
00041 }
00042 
00043 void Hotboards_buttons::poll( void )
00044 {
00045     bool buttonState;
00046     // leemos el boton de la tarjeta
00047     buttonState = status( );
00048 
00049     // comparemos el estado actual con la anterior lectura
00050     if( buttonState != _lastButtonState )
00051     {
00052         // si el estado cambio esque recien se presiono
00053         if( buttonState )
00054         {
00055             // regresamos un uno si el boton cambio a presionado
00056             _isPressed = 1;
00057         }
00058         else
00059         {
00060             // si no es que fue soltado
00061             _isReleased = 1;
00062         }
00063     }
00064     // respaldamos el esatdo actual para compararlo la sigentoie
00065     // vez que preguntemos
00066     _lastButtonState = buttonState;
00067 }