#include <Keypad.h>
#include <LiquidCrystal.h>
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'7','8','9','D'},
{'4','5','6','C'},
{'1','2','3','B'},
{'*','0','#','A'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad kpd = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
long num1, num2, number;
char key, op;
boolean result = false;
void setup() {
lcd.begin(16, 2);
lcd.print("Arduino Calculator");
lcd.setCursor(0, 1);
lcd.print("by Rahul");
delay(2000);
lcd.clear();
}
void loop() {
key = kpd.getKey();
if (key != NO_KEY && (key == '1' || key == '2' || key == '3' || key == '4' || key == '5' || key == '6' || key == '7' || key == '8' || key == '9' || key == '0')) {
if (result == false) {
number = number * 10 + (key - '0');
lcd.print(key);
}
else {
num2 = num2 * 10 + (key - '0');
lcd.print(key);
}
}
// Check if the key is an operation
if (key == 'A' || key == 'B' || key == 'C' || key == 'D') {
num1 = number;
number = 0;
if (key == 'A') {
op = '+';
}
if (key == 'B') {
op = '-';
}
if (key == 'C') {
op = '*';
}
if (key == 'D') {
op = '/';
}
lcd.print(op);
}
if (key == '#') {
num2 = number;
result = true;
lcd.print("=");
}
if (key == '*') {
num1 = num2 = number = 0;
result = false;
lcd.clear();
}
if (result == true) {
switch (op) {
case '+':
number = num1 + num2;
break;
case '-':
number = num1 - num2;
break;
case '*':
number = num1 * num2;
break;
case '/':
number = num1 / num2;
break;
}
lcd.print(number);
}
}