void handleButtonLogic() { bool modePressed = (digitalRead(BUTTON_MODE) == LOW); bool addPressed = (digitalRead(BUTTON_ADD) == LOW); bool colorPressed = (digitalRead(BUTTON_COLOR) == LOW); bool minusPressed = (digitalRead(BUTTON_MINUS) == LOW); if (addPressed) { //Add button pressed HandleAddButtonPress(); delay(BUTTON_AUTOINC_DELAY); while (digitalRead(BUTTON_ADD) == LOW) { //Delay auto-shift HandleAddButtonPress(); delay(BUTTON_HOLD_DELAY); } delay(BUTTON_DEBOUNCE); } else if (minusPressed) { //Minus button pressed HandleMinusButtonPress(); delay(BUTTON_AUTOINC_DELAY); while (digitalRead(BUTTON_MINUS) == LOW) { //Delay auto-shift HandleMinusButtonPress(); delay(BUTTON_HOLD_DELAY); } delay(BUTTON_DEBOUNCE); } else if (colorPressed) { //Color button pressed HandleColorButtonPress(); delay(BUTTON_DEBOUNCE); while (digitalRead(BUTTON_COLOR) == LOW) { //Wait for button up before continue delay(BUTTON_HOLD_DELAY); } //Debounce delay(BUTTON_DEBOUNCE); } else if (modePressed) { HandleModeButtonPress(); while (digitalRead(BUTTON_MODE) == LOW) { //Wait for button up before continue delay(BUTTON_HOLD_DELAY); } //Debounce delay(BUTTON_DEBOUNCE); } } //Mode button is pressed void HandleModeButtonPress() { //Update the mode number currentMode += 1; if (currentMode > 2) { currentMode = 0; } //Current mode updated //Reset the RGB values to default of each modes if (currentMode == 0) { Serial.println("Switched to White Balanced Mode"); loadWhiteModeDefault(); } else if (currentMode == 1) { Serial.println("Switched to RGB Mode"); loadRGBModeDefault(); } else if (currentMode == 2) { Serial.println("Switched to Color Palette Mode"); loadPresetsDefault(); } } //Color button is pressed void HandleColorButtonPress() { if (currentMode == 0) { //White mode //Only accept 0 (temp) or 1 (brightness) if (adjustingCatergory == 0) { adjustingCatergory = 1; setControlLEDColor(MAX_CTRLBRIGHTNESS, MAX_CTRLBRIGHTNESS, 0); } else { adjustingCatergory = 0; //Set control LED to white setControlLEDColor(MAX_CTRLBRIGHTNESS, MAX_CTRLBRIGHTNESS, MAX_CTRLBRIGHTNESS); } } else if (currentMode == 1) { //RGB Adjustable Mode if (adjustingCatergory == 0) { //Red -> Green adjustingCatergory = 1; setControlLEDColor(0, MAX_CTRLBRIGHTNESS, 0); } else if (adjustingCatergory == 1) { //Green -> Blue adjustingCatergory = 2; setControlLEDColor(0, 0, MAX_CTRLBRIGHTNESS); } else if (adjustingCatergory == 2) { //Blue -> Red adjustingCatergory = 0; //Set LED to yellow for brightness setControlLEDColor(MAX_CTRLBRIGHTNESS, 0, 0); } } else if (currentMode == 2){ //Color pallete mode if (adjustingCatergory == 0) { //Enter brightness control mode adjustingCatergory = 1; setControlLEDColor(MAX_CTRLBRIGHTNESS, MAX_CTRLBRIGHTNESS, 0); }else{ //Enter pallete select mode adjustingCatergory = 0; renderColorPallete(values[0]); } } } void HandleAddButtonPress() { if (currentMode == 0) { //White Color Mode if (adjustingCatergory == 0) { //add to K value values[0] = values[0] + 100; if (values[0] > WHITE_MAX_TEMP) { values[0] = WHITE_MAX_TEMP; blinkUpperLimit(); } Serial.print("Updating color temperature to "); Serial.println(values[0]); } else if (adjustingCatergory == 1) { values[1] += 1; if (values[1] > MAX_BRIGHTNESS) { values[1] = MAX_BRIGHTNESS; blinkUpperLimit(); } Serial.print("Updating brightness to "); Serial.println(values[1]); } setColorTemperature(values[0], values[1]); } else if (currentMode == 1) { //RGB Color Mode handleRGBModeAdd(); } else if (currentMode == 2){ //Color Pallete Mode handlePresetsAdd(); } } void HandleMinusButtonPress() { if (currentMode == 0) { //White Color Mode if (adjustingCatergory == 0) { //reduce from K value values[0] = values[0] - 100; if (values[0] < WHITE_MIN_TEMP) { values[0] = WHITE_MIN_TEMP; blinkLowerLimit(); } Serial.print("Updating color temperature to "); Serial.println(values[0]); } else if (adjustingCatergory == 1) { values[1] -= 1; if (values[1] < 0) { values[1] = 0; blinkLowerLimit(); } Serial.print("Updating brightness to "); Serial.println(values[1]); } setColorTemperature(values[0], values[1]); } else if (currentMode == 1) { //RGB Color Mode handleRGBModeMinus(); } else if (currentMode == 2){ //Color Pallete Mode handlePresetsMinus(); } }