#include <Keypad.h>
#include <LiquidCrystal.h>
int Contrast = 120;
LiquidCrystal lcd(A1, A2, 13, 12, 11, 10);
const byte ROWS = 4;
const byte COLS = 4;
int expr[2];
int i=0;
char op;
void resetCalc()
{
Serial.println();
i = 0;
lcd.clear();
lcd.setCursor(0,0);
}
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
Serial.begin(9600);
analogWrite(A0, Contrast);
lcd.begin(16, 2);
lcd.noCursor();
lcd.setCursor(0,0);
Serial.println("Welcome to keypad Calculator");
Serial.println("A = +, B = -, C = *, D = /");
Serial.println("Press # to calculate");
Serial.println("Press * to reset");
Serial.println("NOTE: It works only on single digit numbers\
\
");
}
void loop(){
char key = customKeypad.getKey();
if(key)
{
if(i == 0)
{
expr[0] = key-48;
Serial.print(expr[0]);
lcd.print(expr[0]);
i++;
}
else if(i == 1)
{
op = key;
i++;
if(op == 'A')
{
Serial.print(" + ");
lcd.print(" + ");
}
else if(op == 'B')
{
Serial.print(" - ");
lcd.print(" - ");
}
else if(op == 'C')
{
Serial.print(" * ");
lcd.print(" * ");
}
else if(op == 'D')
{
Serial.print(" / ");
lcd.print(" / ");
}
else
{
Serial.println("Syntax error");
lcd.print(" Syntax error ");
resetCalc();
}
}
else if(i == 2)
{
expr[1] = key-48;
Serial.print(expr[1]);
lcd.print(expr[1]);
Serial.print(" = ");
lcd.print(" = ");
if(op == 'A')
{
Serial.println(expr[0] + expr[1]);
lcd.print(expr[0] + expr[1]);
}
else if(op == 'B')
{
Serial.println(expr[0] - expr[1]);
lcd.print(expr[0] - expr[1]);
}
else if(op == 'C')
{
Serial.println(expr[0] * expr[1]);
lcd.print(expr[0] * expr[1]);
}
else if(op == 'D')
{
Serial.println(expr[0] / expr[1]);
lcd.print(expr[0] / expr[1]);
}
i++;
}
else if(key == '*' || i == 3)
{
resetCalc();
}
}
}
Comments