#include <SevSeg.h> // Library untuk seven-segment
#include "pitches.h" // Library untuk nada buzzer
SevSeg sevseg;
const int buttonPin = 2; // Pin untuk push button
const int buzzerPin = 3; // Pin untuk buzzer
const int ledRPin = 4; // Pin LED RGB (merah)
const int ledGPin = 5; // Pin LED RGB (kuning)
const int ledBPin = 6; // Pin LED RGB (biru)
int buttonState;
int buttonPressCount = 0;
int lastButtonState = LOW;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50; // Debounce time
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode(buzzerPin, OUTPUT);
pinMode(ledRPin, OUTPUT);
pinMode(ledGPin, OUTPUT);
pinMode(ledBPin, OUTPUT);
byte numDigits = 1;
byte digitPins[] = {7};
byte segmentPins[] = {8, 9, 10, 11, 12, 13, A0};
bool resistorsOnSegments = true;
bool updateWithDelays = false;
bool leadingZeros = false;
bool disableDecPoint = true;
sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(90);
}
void loop() {
// Membaca input button dengan debounce
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == LOW) {
buttonPressCount++;
handleButtonPress(buttonPressCount);
}
}
}
lastButtonState = reading;
// Menampilkan angka di seven-segment
sevseg.refreshDisplay();
}
void handleButtonPress(int count) {
if (count == 1) {
displayNumbers(1, 10);
playMelodyHarryPotter();
lightUpLED(ledGPin); // Lampu kuning
} else if (count == 2) {
displayNumbers(11, 20);
playMelodyHomeAlone();
lightUpLED(ledRPin); // Lampu merah
} else if (count == 3) {
displayNumbers(21, 30);
playMelodyRightHereWaiting();
lightUpLED(ledBPin); // Lampu biru
} else if (count == 4) {
turnOffAll();
buttonPressCount = 0; // Reset counter
}
}
void displayNumbers(int start, int end) {
for (int i = start; i <= end; i++) {
sevseg.setNumber(i);
delay(500);
}
}
void playMelodyHarryPotter() {
// Contoh nada sederhana
int melody[] = {NOTE_E4, NOTE_G4, NOTE_A4, NOTE_F4, NOTE_G4};
int duration[] = {500, 500, 500, 500, 500};
playMelody(melody, duration, 5);
}
void playMelodyHomeAlone() {
int melody[] = {NOTE_C4, NOTE_E4, NOTE_G4, NOTE_A4, NOTE_F4};
int duration[] = {500, 500, 500, 500, 500};
playMelody(melody, duration, 5);
}
void playMelodyRightHereWaiting() {
int melody[] = {NOTE_D4, NOTE_F4, NOTE_A4, NOTE_G4, NOTE_E4};
int duration[] = {500, 500, 500, 500, 500};
playMelody(melody, duration, 5);
}
void playMelody(int melody[], int duration[], int size) {
for (int i = 0; i < size; i++) {
tone(buzzerPin, melody[i], duration[i]);
delay(duration[i] * 1.3);
noTone(buzzerPin);
}
}
void lightUpLED(int ledPin) {
digitalWrite(ledRPin, LOW);
digitalWrite(ledGPin, LOW);
digitalWrite(ledBPin, LOW);
digitalWrite(ledPin, HIGH);
}
void turnOffAll() {
sevseg.blank();
digitalWrite(ledRPin, LOW);
digitalWrite(ledGPin, LOW);
digitalWrite(ledBPin, LOW);
noTone(buzzerPin);
}
Loading
esp32-s3-devkitc-1
esp32-s3-devkitc-1