#include <FastLED.h>

#define NUM_LEDS 25  // Number of LEDs in your strip
#define DATA_PIN 13   // Data pin for WS2812B LEDs
#define BCD_PIN_A0 A0 // BCD input pin 1 (LSB)
#define BCD_PIN_A1 A1 // BCD input pin 2
#define BCD_PIN_A2 A2 // BCD input pin 3
#define BCD_PIN_A3 A3 // BCD input pin 4 (MSB)

CRGB leds[NUM_LEDS];

int lowBrightness = 10;   // Low brightness level
int highBrightness = 240; 

void setup() {
  FastLED.addLeds<WS2812B, DATA_PIN, BRG>(leds, NUM_LEDS);
  pinMode(BCD_PIN_A0, INPUT_PULLUP);
  pinMode(BCD_PIN_A1, INPUT_PULLUP);
  pinMode(BCD_PIN_A2, INPUT_PULLUP);
  pinMode(BCD_PIN_A3, INPUT_PULLUP);
}

void loop() {
  int bcd = readBCD();
  FastLED.setBrightness(lowBrightness);  // Set brightness for inactive "if" cases
  updateLEDs(bcd);
  FastLED.show();
}

int readBCD() {
  int bcd = 0;
  bcd |= !digitalRead(BCD_PIN_A0);
  bcd |= !digitalRead(BCD_PIN_A1) << 1;
  bcd |= !digitalRead(BCD_PIN_A2) << 2;
  bcd |= !digitalRead(BCD_PIN_A3) << 3;
  return bcd;
}

void updateLEDs(int bcd) {
  // Clear all LEDs to blue
  fill_solid(leds, NUM_LEDS, CRGB(246, 7, 7));

  // Set the specified LEDs to white based on BCD value
  if (bcd == 1) {
    leds[0] = leds[1] = CRGB(255, 255, 255);
  } else if (bcd == 2) {
    leds[2] = leds[3] = leds[4] = CRGB(255, 255, 255);
  } else if (bcd == 3) {
    leds[5] = leds[6] = CRGB(255, 255, 255);
  } else if (bcd == 4) {
    leds[7] = leds[8] = CRGB(255, 255, 255);
  } else if (bcd == 5) {
    leds[9] = leds[10] = CRGB(255, 255, 255);
  } else if (bcd == 6) {
    leds[11] = leds[12] = CRGB(255, 255, 255);
  } else if (bcd == 7) {
    leds[13] = leds[14] = CRGB(255, 255, 255);
  } else if (bcd == 8) {
    leds[15] = leds[16] = CRGB(255, 255, 255);
  } else if (bcd == 9) {
    leds[17] = leds[18] = CRGB(255, 255, 255);
  } else if (bcd == 10) {
    leds[19] = leds[20] = CRGB(255, 255, 255);
  } else if (bcd == 11) {
    leds[21] = leds[22] = CRGB(255, 255, 255);
  } else if (bcd == 12) {
    leds[23] = leds[24] = CRGB(255, 255, 255);

    // Set brightness for active "if" case
    FastLED.setBrightness(highBrightness);
  }

  // You can add additional cases or actions as needed.
}