int buttonPin = 12; // Push button connected to D2
int lastButtonState = HIGH;
int currentButtonState;
int pressCount = 0;
int R = 9;
int G = 11;
int B = 10;
int red = 5;
int green = 4;
int yellow = 3;
int passive = 2; // passive buzzer
int activeb = 7; // active buzzer
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT_PULLUP); // Push button
pinMode(R, OUTPUT);
pinMode(G, OUTPUT);
pinMode(B, OUTPUT);
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(yellow, OUTPUT);
pinMode(passive, OUTPUT);
pinMode(activeb, OUTPUT);
}
void loop() {
currentButtonState = digitalRead(buttonPin);
// Detect button press
if (lastButtonState == HIGH && currentButtonState == LOW) {
pressCount++;
if (pressCount > 8) pressCount = 1; // cycle through 8 modes
Serial.print("Button pressed, mode: ");
Serial.println(pressCount);
runMode(pressCount);
delay(200); // debounce
}
lastButtonState = currentButtonState;
}
void runMode(int mode) {
// Reset LEDs
analogWrite(R, 0);
analogWrite(G, 0);
analogWrite(B, 0);
digitalWrite(red, LOW);
digitalWrite(green, LOW);
digitalWrite(yellow, LOW);
noTone(passive);
digitalWrite(activeb, LOW);
switch (mode) {
case 1: // Red RGB + tones
analogWrite(R, 255);
analogWrite(G, 0);
analogWrite(B, 0);
tone(passive, 660, 200); delay(200);
tone(passive, 770, 200); delay(200);
tone(passive, 880, 200); delay(200);
break;
case 2: // Red RGB + higher tones
analogWrite(R, 255);
tone(passive, 990, 200); delay(200);
tone(passive, 1100, 200); delay(200);
tone(passive, 1200, 200); delay(200);
break;
case 3: // Blue RGB + tones
analogWrite(B, 255);
tone(passive, 1300, 200); delay(200);
tone(passive, 1400, 200); delay(200);
tone(passive, 1500, 200); delay(200);
break;
case 4: // Green RGB + active buzzer beeps
analogWrite(G, 255);
for (int i = 0; i < 3; i++) {
digitalWrite(activeb, HIGH); delay(300);
digitalWrite(activeb, LOW); delay(100);
}
break;
case 5: // Magenta RGB + active buzzer beeps
analogWrite(R, 255);
analogWrite(B, 255);
for (int i = 0; i < 3; i++) {
digitalWrite(activeb, HIGH); delay(300);
digitalWrite(activeb, LOW); delay(100);
}
break;
case 6: // Another magenta effect + active buzzer
analogWrite(R, 255);
analogWrite(B, 255);
for (int i = 0; i < 3; i++) {
digitalWrite(activeb, HIGH); delay(300);
digitalWrite(activeb, LOW); delay(100);
}
break;
case 7: // Red LED + active buzzer blink
for (int i = 0; i < 3; i++) {
digitalWrite(red, HIGH);
digitalWrite(activeb, HIGH); delay(300);
digitalWrite(activeb, LOW);
digitalWrite(red, LOW); delay(100);
}
break;
case 8: // Rainbow cycle with 3 LEDs
analogWrite(R, 255); analogWrite(G, 255); analogWrite(B, 0);
digitalWrite(red, HIGH); delay(100);
analogWrite(R, 0); analogWrite(G, 255); analogWrite(B, 255);
digitalWrite(green, HIGH); delay(100);
analogWrite(R, 255); analogWrite(G, 255); analogWrite(B, 255);
digitalWrite(yellow, HIGH); delay(100);
break;
}
}