Arduino calculator

Materials:-
  • Arduino uno
  • keypad
  • LCD display
  • 10k potentiometer
  • breadboard
Diagram:-

connections:-

Vss = Arduino GND
VDD = Arduino 5V
V0 = Potentiometer center pin
RS = Digital pin  8
RW = Arduino GND
E = Digital pin 9
D4 = Arduino digital pin 10
D5  = Arduino digital pin 11
D6 = Arduino digital pin 12
D7 = Arduino digital pin 13
A = Arduino  5V
K = Arduino GND
keypad left pin to right=Arduino digital pin 0 to 7

code:-

//https://mrarduinoprojects.blogspot.com
include <LiquidCrystal.h>
#include <Keypad.h>
const byte ROWS = 4; // Four rows
const byte COLS = 4; // four columns

// Define the Keymap
char keys[ROWS][COLS] = {

  {'1','2','3','D'},

  {'4','5','6','C'},

  {'7','8','9','B'},

  {'*','0','#','A'}

};

byte rowPins[ROWS] = { 0, 1, 2, 3 };// Connect keypad ROWS these Arduino pins.
byte colPins[COLS] = { 4, 5, 6, 7 }; // Connect keypad COLUMNS

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //  Create the Keypad

const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

 long Num1,Num2,Number;
 char key,action;
 boolean result = false;

void setup() {
  lcd.begin(16, 2); // 16*2 LCD display
   delay(2000);
    lcd.clear();
}

void loop() {

key = kpd.getKey();

if (key!=NO_KEY)
DetectButtons();

if (result==true)
CalculateResult();

DisplayResult();
}

void DetectButtons()
{
     lcd.clear();
    if (key=='*')
    {Serial.println ("Button Cancel"); Number=Num1=Num2=0; result=false;}

     if (key == '1') //If Button 1 is pressed
    {Serial.println ("Button 1");
    if (Number==0)
    Number=1;
    else
    Number = (Number*10) + 1;
    }

     if (key == '4') //If Button 4 is pressed
    {Serial.println ("Button 4");
    if (Number==0)
    Number=4;
    else
    Number = (Number*10) + 4;
    }

     if (key == '7') //If Button 7 is pressed
    {Serial.println ("Button 7");
    if (Number==0)
    Number=7;
    else
    Number = (Number*10) + 7;
    }


    if (key == '0')
    {Serial.println ("Button 0"); //Button 0 is Pressed
    if (Number==0)
    Number=0;
    else
    Number = (Number*10) + 0;
    }

     if (key == '2') //Button 2 is Pressed
    {Serial.println ("Button 2");
     if (Number==0)
    Number=2;
    else
    Number = (Number*10) + 2;
    }

     if (key == '5')
    {Serial.println ("Button 5");
     if (Number==0)
    Number=5;
    else
    Number = (Number*10) + 5;
    }

     if (key == '8')
    {Serial.println ("Button 8");
     if (Number==0)
    Number=8;
    else
    Number = (Number*10) + 8;
    }


    if (key == '#')
    {Serial.println ("Button Equal");
    Num2=Number;
    result = true;
    }

     if (key == '3')
    {Serial.println ("Button 3");
     if (Number==0)
    Number=3;
    else
    Number = (Number*10) + 3;
    }

     if (key == '6')
    {Serial.println ("Button 6");
    if (Number==0)
    Number=6;
    else
    Number = (Number*10) + 6;
    }

     if (key == '9')
    {Serial.println ("Button 9");
    if (Number==0)
    Number=9;
    else
    Number = (Number*10) + 9;
    }

      if (key == 'A' || key == 'B' || key == 'C' || key == 'D')
  {
    Num1 = Number;
    Number =0;
    if (key == 'A')
    {Serial.println ("Devesion"); action = '/';}
     if (key == 'B')
    {Serial.println ("Subtraction"); action = '-'; }
     if (key == 'C')
    {Serial.println ("Multiplication"); action = '*';}
     if (key == 'D')
    {Serial.println ("Addition"); action = '+';}

    delay(100);
  }

}

void CalculateResult()
{
  if (action=='+')
    Number = Num1+Num2;

  if (action=='-')
    Number = Num1-Num2;

  if (action=='*')
    Number = Num1*Num2;

  if (action=='/')
    Number = Num1/Num2;
}

void DisplayResult()
{
  lcd.setCursor(0, 0);
  lcd.print(Num1); lcd.print(action); lcd.print(Num2);

  if (result==true)
  {lcd.print(" ="); lcd.print(Number);} //Display the result

  lcd.setCursor(0, 1);
  lcd.print(Number); //Display the result
}