latest :)
This commit is contained in:
@@ -1,86 +0,0 @@
|
||||
#include "AnalogButton_local.h"
|
||||
//#include "WProgram.h"
|
||||
#include "Arduino.h"
|
||||
|
||||
AnalogButton::AnalogButton(uint8_t analogPin, int buttonValueReturn,
|
||||
int buttonValueUp, int buttonValueDown, int buttonValueOk)
|
||||
{
|
||||
// Store analog pin used to multiplex push button
|
||||
buttonPin = analogPin;
|
||||
|
||||
// Add upper bound of tolerance for variation againts resistor values, temperature
|
||||
// and other possible drift
|
||||
buttonValueThresholdReturn = TOLERANCE*buttonValueReturn;
|
||||
buttonValueThresholdUp = TOLERANCE*buttonValueUp;
|
||||
buttonValueThresholdDown = TOLERANCE*buttonValueDown;
|
||||
buttonValueThresholdOk = TOLERANCE*buttonValueOk;
|
||||
}
|
||||
|
||||
button_t AnalogButton::read(void)
|
||||
{
|
||||
int buttonValue;
|
||||
|
||||
buttonValue = analogRead(buttonPin);
|
||||
|
||||
if (buttonValue >= BUTTON_NONE_THRESHOLD) return BUTTON_NONE;
|
||||
if (buttonValue <= buttonValueThresholdReturn) return BUTTON_RETURN;
|
||||
if (buttonValue <= buttonValueThresholdUp) return BUTTON_UP;
|
||||
if (buttonValue <= buttonValueThresholdDown) return BUTTON_DOWN;
|
||||
if (buttonValue <= buttonValueThresholdOk) return BUTTON_OK;
|
||||
|
||||
return BUTTON_NONE;
|
||||
}
|
||||
|
||||
button_t AnalogButton::get(void)
|
||||
{
|
||||
static button_t buttonMask;
|
||||
static buttonState_t buttonState;
|
||||
static unsigned long debounceTimer;
|
||||
button_t buttonValue;
|
||||
button_t buttonStatus;
|
||||
|
||||
// Initialize button status
|
||||
buttonStatus = BUTTON_NONE;
|
||||
|
||||
switch (buttonState)
|
||||
{
|
||||
case BUTTON_STATE_SCAN:
|
||||
// Retrieve current button value
|
||||
buttonValue = read();
|
||||
// If button press is detected
|
||||
if (buttonValue != BUTTON_NONE)
|
||||
{
|
||||
// Store current button press value
|
||||
buttonMask = buttonValue;
|
||||
// Retrieve current time
|
||||
debounceTimer = millis();
|
||||
debounceTimer += DEBOUNCE_PERIOD;
|
||||
// Proceed to button debounce state
|
||||
buttonState = BUTTON_STATE_DEBOUNCE;
|
||||
}
|
||||
break;
|
||||
|
||||
case BUTTON_STATE_DEBOUNCE:
|
||||
if (read() == buttonMask)
|
||||
{
|
||||
// If debounce period is completed
|
||||
if (millis() >= debounceTimer)
|
||||
{
|
||||
buttonStatus = buttonMask;
|
||||
// Proceed to wait for the button to be released
|
||||
buttonState = BUTTON_STATE_RELEASE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case BUTTON_STATE_RELEASE:
|
||||
if (read() == BUTTON_NONE)
|
||||
{
|
||||
buttonMask = BUTTON_NONE;
|
||||
buttonState = BUTTON_STATE_SCAN;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return (buttonStatus);
|
||||
}
|
||||
Reference in New Issue
Block a user