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

Hotboards_buttons.cpp

Committer:
Hotboards
Date:
2016-02-29
Revision:
0:810519ce94bf

File content as of revision 0:810519ce94bf:

/*
  Hotboards_buttons.h - Driver to control buttons (with hardware debounce)
  this driver considered external pull-ups (or pull-downs) are in use
  Hotboards buttons board (http://hotboards.org)
  Created by Diego Perez, January 16, 2016.
  Released into the public domain.
*/
#include "Hotboards_buttons.h"

Hotboards_buttons::Hotboards_buttons( PinName pin, bool active ) :
   _pin( pin )
{
    _lastButtonState = 0;
    _pressed = active;
    _isPressed = 0;
    _isReleased = 0;
}

bool Hotboards_buttons::isPressed( void )
{
    bool isPressed;
    poll( );
    isPressed = _isPressed;
    _isPressed = 0;
    return isPressed;
}

bool Hotboards_buttons::isReleased( void )
{
    bool isReleased;
    poll( );
    isReleased = _isReleased;
    _isReleased = 0;
    return isReleased;
}

bool Hotboards_buttons::status( void )
{
    if( _pin == _pressed ) return 1;
    else return 0;
}

void Hotboards_buttons::poll( void )
{
    bool buttonState;
    // leemos el boton de la tarjeta
    buttonState = status( );

    // comparemos el estado actual con la anterior lectura
    if( buttonState != _lastButtonState )
    {
        // si el estado cambio esque recien se presiono
        if( buttonState )
        {
            // regresamos un uno si el boton cambio a presionado
            _isPressed = 1;
        }
        else
        {
            // si no es que fue soltado
            _isReleased = 1;
        }
    }
    // respaldamos el esatdo actual para compararlo la sigentoie
    // vez que preguntemos
    _lastButtonState = buttonState;
}