#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);  // Alamat LCD I2C dan ukuran
const int ledPin1 = 13;  // Pin untuk LED 
const int ledPin2 = 12;  // Pin untuk LED 
const int ledPin3 = 11;  // Pin untuk LED 
const int ledPin4 = 10;  // Pin untuk LED 
const int ledPin5 = 9;  // Pin untuk LED 
const int button1Pin = 2;  // Pin untuk tombol 1
const int button2Pin = 3;  // Pin untuk tombol 2
boolean runningState = false;  // Status LED running
boolean flipFlopState = false;  // Status LED flip-flop
boolean button1Pressed = false;  // Tombol 1 ditekan
boolean button2Pressed = false;  // Tombol 2 ditekan
void setup() {
  lcd.init();
  lcd.backlight();
  
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);
  pinMode(ledPin5, OUTPUT);
  pinMode(button1Pin, INPUT_PULLUP);
  pinMode(button2Pin, INPUT_PULLUP);
  
  lcd.setCursor(0, 0);
  lcd.print("Tekan Button 1");
  lcd.setCursor(0, 1);
  lcd.print("atau Button 2");
}
void loop() {
  button1Pressed = digitalRead(button1Pin) == LOW;
  button2Pressed = digitalRead(button2Pin) == LOW;
  if (button1Pressed && !runningState) {
    runningState = true;
    ledRunning();
  } else if (runningState && !button1Pressed) {
    runningState = false;
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin3, LOW);
    digitalWrite(ledPin4, LOW);
    digitalWrite(ledPin5, LOW);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Tekan Button 1");
    lcd.setCursor(0, 1);
    lcd.print("atau Button 2");
  }
  if (button2Pressed && !flipFlopState) {
    flipFlopState = true;
    ledFlipFlop();
  } else if (flipFlopState && !button2Pressed) {
    flipFlopState = false;
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin3, LOW);
    digitalWrite(ledPin4, LOW);
    digitalWrite(ledPin5, LOW);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Tekan Button 1");
    lcd.setCursor(0, 1);
    lcd.print("atau Button 2");
  }
}
void ledRunning() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("LED Running");
  
  for (int i = 0; i < 5; i++) {
    digitalWrite(ledPin1, HIGH);
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin3, LOW);
    digitalWrite(ledPin4, LOW);
    digitalWrite(ledPin5, LOW);
    delay(500);
    
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, HIGH);
    digitalWrite(ledPin3, LOW);
    digitalWrite(ledPin4, LOW);
    digitalWrite(ledPin5, LOW);
    delay(500);
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin3, HIGH);
    digitalWrite(ledPin4, LOW);
    digitalWrite(ledPin5, LOW);
    delay(500);
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin3, LOW);
    digitalWrite(ledPin4, HIGH);
    digitalWrite(ledPin5, LOW);
    delay(500);
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin3, LOW);
    digitalWrite(ledPin4, LOW);
    digitalWrite(ledPin5, HIGH);
    delay(500);
  }
}
void ledFlipFlop() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("LED Flip-Flop");
  
  for (int i = 0; i < 50; i++) {
    digitalWrite(ledPin1, HIGH);
    digitalWrite(ledPin2, LOW);
    delay(500);
    digitalWrite(ledPin2, HIGH);
    digitalWrite(ledPin1, LOW);
    delay(500);
    digitalWrite(ledPin3, HIGH);
    digitalWrite(ledPin4, LOW);
    delay(500);
    digitalWrite(ledPin4, HIGH);
    digitalWrite(ledPin3, LOW);
    delay(500);
    digitalWrite(ledPin5, HIGH);
    digitalWrite(ledPin4, LOW);
    delay(500);
    digitalWrite(ledPin4, HIGH);
    digitalWrite(ledPin5, LOW);
    delay(500);
  }
}