// Use this function to configure the internal Bounce object to suit you. See the documentation at: https://github.com/thomasfredericks/Bounce2/wiki // This function can be left out if the defaults are acceptable - just don't call configureButton void configurePushButton(Bounce& bouncedButton) { // Set the debounce interval to 15ms - default is 10ms bouncedButton.interval(15); } // btn is a reference to the button that fired the event. That means you can use the same event handler for many buttons //void onButtonPressed(Button& btn) { // //} // duration reports back how long it has been since the button was originally pressed. // repeatCount tells us how many times this function has been called by this button. //void onButtonPressed(Button& btn) { // if (buttonMode.isPressed()) { // // } //} void onButtonHeld(Button& btn, uint16_t duration, uint16_t repeatCount) { if (buttonPlus.isPressed()) { plusButtonAction(); } if (buttonMinus.isPressed()) { minusButtonAction(); } if (buttonMode.isPressed()) { if (repeatCount <= 2) modeButtonHoldAction(); else if (repeatCount == 4) modeButtonRebootPendingAction(); else if (repeatCount > 4) modeButtonRebootAction(); } } void onButtonHeldNoRepeat(Button& btn, uint16_t duration) { //if (buttonMode.isPressed()) { // modeButtonHoldAction(); //} if (pirSensor.isPressed()) { pirSensorOnAction(); } } // duration reports back the total time that the button was held down void onButtonReleased(Button& btn, uint16_t duration) { if (btn.is(buttonPlus) && duration < 200) { plusButtonAction(); } else if (btn.is(buttonMinus) && duration < 200) { minusButtonAction(); } else if (btn.is(buttonMode) && duration < 200) { modeButtonAction(); } else if (btn.is(pirSensor)) { pirSensorOffAction(); } } void plusButtonAction() { Serial.println("Btn +"); if (!displayActive) { enableDisplay(); } else { extendDisplayTimeout(); if (heatingMode == 1 && preset != 0) setPresetTo(0); else setTempStepUp(); } } void minusButtonAction() { Serial.println("Btn -"); if (heatingMode == 1 && preset != 0) setPresetTo(0); if (!displayActive) { enableDisplay(); } else { extendDisplayTimeout(); if (heatingMode == 1 && preset != 0) setPresetTo(0); else setTempStepDown(); } } void modeButtonAction() { Serial.println("Btn mode"); if (!displayActive) { enableDisplay(); //displayShowLine2OverlayMessage(currentPresetName); } else { extendDisplayTimeout(); if (pendingRestart) { doRestart = true; updateDisplay(); } else { if (heatingMode > 0) { if (pendingPresetToggle) { togglePreset(); } else { pendingPresetToggle = true; displayShowLine2OverlayMessage(currentPresetName); } } } } } void modeButtonHoldAction() { Serial.println("Btn mode held - toggle on/off"); extendDisplayTimeout(); if (pendingRestart) { doRestart = true; updateDisplay(); } else { toggleOnOff(); } } void modeButtonRebootPendingAction() { extendDisplayTimeout(); pendingRestart = true; pendingRestart_lastMillis = millis(); updateDisplay(); } void modeButtonRebootAction() { extendDisplayTimeout(); doRestart = true; updateDisplay(); } void pirSensorOnAction() { PIRSensorOn = true; Serial.println("PIR sensor ON"); publishCurrentPIRValue(); sendToDomoticz_PIR(); if (PIR_enablesDisplay) enableDisplay(); } void pirSensorOffAction() { PIRSensorOn = false; Serial.println("PIR sensor OFF"); publishCurrentPIRValue(); sendToDomoticz_PIR(); }