#include <Keypad.h>
#include <LiquidCrystal.h>
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Three columns
// Define the Keymap
char keys[ROWS][COLS] = {
{ '1', '2', '3', 'D' },
{ '4', '5', '6', 'C' },
{ '7', '8', '9', 'B' },
{ '*', '0', '#', 'A' }
};
byte rowPins[ROWS] = { 0, 1, 2, 3 }; // Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte colPins[COLS] = { 4, 5, 6, 7 }; // Connect keypad COL0, COL1 and COL2 to these Arduino pins.
Keypad kpd = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); // Create the Keypad
const int rs = 8,
en = 9,
d4 = 10,
d5 = 11,
d6 = 12,
d7 = 13; //Pins to which LCD is connected
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
long Num1, Num2, Number;
char key, action;
boolean result = false;
void setup() {
lcd.begin(16, 2); //We are using a 16*2 LCD display
lcd.print("DIY Calculator"); //Display a intro message
lcd.setCursor(0, 1); // set the cursor to column 0, line 1
lcd.print("-CircuitDigest"); //Display a intro message
delay(2000); //Wait for display to show info
lcd.clear(); //Then clean it
}
void loop() {
key = kpd.getKey(); //storing pressed key value in a char
if (key != NO_KEY)
DetectButtons();
if (result == true)
CalculateResult();
DisplayResult();
}
void DetectButtons() {
lcd.clear(); //Then clean it
if (key == '*') //If cancel Button is pressed
{ Serial.println("Button Cancel");
Number = Num1 = Num2 = 0;
action=' ';
result = false; }
if (key == '1') //If Button 1 is pressed
{
Serial.println("Button 1");
if (Number == 0)
Number = 1;
else
Number = (Number * 10) + 1; //Pressed twice
}
if (key == '4') //If Button 4 is pressed
{
Serial.println("Button 4");
if (Number == 0)
Number = 4;
else
Number = (Number * 10) + 4; //Pressed twice
}
if (key == '7') //If Button 7 is pressed
{
Serial.println("Button 7");
if (Number == 0)
Number = 7;
else
Number = (Number * 10) + 7; //Pressed twice
}
if (key == '0') {
Serial.println("Button 0"); //Button 0 is Pressed
if (Number == 0)
Number = 0;
else
Number = (Number * 10) + 0; //Pressed twice
}
if (key == '2') //Button 2 is Pressed
{
Serial.println("Button 2");
if (Number == 0)
Number = 2;
else
Number = (Number * 10) + 2; //Pressed twice
}
if (key == '5') {
Serial.println("Button 5");
if (Number == 0)
Number = 5;
else
Number = (Number * 10) + 5; //Pressed twice
}
if (key == '8') {
Serial.println("Button 8");
if (Number == 0)
Number = 8;
else
Number = (Number * 10) + 8; //Pressed twice
}
if (key == '#') {
Serial.println("Button Equal");
Num2 = Number;
result = true;
}
if (key == '3') {
Serial.println("Button 3");
if (Number == 0)
Number = 3;
else
Number = (Number * 10) + 3; //Pressed twice
}
if (key == '6') {
Serial.println("Button 6");
if (Number == 0)
Number = 6;
else
Number = (Number * 10) + 6; //Pressed twice
}
if (key == '9') {
Serial.println("Button 9");
if (Number == 0)
Number = 9;
else
Number = (Number * 10) + 9; //Pressed twice
}
if (key == 'A' || key == 'B' || key == 'C' || key == 'D') //Detecting Buttons on Column 4
{
Num1 = Number;
Number = 0;
if (key == 'A') { Serial.println("Addition");
action = '+'; }
if (key == 'B') { Serial.println("Subtraction");
action = '-'; }
if (key == 'C') { Serial.println("Multiplication");
action = '*'; }
if (key == 'D') { Serial.println("Devesion");
action = '/'; }
delay(100);
}
}
void CalculateResult() {
if (action == '+')
Number = Num1 + Num2;
if (action == '-')
Number = Num1 - Num2;
if (action == '*')
Number = Num1 * Num2;
if (action == '/')
Number = Num1 / Num2;
}
void DisplayResult() {
lcd.setCursor(0, 0); // set the cursor to column 0, line 1
lcd.print(Num1);
lcd.print(action);
lcd.print(Num2);
if (result == true) { lcd.print(" =");
if (Number > 100000000){
int remainder = Number % 100000000;
lcd.print(remainder);
lcd.print("e1");
} else {
lcd.print(Number);
}
} //Display the result
lcd.setCursor(0, 1); // set the cursor to column 0, line 1
//lcd.print(Number); //Display the result
if (Number > 100000000){
int remainder = Number % 100000000;
lcd.print(remainder);
lcd.print("e1");
} else {
lcd.print(Number);
}
}