#include <Wire.h>
#include <LiquidCrystal_I2C.h>

const int buttonPin1 = 2; // Pin untuk tombol 1
const int buttonPin2 = 3; // Pin untuk tombol 2
const int buttonPin3 = 4; // Pin untuk tombol 3
const int buttonPin4 = 5; // Pin untuk tombol 4
const int ledPin = 13;    // Pin untuk LED indikator

int dosis = 0;      // Variabel untuk menyimpan jumlah dosis
int kecepatan = 0;  // Variabel untuk menyimpan kecepatan

LiquidCrystal_I2C lcd(0x27, 20, 4); // Alamat I2C LCD 0x27, 20x4 karakter

void setup() {
  pinMode(buttonPin1, INPUT_PULLUP); // Set pin tombol 1 sebagai input dengan pull-up resistor
  pinMode(buttonPin2, INPUT_PULLUP); // Set pin tombol 2 sebagai input dengan pull-up resistor
  pinMode(buttonPin3, INPUT_PULLUP); // Set pin tombol 3 sebagai input dengan pull-up resistor
  pinMode(buttonPin4, INPUT_PULLUP); // Set pin tombol 4 sebagai input dengan pull-up resistor
  pinMode(ledPin, OUTPUT);           // Set pin LED sebagai output

  Serial.begin(9600); // Inisialisasi komunikasi serial
  lcd.init(); // Inisialisasi LCD
  lcd.backlight(); // Nyalakan latar belakang LCD
}

void loop() {
  // Baca status tombol 1
  if (digitalRead(buttonPin1) == LOW) {
    dosis++; // Tambah jumlah dosis jika tombol 1 ditekan
    Serial.print("Jumlah dosis: ");
    Serial.println(dosis);
    updateLCD(); // Perbarui tampilan LCD
    delay(200); // Delay untuk debounce
  }

  // Baca status tombol 2
  if (digitalRead(buttonPin2) == LOW) {
    kecepatan++; // Tambah kecepatan jika tombol 2 ditekan
    Serial.print("Kecepatan: ");
    Serial.println(kecepatan);
    updateLCD(); // Perbarui tampilan LCD
    delay(200); // Delay untuk debounce
  }

  // Baca status tombol 3
  if (digitalRead(buttonPin3) == LOW) {
    // Mulai sistem setelah pemilihan dosis dan kecepatan
    if (dosis > 0 && kecepatan > 0) {
      Serial.println("Memulai sistem...");
      digitalWrite(ledPin, HIGH); // Nyalakan LED indikator
      // TODO: Tambahkan kode untuk memulai sistem
    } else {
      Serial.println("Pilih dosis dan kecepatan terlebih dahulu");
    }
    delay(200); // Delay untuk debounce
  }

  // Baca status tombol 4
  if (digitalRead(buttonPin4) == LOW) {
    Serial.println("Emergency! Mematikan sistem...");
    digitalWrite(ledPin, LOW); // Matikan LED indikator
    // TODO: Tambahkan kode untuk menghentikan sistem darurat
    dosis = 0;     // Reset jumlah dosis
    kecepatan = 0; // Reset kecepatan
    updateLCD(); // Perbarui tampilan LCD
    delay(200);    // Delay untuk debounce
  }
}

void updateLCD() {
  lcd.clear(); // Bersihkan tampilan LCD
  lcd.setCursor(0, 0); // Set posisi kursor
  lcd.print("Dosis: "); // Tampilkan label
  lcd.print(dosis); // Tampilkan nilai dosis
  lcd.setCursor(0, 1); // Pindah ke baris berikutnya
  lcd.print("Kecepatan: "); // Tampilkan label
  lcd.print(kecepatan); // Tampilkan nilai kecepatan
}