#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const byte BARIS = 4;
const byte KOLOM = 4;
char tombol[BARIS][KOLOM] = {
{'1', '2', '3', '+'},
{'4', '5', '6', '-'},
{'7', '8', '9', '*'},
{'C', '0', '=', '/'}
};
byte pinBaris[BARIS] = {9, 8, 7, 6};
byte pinKolom[KOLOM] = {5, 4, 3, 2};
Keypad keypad = Keypad(makeKeymap(tombol), pinBaris, pinKolom, BARIS, KOLOM);
float angka1 = 0, angka2 = 0;
char operasi = ' ';
bool operasiDipilih = false;
bool tampilkanHasil = false;
void setup() {
lcd.init();
lcd.backlight();
lcd.print("Calculator");
}
void loop() {
char key = keypad.getKey();
if (key) {
if (tampilkanHasil) {
lcd.clear();
lcd.print("Calculator");
tampilkanHasil = false;
angka1 = angka2 = 0;
operasi = ' ';
operasiDipilih = false;
}
if (key >= '0' && key <= '9') {
if (!operasiDipilih) {
angka1 = angka1 * 10 + (key - '0');
lcd.setCursor(0, 1);
lcd.print(angka1);
} else {
angka2 = angka2 * 10 + (key - '0');
lcd.setCursor(0, 1);
lcd.print(angka1);
lcd.print(operasi);
lcd.print(angka2);
}
} else if (key == 'C') {
angka1 = angka2 = 0;
operasi = ' ';
operasiDipilih = false;
lcd.clear();
lcd.print("Calculator");
} else if (key == '+' || key == '-' || key == '*' || key == '/') {
if (!operasiDipilih) {
operasi = key;
operasiDipilih = true;
lcd.setCursor(0, 1);
lcd.print(angka1);
lcd.print(operasi);
}
} else if (key == '=') {
float hasil = 0;
bool error = false;
switch (operasi) {
case '+': hasil = angka1 + angka2; break;
case '-': hasil = angka1 - angka2; break;
case '*': hasil = angka1 * angka2; break;
case '/':
if (angka2 != 0) {
hasil = angka1 / angka2;
} else {
error = true;
}
break;
}
lcd.clear();
if (error) {
lcd.print("Error: Div0");
} else {
lcd.print("Hasil: ");
lcd.print(hasil);
angka1 = hasil;
}
delay(2000);
tampilkanHasil = true;
}
}
}