const int LED_R = 10;
const int LED_G = 9;
const int LED_B = 8;
const int BTN_1 = 2;
const int BTN_2 = 3;
const int POT = A0;
volatile bool isModeOne = false;
volatile bool isModeTwo = false;
void setup() {
Serial.begin(9600);
pinMode(LED_R, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(LED_B, OUTPUT);
pinMode(BTN_1, INPUT_PULLUP);
pinMode(BTN_2, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(BTN_1), switchToModeOne, FALLING);
attachInterrupt(digitalPinToInterrupt(BTN_2), switchToModeTwo, FALLING);
}
void loop() {
if (isModeOne) {
Serial.println("Mode One Active");
modeOne();
} else if (isModeTwo) {
Serial.println("Mode Two Active");
modeTwo();
} else {
Serial.println("No Mode Active. All LEDs OFF.");
setLeds(LOW, LOW, LOW);
}
delay(500);
}
void switchToModeOne() {
isModeOne = true;
isModeTwo = false;
Serial.println("Switched to Mode One");
}
void switchToModeTwo() {
isModeTwo = true;
isModeOne = false;
Serial.println("Switched to Mode Two");
}
void modeOne() {
int val = analogRead(POT);
Serial.print("Mode One: Potentiometer Value = ");
Serial.println(val);
if (val < 100) {
Serial.println("LEDs OFF");
setLeds(LOW, LOW, LOW);
} else if (val < 340) {
Serial.println("Red LED Blinking");
blink(LED_R);
} else if (val < 680) {
Serial.println("Red & Green LEDs Blinking");
blink(LED_R);
blink(LED_G);
} else {
Serial.println("Red, Green & Blue LEDs Blinking");
blink(LED_R);
blink(LED_G);
blink(LED_B);
}
}
void modeTwo() {
int val = analogRead(POT);
int level = map(val, 0, 1023, 0, 7);
Serial.print("Mode Two: Potentiometer Mapped Value = ");
Serial.println(level);
bool r = bitRead(level, 0);
bool g = bitRead(level, 1);
bool b = bitRead(level, 2);
setLeds(r, g, b);
Serial.print("LED Status: R=");
Serial.print(r);
Serial.print(" G=");
Serial.print(g);
Serial.print(" B=");
Serial.println(b);
}
void setLeds(bool r, bool g, bool b) {
digitalWrite(LED_R, r);
digitalWrite(LED_G, g);
digitalWrite(LED_B, b);
}
void blink(int pin) {
digitalWrite(pin, HIGH);
delay(1000);
digitalWrite(pin, LOW);
delay(1000);
}