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

LiquidCrystal_I2C lcd(0x3F, 20, 4);  // Alamat I2C dan ukuran LCD 20x4
const int merahLED = 9;  // Pin LED merah
const int hijauLED = 10;  // Pin LED hijau
const int durasiSoal = 20000;  // Durasi soal dalam milidetik (20 detik)

const int ROW_NUM    = 4; // jumlah baris keypad
const int COLUMN_NUM = 4; // jumlah kolom keypad

char keys[ROW_NUM][COLUMN_NUM] = {
 {'1','2','3','A'},
 {'4','5','6','B'},
 {'7','8','9','C'},
 {'*','0','#','D'}
};

byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; // sambungkan ke pin baris keypad
byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; // sambungkan ke pin kolom keypad

Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM);

int level = 1; // Tambahkan ini untuk mengatasi masalah level yang tidak dideklarasikan

void setup() {
  lcd.begin(20, 4);  // Inisialisasi LCD
  pinMode(merahLED, OUTPUT);
  pinMode(hijauLED, OUTPUT);
}

void loop() {
  int num1 = random(1, pow(10, level));  // Angka pertama (1 hingga 10^level)
  int num2 = random(1, pow(10, level));  // Angka kedua (1 hingga 10^level)
  int operasi = random(4);  // 0: +, 1: -, 2: *, 3: /

  lcd.clear();  // Bersihkan tampilan LCD
  lcd.print(num1);
  switch(operasi) {
    case 0: lcd.print(" + "); break;
    case 1: lcd.print(" - "); break;
    case 2: lcd.print(" * "); break;
    case 3: lcd.print(" / "); break;
  }
  lcd.print(num2);

  int jawabanBenar;
  switch(operasi) {
    case 0: jawabanBenar = num1 + num2; break;
    case 1: jawabanBenar = num1 - num2; break;
    case 2: jawabanBenar = num1 * num2; break;
    case 3: jawabanBenar = num1 / num2; break;
  }

  unsigned long waktuMulai = millis();  // Ambil waktu mulai soal

  while (millis() - waktuMulai < durasiSoal) {
    char tombol = keypad.getKey(); // membaca tombol yang ditekan

    if (tombol != NO_KEY) { // jika tombol ditekan
      // Tambahkan tombol ke jawabanPengguna (mungkin perlu mengonversi dari karakter ke integer)
      // ...
    }
  }

  // Jika jawaban benar
  // if (jawabanPengguna == jawabanBenar) {
  //   digitalWrite(hijauLED, HIGH);
  //   delay(1000);  // Tahan LED hijau selama 1 detik
  //   digitalWrite(hijauLED, LOW);
  // }
  // else {  // Jika jawaban salah
  //   digitalWrite(merahLED, HIGH);
  //   delay(1000);  // Tahan LED merah selama 1 detik
  //   digitalWrite(merahLED, LOW);
  // }
}

// Fungsi untuk membaca keypad
// (Anda perlu menambahkan kode ini menggunakan library Keypad)
// int bacaKeypad() {
//   // ...
// }
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
keypad1:R1
keypad1:R2
keypad1:R3
keypad1:R4
keypad1:C1
keypad1:C2
keypad1:C3
keypad1:C4
led1:A
led1:C
led2:A
led2:C