#include <LiquidCrystal.h>
#include <Keypad.h>
int rs=12, en=11, d4=5, d5=4, d6=3, d7=2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
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'}
};
String num1 = "";
String num2 = "";
int x = 1;
int i = 0;
char op='x';
byte rowPins[ROWS] = {21, 20, 19, 18};
byte colPins[COLS] = {17, 16, 15, 14};
Keypad keys = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup() {
lcd.begin(16, 2);
}
void loop() {
char key = keys.getKey();
if(key)
{
lcd.setCursor(i,0);
if(key=='A')
{
lcd.print('+');
}
else if(key=='B')
{
lcd.print('-');
}
else if(key=='C')
{
lcd.print('*');
}
else if(key=='D')
{
lcd.print('/');
}
else
{
lcd.print(key);
}
i++;
if(key=='*')
{
lcd.clear();
num1="";
num2="";
x=1;
i=0;
}
if(key!='A'&&key!='B'&&key!='C'&&key!='D'&&key!='#'&&key!='*'&&x==1)
{
num1=num1+key;
}
if(key=='A'||key=='B'||key=='C'||key=='D'||key=='*')
{
x=2;
op=key;
}
if(key!='A'&&key!='B'&&key!='C'&&key!='D'&&key!='*'&&x==2)
{
num2=num2+key;
}
if(key=='#')
{
x=3;
lcd.clear();
}
}
if(x==3)
{
long int n1 = num1.toInt();
long int n2 = num2.toInt();
if(op=='A')
{
lcd.setCursor(0,0);
long sum = n1+n2;
String s = String(sum);
lcd.print(s);
char newkey=keys.waitForKey();
lcd.clear();
num1="";
num2="";
x=1;
i=0;
lcd.setCursor(i,0);
if(newkey!='*'&&newkey!='#')
{
num1=num1+newkey;
lcd.print(newkey);
i++;
}
else
{
lcd.clear();
lcd.setCursor(0,0);
}
}
if(op=='B')
{
lcd.setCursor(0,0);
long sum = n1-n2;
String s = String(sum);
lcd.print(s);
char newkey=keys.waitForKey();
lcd.clear();
num1="";
num2="";
x=1;
i=0;
lcd.setCursor(i,0);
if(newkey!='*'&&newkey!='#')
{
num1=num1+newkey;
lcd.print(newkey);
i++;
}
else
{
lcd.clear();
lcd.setCursor(0,0);
}
}
if(op=='C')
{
lcd.setCursor(0,0);
long sum = n1*n2;
String s = String(sum);
lcd.print(s);
char newkey=keys.waitForKey();
lcd.clear();
num1="";
num2="";
x=1;
i=0;
lcd.setCursor(i,0);
if(newkey!='*'&&newkey!='#')
{
num1=num1+newkey;
lcd.print(newkey);
i++;
}
else
{
lcd.clear();
lcd.setCursor(0,0);
}
}
if(op=='D')
{
lcd.setCursor(0,0);
if(n2!=0)
{
long sum = n1/n2;
String s = String(sum);
lcd.print(s);
}
else
{
lcd.print("ERROR-div/0");
}
char newkey=keys.waitForKey();
lcd.clear();
num1="";
num2="";
x=1;
i=0;
lcd.setCursor(i,0);
if(newkey!='*'&&newkey!='#')
{
num1=num1+newkey;
lcd.print(newkey);
i++;
}
else
{
lcd.clear();
lcd.setCursor(0,0);
}
}
}
}