// KELOMPOK CS_Mickey_Mouse
// Shirley, Claresta Elysia, Jovandi Todana

#include <LiquidCrystal.h>

const int potPin = A0;
const int led1Pin = 13;
const int led2Pin = 4;
const int buzzer1Pin = 3;
const int buzzer2Pin = 5;
const int button1Pin = 2;
const int button2Pin = 6;

LiquidCrystal lcd(12, 11, 10, 9, 8, 7);

int mode = 0;
bool button1Pressed = false;
bool button2Pressed = false;
unsigned long lastDebounceTime1 = 0;
unsigned long lastDebounceTime2 = 0;
const unsigned long debounceDelay = 50;

void setup() {
  pinMode(led1Pin, OUTPUT);
  pinMode(led2Pin, OUTPUT);
  pinMode(buzzer1Pin, OUTPUT);
  pinMode(buzzer2Pin, OUTPUT);
  pinMode(button1Pin, INPUT_PULLUP);
  pinMode(button2Pin, INPUT_PULLUP);

  lcd.begin(16, 2);
  lcd.print("Normal Mode");
}

void loop() {
  int potValue = analogRead(potPin);
  int button1State = digitalRead(button1Pin);
  int button2State = digitalRead(button2Pin);

  // Debouncing tombol 1
  if (button1State == LOW && (millis() - lastDebounceTime1) > debounceDelay) {
    button1Pressed = !button1Pressed;
    lastDebounceTime1 = millis();
    if (button1Pressed) {
      mode = (mode == 1) ? 0 : 1; // Toggle Party Mode
      lcd.clear();
      lcd.print((mode == 1) ? "Party Mode Active!" : "Normal Mode");
    }
  }

  // Debouncing tombol 2
  if (button2State == LOW && (millis() - lastDebounceTime2) > debounceDelay) {
    button2Pressed = !button2Pressed;
    lastDebounceTime2 = millis();
    if (button2Pressed) {
      mode = (mode == 2) ? 0 : 2; 
      lcd.clear();
      lcd.print((mode == 2) ? "System Paused" : "Normal Mode");
    }
  }

  if (mode == 0) {
    // Normal Mode
    lcd.setCursor(0, 1);
    if (potValue < 341) {
      // Nada rendah
      lcd.print("Rendah  ");
      digitalWrite(led1Pin, HIGH);
      digitalWrite(led2Pin, LOW);
      tone(buzzer1Pin, 262); 
    } else if (potValue < 682) {
      // Nada sedang 
      lcd.print("Sedang  ");
      digitalWrite(led1Pin, LOW);
      digitalWrite(led2Pin, HIGH);
      tone(buzzer1Pin, 392); 
    } else {
      // Nada tinggi
      lcd.print("Tinggi  ");
      digitalWrite(led1Pin, HIGH);
      digitalWrite(led2Pin, HIGH);
      tone(buzzer1Pin, 523); 
    }
    delay(100);
  }
  // Party Mode
  else if (mode == 1) { 
    lcd.setCursor(0, 1);
    lcd.print("LED Flashing");
    digitalWrite(led1Pin, !digitalRead(led1Pin));
    digitalWrite(led2Pin, !digitalRead(led2Pin));
    tone(buzzer1Pin, random(100, 1000));
    delay(100);
  }
  // Mode Pause
  else if (mode == 2) {
    digitalWrite(led1Pin, LOW);
    digitalWrite(led2Pin, LOW);
    noTone(buzzer1Pin);
  }
}