#include <LiquidCrystal.h>
#include<Keypad.h>
LiquidCrystal lcd(12,11,10,9,8,7);
const byte KEYPAD_ROWS=4;
const byte KEYPAD_COLS=4;
byte rowPins[KEYPAD_ROWS]={5,4,3,2};
byte colPins[KEYPAD_COLS]={A3,A2,A1,A0};
char keys[KEYPAD_ROWS][KEYPAD_COLS]={
{'1','2','3','+'},
{'4','5','6','-'},
{'7','8','9','*'},
{'.','0','=','/'}
};
const int RESET_BUTTON_PIN = 6;
const int pushbuttonRESET=false;
bool resetButtonState = false;
bool lastResetButtonState = false;
Keypad keypad =Keypad(makeKeymap(keys),rowPins,colPins,KEYPAD_ROWS,KEYPAD_COLS);
uint64_t value=0;
String inputBuffer = "";
void CALC_DISPLAY(){
lcd.print("HCL TECH");
lcd.setCursor(0,1);
String message="Calculator";
for(byte i=0;i<message.length();i++){
lcd.print(message[i]);
delay(50);
}
delay(500);
}
void updateCursor(){
if(millis() /250 % 2==0){
lcd.cursor();
}
else{
lcd.noCursor();
}
}
void setup() {
Serial.begin(115200);
lcd.begin(16,2);
pinMode(pushbuttonRESET, INPUT_PULLUP);
CALC_DISPLAY();
lcd.clear();
lcd.cursor();
lcd.setCursor(1,0);
}
void processInput(String input)
{
int result = 0;
char operation;
int numIndex = 0;
for (int i = 0; i < input.length(); i++)
{
if (isdigit(input[i]))
{
numIndex++;
}
else
{
operation = input[i];
break;
}
}
int num1 = input.substring(0, numIndex).toInt();
int num2 = input.substring(numIndex + 1).toInt();
switch (operation)
{
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
if (num2 != 0)
{
result = num1 / num2;
}
else
{
lcd.print("Error: Divide by zero");
return;
}
break;
default:
lcd.print("Error: Invalid operation");
return;
}
lcd.setCursor(0, 1);
lcd.print(result);
}
void checkResetButton()
{
resetButtonState = digitalRead(RESET_BUTTON_PIN);
if (resetButtonState != lastResetButtonState && resetButtonState == LOW)
{
// Reset button is pressed
lcd.clear();
inputBuffer = "";
}
lastResetButtonState = resetButtonState;
}
void loop()
{
char key = keypad.getKey();
if (key != NO_KEY)
{
if (key == '=')
{
processInput(inputBuffer);
inputBuffer = "";
}
else
{
inputBuffer += key;
lcd.print(key);
}
}
checkResetButton();
}