Week 15 – Arduino Calculator using 4×4 Keypad

Arduino Calculator using 4×4 Keypad


Programming is always fun and Arduino is a wonderful platform if you are just getting started with Embedded programming. In this tutorial we will build our own calculator with Arduino. The values can be sent in through a keypad (4×4 keypad) and result can be viewed on a LCD screen (16×2 Dot-matrix). This calculator could perform simple operations like Addition, Subtraction, Multiplication and Division with whole numbers. But once you understand the concept you can implement even scientific functions with Arduino’s built in functions.

At the end of this project you will know how to use a 16×2 LCD and Keypad with Arduino and also how easy it is to program for them using the readily available libraries. You will also understand how to program your Arduino for accomplishing a particular task.


Materials Required:
⦁ Arduino Uno (Any version will work)
⦁ 16×2 LCD Display
⦁ 4×4 Keypad
⦁ 9V Battery
⦁ Breadboard and Connecting wires

The complete circuit diagram of this Arduino Calculator Project is given above. The +5V and ground connection shown in the circuit diagram can be obtained from the 5V and ground pin of the Arduino. The Arduino itself can be powered from your laptop or through the DC jack using a 12V adapter or 9V battery.
We are operating the LCD in 4-bit mode with Arduino so only the last four data bits of the LCD is connected to Arduino. The Keyboard will have 8 output pins which have to be connected from pin 0 to pin 7 as shown above. You can use the following connection table to verify your connection with Arduino, you can also check 4×4 Keypad interfacing with Arduino.

Arduino Pin Name:Connected to:
D01st pin of the keyboard
D12nd pin of the keyboard
D23rd pin of the keyboard
D34th pin of the keyboard
D45th pin of the keyboard
D56th pin of the keyboard
D67th pin of the keyboard
D78th pin of the keyboard
D8Register select pin of LCD (pin 4)
D9Enable pin of LCD (pin 6)
D10Data pin 4 (pin 11)
D11Data pin 4 (pin 11)
D12Data pin 4 (pin 11)
D13Data pin 4 (pin 11)
+5VConnected to Vdd pin of LCD (pin 2)
GroundConnected to Vss,Vee and RW pin of LCD (pin 1,3 and 5)

Some Arduino boards might show an error while uploading program if there are anything connected to pin 0 and pin1, so if you experience any just remove the keypad while uploading the program.

Programming Code

/*

  • Arduino Keypad calculator Program
    */

#include<LiquidCrystal.h> //Header file For LCD from

https://www.arduino.cc/en/Reference/LiquidCrystal

#include<Keypad.h>//Header file for Keypad from

https://github.com/Chris–A/Keypad

const byte ROWS = 4; // Four rows
const byte COLS = 4; // Three columns

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

{‘1′,’2′,’3′,’A’},

{‘4′,’5′,’6′,’B’},

{‘7′,’8′,’9′,’C’},

{‘*’,’0′,’#’,’D’}

};

byte rowPins[ROWS] = { 9, 8, 7, 6 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte colPins[COLS] = { 5, 4, 3, 2 }; // Connect keypad COL0, COL1 and COL2 to these Arduino pins.

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

const int rs = 0, en = 1, d4 = 10, d5 = 11, d6 = 12, d7 = 13; //Pins to which LCD is connected
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

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

void setup() {
lcd.begin(16, 2); //We are using a 16*2 LCD display
lcd.print(“DIY Calculator”); //Display a intro message
lcd.setCursor(0, 1); // set the cursor to column 0, line 1
lcd.print(“-CircuitDigest”); //Display a intro message

delay(2000); //Wait for display to show info
lcd.clear(); //Then clean it
}

void loop() {

key = kpd.getKey(); //storing pressed key value in a char

if (key!=NO_KEY)
DetectButtons();

if (result==true)
CalculateResult();

DisplayResult();
}

void DetectButtons()
{
lcd.clear(); //Then clean it
if (key==’*’) //If cancel Button is pressed
{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; //Pressed twice
}

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

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


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

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

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

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


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; //Pressed twice
}

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

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

  if (key == 'A' || key == 'B' || key == 'C' || key == 'D') //Detecting Buttons on Column 4

{
Num1 = Number;
Number =0;
if (key == ‘A’)
{Serial.println (“Addition”); action = ‘+’;}
if (key == ‘B’)
{Serial.println (“Subtraction”); action = ‘-‘; }
if (key == ‘C’)
{Serial.println (“Multiplication”); action = ‘*’;}
if (key == ‘D’)
{Serial.println (“Devesion”); action = ‘/’;}

delay(100);

}

}

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

if (action==’-‘)
Number = Num1-Num2;

if (action==’‘) Number = Num1Num2;

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

void DisplayResult()
{
lcd.setCursor(0, 0); // set the cursor to column 0, line 1
lcd.print(Num1); lcd.print(action); lcd.print(Num2);

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

lcd.setCursor(0, 1); // set the cursor to column 0, line 1
lcd.print(Number); //Display the result
}