#include <IRremote.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define PIN_RECEIVER 2
IRrecv receiver(PIN_RECEIVER);
LiquidCrystal_I2C lcd(0x27, 16, 2);
int firstNumber = 0;
int secondNumber = 0;
int inputPhase = 1;
bool additionReady = false;
void setup()
{
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Nilai A:");
lcd.setCursor(0, 1);
lcd.print("Nilai B:");
receiver.enableIRIn();
}
void loop()
{
if (receiver.decode()) {
processIR();
receiver.resume();
}
}
void processIR()
{
int value = receiver.decodedIRData.command;
switch (value) {
case 48: // Tombol angka 1
handleNumberInput(1);
break;
case 24: // Tombol angka 2
handleNumberInput(2);
break;
case 122: // Tombol angka 3
handleNumberInput(3);
break;
case 16: // Tombol angka 4
handleNumberInput(4);
break;
case 56: // Tombol angka 5
handleNumberInput(5);
break;
case 90: // Tombol angka 6
handleNumberInput(6);
break;
case 66: // Tombol angka 7
handleNumberInput(7);
break;
case 74: // Tombol angka 8
handleNumberInput(8);
break;
case 82: // Tombol angka 9
handleNumberInput(9);
break;
case 104: // Tombol angka 0
handleNumberInput(0);
break;
case 2: // Tombol PLUS
if (inputPhase == 2) {
additionReady = true;
performAddition();
}
break;
case 176: // Tombol C (Clear)
clearInputs();
break;
default:
lcd.setCursor(0, 1);
lcd.print("Unknown command");
break;
}
}
void handleNumberInput(int num) {
if (inputPhase == 1) {
// Input untuk bilangan pertama
firstNumber = firstNumber * 10 + num;
lcd.setCursor(9, 0);
lcd.print(firstNumber);
} else if (inputPhase == 2) {
// Input untuk bilangan kedua
secondNumber = secondNumber * 10 + num;
lcd.setCursor(9, 1);
lcd.print(secondNumber);
}
// Jika sedang input bilangan pertama dan menekan angka, pindah ke bilangan kedua
if (firstNumber != 0 && inputPhase == 1) {
inputPhase = 2;
}
}
void performAddition() {
int result = firstNumber + secondNumber;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Total: ");
lcd.print(result);
}
void clearInputs() {
firstNumber = 0;
secondNumber = 0;
inputPhase = 1;
additionReady = false;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Nilai A:");
lcd.setCursor(0, 1);
lcd.print("Nilai B:");
}