Created
February 5, 2018 06:39
-
-
Save DanNduati/25300ebedf9c07aaec0dc1262edce96e to your computer and use it in GitHub Desktop.
Arduino based calculator using 4*4 keypad and a 16*2 lcd display
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <LiquidCrystal_I2C.h> | |
#include <Keypad.h> | |
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] = { 0, 1, 2, 3 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins. | |
byte colPins[COLS] = { 4, 5, 6, 7 }; // Connect keypad COL0, COL1 and COL2 to these Arduino pins. | |
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // Create the Keypad | |
LiquidCrystal_I2C lcd(0x27,16,2); | |
long Num1,Num2,Number; | |
char key,action; | |
boolean result = false; | |
void setup() { | |
lcd.init();// initialize the lcd | |
// Print a message to the LCD. | |
lcd.backlight(); | |
lcd.begin(16, 2); //We are using a 16*2 LCD display | |
lcd.print("DIY CALC"); //Display a intro message | |
lcd.setCursor(0, 1); // set the cursor to column 0, line 1 | |
lcd.print("-Dan_Chei"); //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 = Num1*Num2; | |
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 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment