#include <LiquidCrystal.h>
#include <Keypad.h>
int BUZZER_PIN = 11;
int CLICK_FREQ = 600;
int CLICK_FREQ_MS = 25;
int EQUAL_FREQ = 800;
int EQUAL_FREQ_MS = 25;
int rs = 9; // Pin 9 on Arduino to pin(RS)
int en = 8; // Pin 8 on Arduino to pin(E)
int d4 = 7; // Pin 7 on Arduino to pin(D4)
int d5 = 6; // Pin 6 on Arduino to pin(D5)
int d6 = 5; // Pin 5 on Arduino to pin(D6)
int d7 = 4; // Pin 4 on Arduino to pin(D7)
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
/* Keypad setup */
const byte KEYPAD_ROWS = 4;
const byte KEYPAD_COLS = 4;
byte rowPins[KEYPAD_ROWS] = {3, 2, 1, 0};
byte colPins[KEYPAD_COLS] = {A3, A2, A1, A0};
char keys[KEYPAD_ROWS][KEYPAD_COLS] = {
{'1', '2', '3', '+'},
{'4', '5', '6', '-'},
{'7', '8', '9', '*'},
{'.', '0', '=', '/'}
};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, KEYPAD_ROWS, KEYPAD_COLS);
float firstNumber = 0.0;
float secondNumber = 0.0;
float claculationResult = 0.0;
char mathOperation;
void sayWelcome() {
lcd.setCursor(1, 0);
String welcome_message = "Welcome Again!";
for (int i = 0 ; i < welcome_message.length() ; i++)
{
lcd.print(welcome_message[i]);
delay(100);
}
delay(1000);
}
int getNumber()
{
String number = "";
char digit;
do
{
digit = keypad.waitForKey();
if (digit != '=')
{
lcd.print(digit);
tone(BUZZER_PIN, CLICK_FREQ, CLICK_FREQ_MS);
if ((digit != '+') && (digit != '-') && (digit != '*') && (digit != '/') && (digit != '='))
{
number += digit;
}
else
{
mathOperation = digit;
}
}
else
{
tone(BUZZER_PIN, EQUAL_FREQ, EQUAL_FREQ_MS);
}
} while ((digit != '+') && (digit != '-') && (digit != '*') && (digit != '/') && (digit != '='));
return number.toInt();
}
void printResult(float result)
{
lcd.setCursor(0, 1);
lcd.print(result);
}
float calculate(char op, float left, float right) {
float result = 0.0;
if (op == '+')
{
result = left + right;
}
else if (op == '-')
{
result = left - right;
}
else if (op == '*')
{
result = left * right;
}
else if (op == '/')
{
result = left / right;
}
return result;
}
void setup() {
lcd.begin(16, 2);
sayWelcome();
lcd.clear();
lcd.blink();
}
void loop() {
firstNumber = getNumber();
secondNumber = getNumber();
claculationResult = calculate(mathOperation, firstNumber, secondNumber);
printResult(claculationResult);
delay(1000);
lcd.clear();
}