#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(0x27, 16, 2);
int num1;
int num2;
char ch;
String wrt = "";
bool wrtres = true;
bool input = true;
bool num1i = false;
bool num2i = false;
bool chi = false;
int res;
char currmode;
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
}
void loop() {
char keypad = customKeypad.getKey();
lcd.setCursor(1, 0);
lcd.print(num1);
lcd.print(" ");
lcd.setCursor(6, 0);
lcd.print(ch);
lcd.print(" ");
lcd.setCursor(12, 0);
lcd.print(num2);
lcd.print(" ");
lcd.setCursor(2, 1);
lcd.print("= ");
lcd.print(res);
lcd.print(" ");
if(keypad){
if(!num1i && !num2i && !chi){
if(keypad >= '0' && keypad <= '9'){
wrt += keypad;
num1 = wrt.toInt();
}
else{
switch(keypad){
case 'A':
ch = '+';
chi = true;
num1i = true;
wrt = "";
break;
case 'B':
ch = '-';
chi = true;
num1i = true;
wrt = "";
break;
case 'C':
ch = '*';
chi = true;
num1i = true;
wrt = "";
break;
case 'D':
ch = '/';
chi = true;
num1i = true;
wrt = "";
break;
}
}
}
else if(num1 && chi && !num2i){
if(keypad >= '0' && keypad <= '9'){
wrt += keypad;
num2 = wrt.toInt();
}
else{
switch(keypad){
case '#':
switch(ch){
case '+':
res = num1 + num2;
num2i = true;
wrt = "";
break;
case '-':
res = num1 - num2;
num2i = true;
wrt = "";
break;
case '*':
res = num1 * num2;
num2i = true;
wrt = "";
break;
case '/':
res = num1 / num2;
num2i = true;
wrt = "";
break;
}
break;
}
}
}
switch(keypad){
case '*':
num2i = false;
num1i = false;
chi = false;
num1 = 0;
num2 = 0;
ch = ' ';
res = 0;
break;
}
}
Serial.println(keypad);
}