🔐 Subscribe to Unlock the Full Arduino Calculator Project!
Click the button below to subscribe to the @arduinounoprojex channel and instantly unlock the complete project details, code, and schematic.
SUBSCRIBE & GET THE CODE✅ CONTENT UNLOCKED! Full Project Details Below:
list of products from Amazon (Not mine, i just link them!) Scroll Down For Article! Note: Elegoo boards are not Arduino, but they are compatible with Arduino IDE and are mutch more affordable!
Project Description: Arduino Calculator with LCD and Keypad
This project is about making a **simple yet functional calculator** with an Arduino microcontroller. It has a **16x2 LCD display** and a **4x4 matrix keypad**. Users can input numbers and operations like (+, -, *, /) on the keypad. The LCD shows the input and results, and it gives feedback for calculations.
This project is great for learning about **Arduino programming**, **LCD interfacing**, and **matrix keypad handling**.
Key Features
**User-Friendly Interface**:
- Uses a 4x4 keypad for input and a 16x2 LCD for display.
- Displays both the entered expression and the computed result.
**Core Functionality**:
- Supports addition, subtraction, multiplication, and division.
- Handles errors, such as division by zero.
**Customization**:
- Easily expandable to include advanced mathematical operations.
- Compatible with most Arduino boards.
**Educational Value**:
- Teaches interfacing of hardware components like keypads and LCDs with Arduino.
- Demonstrates practical use of programming concepts like string manipulation and input parsing.
Components Needed
- **Arduino Uno** or compatible microcontroller.
- **16x2 LCD Display** (HD44780 compatible).
- **4x4 Keypad** (16-key matrix).
- Resistors, jumper wires, and a breadboard for connections.
How It Works
- **Input**: The user enters a mathematical expression using the keypad.
- **Processing**: The Arduino parses the input, identifies the numbers and the operator, and performs the required calculation.
- **Output**: The LCD displays the result or an error message (e.g., division by zero).
Applications
- **Learning Arduino**: Ideal for beginners to understand input-output handling.
- **DIY Projects**: Can be integrated into other electronic systems.
- **Teaching Tool**: Demonstrates basic computational logic and Arduino capabilities.
Schematic:
#include <LiquidCrystal.h>
#include <Keypad.h>
/* Display Setup */
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
/* Keypad Setup */
const byte KEYPAD_ROWS = 4;
const byte KEYPAD_COLS = 4;
byte rowPins[KEYPAD_ROWS] = {5, 4, 3, 2};
byte colPins[KEYPAD_COLS] = {A3, A2, A1, A0};
char keys[KEYPAD_ROWS][KEYPAD_COLS] = {
{'1', '2', '3', '+'},
{'4', '5', '6', '-'},
{'7', '8', '9', '*'},
{'C', '0', '=', '/'}
};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, KEYPAD_ROWS, KEYPAD_COLS);
String inputBuffer = ""; // Store user input
void setup() {
lcd.begin(16, 2);
lcd.print("Calculator");
delay(2000);
lcd.clear();
lcd.print("Enter:");
}
void loop() {
char key = keypad.getKey();
if (key) {
if (key == 'C') {
// Clear input
inputBuffer = "";
lcd.clear();
lcd.print("Enter:");
} else if (key == '=') {
// Calculate result
lcd.clear();
double result = calculate(inputBuffer);
lcd.setCursor(0, 0);
lcd.print("Result:");
lcd.setCursor(0, 1);
lcd.print(result);
delay(5000);
inputBuffer = "";
lcd.clear();
lcd.print("Enter:");
} else {
// Append input
inputBuffer += key;
lcd.setCursor(0, 1);
lcd.print(inputBuffer);
}
}
}
// Function to calculate the result of the expression
double calculate(String input) {
char operation = 0;
double num1 = 0, num2 = 0;
bool parsingNum2 = false;
String tempNum = "";
// Parse the input
for (int i = 0; i < input.length(); i++) {
char c = input[i];
if (isdigit(c) || c == '.') {
tempNum += c;
} else {
if (!parsingNum2) {
num1 = tempNum.toDouble();
tempNum = "";
operation = c;
parsingNum2 = true;
} else {
// Error: Multiple operations
return 0;
}
}
}
if (tempNum != "") {
num2 = tempNum.toDouble();
}
// Perform the operation
switch (operation) {
case '+': return num1 + num2;
case '-': return num1 - num2;
case '*': return num1 * num2;
case '/': return (num2 != 0) ? num1 / num2 : 0; // Avoid division by zero
default: return 0; // Invalid operation
}
}
Json code:
{
"version": 1,
"author": "https://www.youtube.com/@EasyElectronics2",
"editor": "wokwi",
"parts": [
{ "type": "wokwi-arduino-uno", "id": "uno", "top": 200, "left": 20, "attrs": {} },
{ "type": "wokwi-membrane-keypad", "id": "keypad", "top": 140, "left": 360, "attrs": {} },
{ "type": "wokwi-lcd1602", "id": "lcd", "top": 8, "left": 20, "attrs": {} },
{ "type": "wokwi-resistor", "id": "r1", "top": 140, "left": 220, "attrs": { "value": "220" } }
],
"connections": [
[ "uno:GND.1", "lcd:VSS", "black", [ "v-51", "*", "h0", "v18" ] ],
[ "uno:GND.1", "lcd:K", "black", [ "v-51", "*", "h0", "v18" ] ],
[ "uno:GND.1", "lcd:RW", "black", [ "v-51", "*", "h0", "v18" ] ],
[ "uno:5V", "lcd:VDD", "red", [ "v16", "h-16" ] ],
[ "uno:5V", "r1:2", "red", [ "v16", "h-118", "v-244", "h50" ] ],
[ "r1:1", "lcd:A", "pink", [] ],
[ "uno:12", "lcd:RS", "blue", [ "v-16", "*", "h0", "v20" ] ],
[ "uno:11", "lcd:E", "purple", [ "v-20", "*", "h0", "v20" ] ],
[ "uno:10", "lcd:D4", "green", [ "v-24", "*", "h0", "v20" ] ],
[ "uno:9", "lcd:D5", "brown", [ "v-28", "*", "h0", "v20" ] ],
[ "uno:8", "lcd:D6", "gold", [ "v-32", "*", "h0", "v20" ] ],
[ "uno:7", "lcd:D7", "gray", [ "v-36", "*", "h0", "v20" ] ],
[ "uno:A3", "keypad:C1", "brown", [ "v116", "*", "h0", "v0" ] ],
[ "uno:A2", "keypad:C2", "gray", [ "v120", "*", "h0", "v0" ] ],
[ "uno:A1", "keypad:C3", "orange", [ "v124", "*", "h0", "v0" ] ],
[ "uno:A0", "keypad:C4", "pink", [ "v128", "*", "h0", "v0" ] ],
[ "uno:5", "keypad:R1", "blue", [ "v-34", "h96", "*", "v12" ] ],
[ "uno:4", "keypad:R2", "green", [ "v-30", "h80", "*", "v16" ] ],
[ "uno:3", "keypad:R3", "purple", [ "v-26", "h64", "*", "v20" ] ],
[ "uno:2", "keypad:R4", "gold", [ "v-22", "h48", "*", "v24" ] ]
],
"dependencies": {}
}
0 Comments