/*
Program Calculator Arduino
*/
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Three columns
// Define the Keymap
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {10, 9, 8, 7};
byte colPins[COLS] = {6, 5, 4, 3};
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS ); // Create the Keypad
long Num1,Num2,angka;
char key,action;
boolean hasil = false;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
lcd.init(); // initialize the lcd
lcd.init();
// Print a message to the LCD.
lcd.backlight();
lcd.print("Calculator Ard"); //Display a intro message
lcd.setCursor(0, 1); // set the cursor to column 0, line 1
lcd.print("By: Indobot "); //Display a intro message
delay(2000); //Wait for display to show info
lcd.clear(); //Then clean it
}
void loop() {
// put your main code here, to run repeatedly:
key = customKeypad.getKey(); //storing pressed key value in a char
if (key!=NO_KEY)
DetectButtons();
if (hasil==true)
Calculatehasil();
Displayhasil();
}
void DetectButtons()
{
lcd.clear();
if (key=='*')
{Serial.println ("Button Cancel"); angka=Num1=Num2=0; hasil=false;}
if (key == '1')
{Serial.println ("Button 1");
if (angka==0)
angka=1;
else
angka = (angka*10) + 1;
}
if (key == '4')
{Serial.println ("Button 4");
if (angka==0)
angka=4;
else
angka = (angka*10) + 4;
}
if (key == '7')
{Serial.println ("Button 7");
if (angka==0)
angka=7;
else
angka = (angka*10) + 7;
}
if (key == '0')
{Serial.println ("Button 0");
if (angka==0)
angka=0;
else
angka = (angka*10) + 0;
}
if (key == '2')
{Serial.println ("Button 2");
if (angka==0)
angka=2;
else
angka = (angka*10) + 2;
}
if (key == '5')
{Serial.println ("Button 5");
if (angka==0)
angka=5;
else
angka = (angka*10) + 5;
}
if (key == '8')
{Serial.println ("Button 8");
if (angka==0)
angka=8;
else
angka = (angka*10) + 8;
}
if (key == '#')
{Serial.println ("Button Equal");
Num2=angka;
hasil = true;
}
if (key == '3')
{Serial.println ("Button 3");
if (angka==0)
angka=3;
else
angka = (angka*10) + 3;
}
if (key == '6')
{Serial.println ("Button 6");
if (angka==0)
angka=6;
else
angka = (angka*10) + 6;
}
if (key == '9')
{Serial.println ("Button 9");
if (angka==0)
angka=9;
else
angka = (angka*10) + 9;
}
if (key == 'A' || key == 'B' || key == 'C' || key == 'D') //Detecting Buttons on Column 4
{
Num1 = angka;
angka =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 Calculatehasil()
{
if (action=='+')
angka = Num1+Num2;
if (action=='-')
angka = Num1-Num2;
if (action=='*')
angka = Num1*Num2;
if (action=='/')
angka = Num1/Num2;
}
void Displayhasil()
{
lcd.setCursor(0, 0);
lcd.print(Num1); lcd.print(action); lcd.print(Num2);
if (hasil==true)
{lcd.print(" ="); lcd.print(angka);}
lcd.setCursor(0, 1);
lcd.print(angka);
}