#include <LiquidCrystal.h>
const int rs = 26;
const int en = 25;
const int D4 = 13;
const int D5 = 12;
const int D6 = 14;
const int D7 = 27;
int lcdDelay = 3000;
LiquidCrystal lcd(rs, en, D4, D5, D6, D7);
float firstNum;
float secNum;
float answer;
String op;
void setup() {
lcd.begin(16, 2);
lcd.clear();
Serial.begin(115200);
}
void loop() {
firstNum = getNumber("Input 1st Number");
clearSerialBuffer(); // Clear any remaining newline or unwanted characters
secNum = getNumber("Input 2nd Number");
clearSerialBuffer(); // Clear buffer again after second input
op = getOperator("Input (+,-,*,/)");
bool validOperation = true;
if (op == "+") {
answer = firstNum + secNum;
} else if (op == "-") {
answer = firstNum - secNum;
} else if (op == "*") {
answer = firstNum * secNum;
} else if (op == "/") {
if (secNum != 0) {
answer = firstNum / secNum;
} else {
displayError("Error: Div by 0");
validOperation = false;
}
} else {
displayError("Invalid Operator");
validOperation = false;
}
if (validOperation) {
displayResult(firstNum, secNum, op, answer);
}
delay(lcdDelay);
lcd.clear();
}
float getNumber(const char* prompt) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(prompt);
Serial.println(prompt);
while (Serial.available() == 0) {}
float number = Serial.parseFloat();
Serial.println(number);
return number;
}
String getOperator(const char* prompt) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(prompt);
Serial.println(prompt);
while (Serial.available() == 0) {}
String operatorSymbol = Serial.readString();
operatorSymbol.trim(); // Trim whitespace or newline
Serial.println(operatorSymbol);
return operatorSymbol;
}
void displayError(const char* message) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(message);
Serial.println(message);
}
void displayResult(float firstNum, float secNum, String op, float answer) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(firstNum);
lcd.print(" ");
lcd.print(op);
lcd.print(" ");
lcd.print(secNum);
lcd.print("=");
lcd.setCursor(0, 1);
lcd.print(answer);
Serial.print(firstNum);
Serial.print(" ");
Serial.print(op);
Serial.print(" ");
Serial.print(secNum);
Serial.print(" = ");
Serial.println(answer);
lcd.setCursor(0, 1);
lcd.print("Thank You");
Serial.println("Thank You");
}
void clearSerialBuffer() {
while (Serial.available() > 0) {
Serial.read(); // Read and discard any remaining characters
}
}