#include<Keypad.h>
#include<LiquidCrystal_I2C.h>
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1', '2', '3', '+'},
{'4', '5', '6', '-'},
{'7', '8', '9', '.'},
{'*', '0', '=', '/'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad myKeypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(0x27, 20, 4);
int sw = 10;
boolean num1State = true;
String num1 = "";
String num2 = "";
float result ;
char op = ' ';
void setup() {
pinMode(sw, INPUT_PULLUP);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("ALI Calculator");
delay(1000);
Serial.begin(9600);
clr();
}
void loop() {
char Key = myKeypad.getKey();
if (Key != NO_KEY && (Key == '.' || Key == '1' || Key == '2' || Key == '3' || Key == '4' || Key == '5' || Key == '6' || Key == '7' || Key == '8' || Key == '9' || Key == '0')) {
if (num1State == true) {
num1 += Key; //num2 =num + Key;
lcd.print(Key);
}
else {
num2 += Key;//num2 =num + Key;
lcd.print(Key);
}
}
if (Key != NO_KEY && (Key == '+' || Key == '-' || Key == '*' || Key == '/')) {
if (num1State == true) {
op = Key;
num1State = false;
lcd.setCursor(0, 1);
lcd.print(op);
lcd.setCursor(0, 2);
}
}
if (Key != NO_KEY && Key == '=') {
if (op == '+') {
result = num1.toFloat() + num2.toFloat();
}
if (op == '-') {
result = num1.toFloat() - num2.toFloat();
}
if (op == '*') {
result = num1.toFloat() * num2.toFloat();
}
if (op == '/') {
result = num1.toFloat() / num2.toFloat();
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(num1);
lcd.print(op);
lcd.print(num2);
lcd.setCursor(0, 1);
lcd.print("=");
lcd.setCursor(0, 2);
lcd.print(result);
num1State = true;
}
int val = digitalRead(sw);
delay(100);
if (val == 1) {
clr();
}
}
void clr() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("");
lcd.setCursor(0, 1);
lcd.print("");
lcd.setCursor(0, 2);
lcd.print("");
lcd.setCursor(0, 0);
num1 = "";
num2 = "";
result = 0;
op = ' ';
}