diff --git a/include/commonFunctions.h b/include/commonFunctions.h new file mode 100644 index 0000000..dd7b579 --- /dev/null +++ b/include/commonFunctions.h @@ -0,0 +1,3 @@ +#pragma once + +bool debounceRead(int buttonPin, int *lastButtonState, unsigned long *lastDebounceTime, int *buttonState); \ No newline at end of file diff --git a/include/constants.h b/include/constants.h index b5d9c4f..8bb947c 100644 --- a/include/constants.h +++ b/include/constants.h @@ -1,16 +1,18 @@ #pragma once +const int DEBOUNCE_DELAY = 50; + const int USER_STEPS = 2; const int STAFF_STEPS = 16; const int POT_CS = 10; const int POT_UD = 9; -const int LED_HIGH = 11; // Green -const int LED_MED = 12; // Red -const int LED_LOW = 13; // Green +const int LED_HIGH = 11; // Green +const int LED_MED = 12; // Red +const int LED_LOW = 13; // Green -const int BTN_STAFF_UP = 2; +const int BTN_STAFF_UP = 2; const int BTN_STAFF_DWN = 4; const int REMOTE_A = 17; diff --git a/src/commonFunctions.cpp b/src/commonFunctions.cpp new file mode 100644 index 0000000..79b55f6 --- /dev/null +++ b/src/commonFunctions.cpp @@ -0,0 +1,36 @@ +#include +#include +#include + +bool debounceRead(int buttonPin, int *lastButtonState, unsigned long *lastDebounceTime, int *buttonState) +{ + int reading = digitalRead(buttonPin); + + // If the switch changed, due to noise or pressing: + if (reading != *lastButtonState) + { + // reset the debouncing timer + *lastDebounceTime = millis(); + } + + if ((millis() - *lastDebounceTime) > DEBOUNCE_DELAY) + { + // whatever the reading is at, it's been there for longer than the debounce delay, so take it as the actual current state: + + // if the button state has changed: + if (reading != *buttonState) + { + *buttonState = reading; + + if (*buttonState == HIGH) + return true; + else + return false; + } + } + + // save the reading. Next time through the loop, it'll be the lastButtonState: + *lastButtonState = reading; + + return false; +} \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 28f746d..31fc94c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,6 +4,7 @@ #include #include #include +#include int maxVolume = 64; int userVolume = 64; @@ -12,9 +13,6 @@ int oldUserVolume = userVolume; int buttonState; int lastButtonState = LOW; unsigned long lastDebounceTime = 0; -unsigned long debounceDelay = 50; - -bool debounceRead(int buttonPin); void setup() { @@ -47,72 +45,39 @@ void loop() updateLeds(maxVolume); // SW1 - Staff Volume Up - if (!debounceRead(BTN_STAFF_UP)) + if (!debounceRead(BTN_STAFF_UP, &lastButtonState, &lastDebounceTime, &buttonState)) { staffVolumeUp(&maxVolume); } // SW2 - Staff Volume Down - if (!debounceRead(BTN_STAFF_DWN)) + if (!debounceRead(BTN_STAFF_DWN, &lastButtonState, &lastDebounceTime, &buttonState)) { staffVolumeDown(maxVolume, &userVolume, &oldUserVolume); } // Remote D - Mute - if (debounceRead(REMOTE_D)) + if (debounceRead(REMOTE_D, &lastButtonState, &lastDebounceTime, &buttonState)) { mute(&userVolume, &oldUserVolume, maxVolume); } // Remote A - Significantly Lower Volume - if (debounceRead(REMOTE_A)) + if (debounceRead(REMOTE_A, &lastButtonState, &lastDebounceTime, &buttonState)) { lowerVolume(&userVolume, &oldUserVolume, maxVolume); } // Remote B - Volume Up // Make sure we are not is a state of mute or lowered - if (debounceRead(REMOTE_B) && !(oldUserVolume > userVolume)) + if (debounceRead(REMOTE_B, &lastButtonState, &lastDebounceTime, &buttonState) && !(oldUserVolume > userVolume)) { volumeUp(&userVolume, &oldUserVolume, maxVolume); } // Remote C - Volume Down - if (debounceRead(REMOTE_C) && !(oldUserVolume > userVolume)) + if (debounceRead(REMOTE_C, &lastButtonState, &lastDebounceTime, &buttonState) && !(oldUserVolume > userVolume)) { volumeDown(&userVolume, &oldUserVolume); } -} - -bool debounceRead(int buttonPin) -{ - int reading = digitalRead(buttonPin); - - // If the switch changed, due to noise or pressing: - if (reading != lastButtonState) - { - // reset the debouncing timer - lastDebounceTime = millis(); - } - - if ((millis() - lastDebounceTime) > debounceDelay) - { - // whatever the reading is at, it's been there for longer than the debounce delay, so take it as the actual current state: - - // if the button state has changed: - if (reading != buttonState) - { - buttonState = reading; - - if (buttonState == HIGH) - return true; - else - return false; - } - } - - // save the reading. Next time through the loop, it'll be the lastButtonState: - lastButtonState = reading; - - return false; } \ No newline at end of file