#include<Keypad.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[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 customKeypad = Keypad(makeKeymap(hexaKeys),rowPins,colPins,ROWS,COLS);
char oper;
int No = 0;
int lcd_row = 0;
bool clear_lcd = 0;
float number1 = 0;
float number2 = 0;
String number;
void operated_number(int number1,int number2,char oper);
void setup() {
lcd.init();
Serial.begin(9600);
lcd.backlight();
number = String("\0");
}
void loop() {
char customKey = customKeypad.getKey();
if(customKey){
Serial.println(customKey);
switch(customKey){
case'+':
oper = '+';
number1 = number.toFloat();
No = 0;
lcd_row = 1;
lcd.setCursor(0,lcd_row);
lcd_row = 2;
lcd.print(oper);
number = "";
break;
case'-':
oper = '-';
number1 = number.toFloat();
No = 0;
lcd_row = 1;
lcd.setCursor(0,lcd_row);
lcd_row = 2;
lcd.print(oper);
number = "";
break;
case'*':
oper = '*';
number1 = number.toFloat();
No = 0;
lcd_row = 1;
lcd.setCursor(0,lcd_row);
lcd_row = 2;
lcd.print(oper);
number = "";
break;
case'/':
oper = '/';
number1 = number.toFloat();
No = 0;
lcd_row = 1;
lcd.setCursor(0,lcd_row);
lcd_row = 2;
lcd.print(oper);
number = "";
break;
case'=':
number2=number.toFloat();
number = "";
operated_number( number1, number2, oper);
number1 = 0;
number = String("\0");
number2 = 0;
break;
default:
if(clear_lcd == 1){
Serial.println("clearing lcd");
lcd.clear();
clear_lcd = 0;
lcd_row = 0;
No = 0;
}
number += customKey;
lcd.setCursor(0,lcd_row);
lcd.print(number);
break;
}
}
}
void operated_number(float number1,float number2,char oper){
Serial.println(number1);
Serial.println(oper);
Serial.println(number2);
clear_lcd = 1;
switch(oper){
case '+':
Serial.println("here");
float plus=number1+number2;
Serial.println(plus);
lcd_row = 3;
lcd.setCursor(0,lcd_row);
lcd.print(plus);
break;
case '-':
Serial.println("here");
float subtract=number1-number2;
Serial.println(subtract);
lcd_row = 3;
lcd.setCursor(0,lcd_row);
lcd.print(subtract);
break;
case '*':
Serial.println("here");
float multiple=number1*number2;
Serial.println(multiple);
lcd_row = 3;
lcd.setCursor(0,lcd_row);
lcd.print(multiple);
break;
case '/':
Serial.println("here");
float divide=number1/number2;
Serial.println(divide);
lcd_row = 3;
lcd.setCursor(0,lcd_row);
lcd.print(divide);
break;
default:
break;
}
}