#include <Keypad.h>
#include <LiquidCrystal.h>
const int ROW_NUM = 4; //four rows
const int COLUMN_NUM = 4; //four columns
const int rs = 13, en = 12, d4 = 11, d5 = 10, d6 = 9, d7 = 8;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
char keys[ROW_NUM][COLUMN_NUM] = {
{'1', '2', '3', '+'},
{'4', '5', '6', '-'},
{'7', '8', '9', '*'},
{'=', '0', '.', '/'}
};
byte pin_rows[ROW_NUM] = {7, 6, 5, 4}; //connect to the row pinouts of the keypad
byte pin_column[COLUMN_NUM] = {3, 2, A1, A2}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM);
String input = "";
float num1, num2;
char op;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
}
void loop() {
char key = keypad.getKey();
if (key) {
if (key >= '0' && key <= '9' || key == '.') {
input += key;
lcd.print(key);
} else if (key == '+' || key == '-' || key == '*' || key == '/') {
num1 = input.toFloat();
op = key;
input = "";
lcd.print(key);
} else if (key == '=') {
num2 = input.toFloat();
float result;
switch (op) {
case '+': result = num1 + num2; break;
case '-': result = num1 - num2; break;
case '*': result = num1 * num2; break;
case '/':
if (num2 != 0) {
result = num1 / num2;
} else {
lcd.clear();
lcd.print("Error: Div by 0");
return;
}
break;
}
lcd.clear();
lcd.print(result);
input = "";
}
}
}