#include #define LED_PIN 6 #define NUM_LEDS 12 #define POT_R A0 #define POT_G A1 #define POT_B A2 #define BUTTON_SELECT 3 // Button: selection #define BUTTON_ONOFF 2 // Button: ON/OFF #define BUTTON_MODE 4 // Button: mode control CRGB leds[NUM_LEDS]; int selectedLED = 0; bool ledsOn = true; int mode = 0; // 0 = single-LED, 1 = all LEDs bool buttonSelectPressed = false; bool buttonOnOffPressed = false; bool buttonModePressed = false; void setup() { pinMode(BUTTON_SELECT, INPUT_PULLUP); pinMode(BUTTON_ONOFF, INPUT_PULLUP); pinMode(BUTTON_MODE, INPUT_PULLUP); FastLED.addLeds(leds, NUM_LEDS); fill_solid(leds, NUM_LEDS, CRGB::Black); FastLED.show(); } void loop() { // --- LED-selection --- if (mode == 0 && digitalRead(BUTTON_SELECT) == LOW && !buttonSelectPressed) { buttonSelectPressed = true; selectedLED++; if (selectedLED >= NUM_LEDS) selectedLED = 0; delay(200); // simple gradient } if (digitalRead(BUTTON_SELECT) == HIGH) { buttonSelectPressed = false; } // --- ON/OFF --- if (digitalRead(BUTTON_ONOFF) == LOW && !buttonOnOffPressed) { buttonOnOffPressed = true; ledsOn = !ledsOn; delay(200); // simple gradient } if (digitalRead(BUTTON_ONOFF) == HIGH) { buttonOnOffPressed = false; } // --- mode control --- if (digitalRead(BUTTON_MODE) == LOW && !buttonModePressed) { buttonModePressed = true; mode = (mode + 1) % 2; // toggles between 0 and 1 // --- Feedback mode-switch --- for(int i=0; i<3; i++) { // 3 blinks fill_solid(leds, NUM_LEDS, CRGB::White); FastLED.show(); delay(i==0 ? 400 : 100); // first 400ms, then 100ms blink fill_solid(leds, NUM_LEDS, CRGB::Black); FastLED.show(); delay(100); } delay(200); //simple debounce } if (digitalRead(BUTTON_MODE) == HIGH) { buttonModePressed = false; } // --- RGB potentiometer --- analog values are shifted to 8-bit (0-255) for perfect rgb control uint8_t r = analogRead(POT_R) >> 2; uint8_t g = analogRead(POT_G) >> 2; uint8_t b = analogRead(POT_B) >> 2; // --- control LEDs --- if (!ledsOn) { fill_solid(leds, NUM_LEDS, CRGB::Black); // all off } else if (mode == 0) { // single LED leds[selectedLED] = CRGB(r, g, b); } else { // all LEDs fill_solid(leds, NUM_LEDS, CRGB(r, g, b)); } FastLED.show(); }