#include <LiquidCrystal.h>
#include <Keypad.h>
LiquidCrystal lcd(13, 12, 11, 10, 1, 0);
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Four columns
// Define the Keymap
char keys[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 kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
long Num1,Num2,Number;
char key,symbol;
boolean result = false;
void setup()
{
lcd.print("Arduino Calculator");
lcd.setCursor(0, 1); // set the cursor to column 0, line 1
delay(5000); // Wait for display to show info
lcd.clear();
}
void loop()
{
key = kpd.getKey(); //storing pressed key value in a char format
if (key!=NO_KEY)
button();
if (result==true)
Calculations();
DisplayResult();
}
void button()
{
lcd.clear();
if (key=='*') //If cancel is pressed
{
lcd.print("CLEAR"); Number=Num1=Num2=0; result=false;
Serial.println("CLEAR");
}
if (key == '1') //If 1 is pressed
{
lcd.print("1");
Serial.println("1");
if (Number==0)
Number=1;
else
Number = (Number*10) + 1; //Pressed twice
}
if (key == '4') //If 4 is pressed
{
lcd.print("4");
Serial.println("4");
if (Number==0)
Number=4;
else
Number = (Number*10) + 4; //Pressed twice
}
if (key == '7') //If 7 is pressed
{lcd.print("7");
Serial.println("7");
if (Number==0)
Number=7;
else
Number = (Number*10) + 7; //Pressed twice
}
if (key == '0')
{lcd.print("0"); //0 is Pressed
Serial.println("0");
if (Number==0)
Number=0;
else
Number = (Number*10) + 0; //Pressed twice
}
if (key == '2') //2 is Pressed
{lcd.print("2");
Serial.println("2");
if (Number==0)
Number=2;
else
Number = (Number*10) + 2; //Pressed twice
}
if (key == '5')
{lcd.print("5");
if (Number==0)
Number=5;
else
Number = (Number*10) + 5; //Pressed twice
}
if (key == '8')
{lcd.print("8");
Serial.println("8");
if (Number==0)
Number=8;
else
Number = (Number*10) + 8; //Pressed twice
}
if (key == '#')
{lcd.print("=");
Serial.println("=");
Num2=Number;
result = true;
}
if (key == '3')
{lcd.print("3");
Serial.println("3");
if (Number==0)
Number=3;
else
Number = (Number*10) + 3; //Pressed twice
}
if (key == '6')
{lcd.print("6");
Serial.println("6");
if (Number==0)
Number=6;
else
Number = (Number*10) + 6; //Pressed twice
}
if (key == '9')
{lcd.print("9");
Serial.println("9");
if (Number==0)
Number=9;
else
Number = (Number*10) + 9; //Pressed twice
}
if (key == 'A' || key == 'B' || key == 'C' || key == 'D')
{
Num1 = Number;
Number =0;
if (key == 'A')
{
lcd.print("+");
Serial.println("1");
symbol = '+';
}
if (key == 'B')
{
lcd.print("-");
Serial.println("-");
symbol = '-';
}
if (key == 'C')
{
lcd.print("*");
Serial.println("*");
symbol = '*';
}
if (key == 'D')
{
lcd.print("/");
Serial.println("/");
symbol = '/';
}
delay(100);
}
}
void Calculations()
{
if (symbol=='+')
Number = Num1+Num2;
if (symbol=='-')
Number = Num1-Num2;
if (symbol=='*')
Number = Num1*Num2;
if (symbol=='/')
Number = Num1/Num2;
}
void DisplayResult()
{
lcd.setCursor(0, 0);
lcd.print(Num1); lcd.print(symbol); lcd.print(Num2);
if (result==true)
{
lcd.print(" ="); lcd.print(Number);//Display the result
}
lcd.setCursor(0, 1);
lcd.print(Number); //Display the result
}