/*Wap to interface LCD and keypad (4 X 4) , to exhibit the functionality of
a basic calculator.
1 2 3 4
5 6 7 8
9 0 + -
/ * Clear enter */
#include <Keypad.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(0, 1, 2, 3, 4, 5);
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1', '2', '3', '4'},
{'5', '6', '7', '8'},
{'9', '0', '+', '-'},
{'/', '*', 'C', 'E'}
};
byte rowPins[ROWS] = {13, 12, 11, 10};
byte colPins[COLS] = {9, 8, 7, 6};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
long num1 = 0;
long num2 = 0;
double total = 0;
void setup() {
lcd.begin(16, 2);
lcd.print("Enter a Number");
delay(1000);
lcd.clear();
}
void loop() {
char value = keypad.getKey();
switch (value) {
case '0' ... '9':
lcd.setCursor(0, 0);
num1 = num1 * 10 + (value - '0');
lcd.print(num1);
break;
case '+':
num1 = (total != 0 ? total : num1);
lcd.print('+');
num2 = secondNumber();
total = num1 + num2;
lcd.setCursor(0, 2);
lcd.print(total);
num1 = num2 = 0;
break;
case '-':
num1 = (total != 0 ? total : num1);
lcd.print('-');
num2 = secondNumber();
total = num1 - num2;
lcd.setCursor(0, 2);
lcd.print(total);
num1 = num2 = 0;
break;
case '*':
num1 = (total != 0 ? total : num1);
lcd.print('*');
num2 = secondNumber();
total = num1 * num2;
lcd.setCursor(0, 2);
lcd.print(total);
num1 = num2 = 0;
break;
case '/':
num1 = (total != 0 ? total : num1);
lcd.print('/');
num2 = secondNumber();
lcd.setCursor(0, 2);
num2 == 0 ? lcd.print("Invalid") :
total = (float)num1 / (float)num2;
lcd.print(total);
num1 = num2 = 0;
break;
case 'C':
total = num1 = num2 = 0;
lcd.clear();
break;
}
}
long secondNumber() {
while (1) {
char value = keypad.getKey();
if (value >= '0' && value <= '9') {
num2 = num2 * 10 + (value - '0');
lcd.setCursor(7, 0);
lcd.print(num2);
}
if (value == 'E') break;
}
return num2;
}