First see Part I.
See Video
In part II, I created a class name MultiStateButton that can
- Manage the 5 multi states associated with the button
- Handle the user input
- Handle the user interface AKA the LED
I also created a class Led dedicated to abstract a LED. The real utility of the class Led is that it can blink the led, without using the delay() function.
I still need to add a second Switch to handle moving backward among the states.
For now I could not make it work.
I also need to do some cleaning some of my coding convention are off.
The source code is on github at fArduino
I still need to add a second Switch to handle moving backward among the states.
For now I could not make it work.
I also need to do some cleaning some of my coding convention are off.
The source code is on github at fArduino
#include "fArduino.h"
const int SWITCH_PIN = 0;
const int SWITCH_PIN_PREVIOUS = 1;
const int LED_PIN = 1; // Red LED on the Trinket
const int LED_LIGTH_STEP_VALUES[] = { 0, 20, 200, 255, 255 }; // Define the led intensity, 255 we will blink
const int LED_BLINKING_RATES[] = { 100, 400 };
const int _blinking1LevelIndex = 3;
const int _blinking2LevelIndex = 4;
Led _onBoardLed(LED_PIN); // The led representing the User Interface
MultiStateButton _5StatesButton(SWITCH_PIN, &_onBoardLed, ArraySize(LED_LIGTH_STEP_VALUES), &LED_LIGTH_STEP_VALUES[0]);
void setup() {
Board.SetPinMode(SWITCH_PIN, INPUT);
Board.SetPinMode(SWITCH_PIN_PREVIOUS, INPUT);
Board.SetPinMode(LED_PIN, OUTPUT);
}
void CheckToActivateBlinkingMode() {
if ((_5StatesButton.StateIndex == _blinking1LevelIndex) || (_5StatesButton.StateIndex == _blinking2LevelIndex)) {
_5StatesButton.LedInstance->SetBlinkMode(LED_BLINKING_RATES[_5StatesButton.StateIndex - 3]);
}
else {
if (_5StatesButton.LedInstance->IsBlinking()) {
_5StatesButton.LedInstance->SetBlinkModeOff();
}
}
}
void loop() {
boolean buttonPressed = _5StatesButton.GetButtonStateDebounced();
if (buttonPressed == true && _5StatesButton._buttonLastStateInLoop == false) {
_5StatesButton.NextState();
CheckToActivateBlinkingMode();
}
_5StatesButton._buttonLastStateInLoop = buttonPressed;
// Update the led associated with the MultiStateButton including managing the
// blinking without using delay()
_5StatesButton.UpdateUI();
}

No comments:
Post a Comment