#define BUTTON 2
#define BUZZER1 3
#define BUZZER2 5
#define BUZZER3 6
int buzzers[] = {BUZZER1, BUZZER2, BUZZER3};
int freqs[] = {440, 523, 659}; // A4, C5, E5
int longPressFreqs[] = {262, 294, 330, 349, 392, 440, 466, 494, 523, 554, 587, 622, 659, 698, 740, 784, 830, 880, 932, 987, 1047, 1109, 1175, 1245, 1319, 1397, 1480, 1568, 1661, 1760, 1865}; // 30 frequencies
unsigned long pressTime = 0;
bool buttonState = false;
bool lastButtonState = false;
void setup() {
pinMode(BUTTON, INPUT_PULLUP); // Use internal pull-up resistor
pinMode(BUZZER1, OUTPUT);
pinMode(BUZZER2, OUTPUT);
pinMode(BUZZER3, OUTPUT);
randomSeed(analogRead(A0)); // For better shuffle randomness
}
void loop() {
buttonState = digitalRead(BUTTON) == LOW;
if (buttonState && !lastButtonState) {
// Button pressed, start counting time
pressTime = millis();
}
if (!buttonState && lastButtonState) {
// Button released, check how long it was pressed
unsigned long pressDuration = millis() - pressTime;
// Determine the action based on press duration
if (pressDuration > 5000) {
// Long press (more than 5 seconds)
playLongPressPattern();
} else if (pressDuration > 1000) {
// Short press (more than 1 second, but less than 5 seconds)
playBuzzersRandomOrder();
}
// Reset after release
delay(500); // Debounce delay
}
lastButtonState = buttonState;
}
void playBuzzersRandomOrder() {
// Shuffle order
for (int i = 2; i > 0; i--) {
int j = random(i + 1);
int tempB = buzzers[i]; buzzers[i] = buzzers[j]; buzzers[j] = tempB;
int tempF = freqs[i]; freqs[i] = freqs[j]; freqs[j] = tempF;
}
for (int i = 0; i < 3; i++) {
tone(buzzers[i], freqs[i]);
delay(3333); // Play each frequency for 3.33 seconds
noTone(buzzers[i]);
}
}
void playLongPressPattern() {
// Play 30 frequencies for 2 seconds each (total 60 seconds)
for (int i = 0; i < 30; i++) {
tone(BUZZER1, longPressFreqs[i]); // Play frequency
delay(2000); // Play for 2 seconds
noTone(BUZZER1); // Stop sound
}
}