#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// تهيئة شاشة LCD 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2);
// متغيرات لحفظ الأرقام والعملية
float num1 = 0, num2 = 0;
char operation;
bool operationSet = false;
bool resultDisplayed = false;
void setup() {
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Arduino Calculator");
delay(2000);
lcd.clear();
// إعداد الأزرار
pinMode(2, INPUT_PULLUP); // زر الرقم 0
pinMode(3, INPUT_PULLUP); // زر الرقم 1
pinMode(4, INPUT_PULLUP); // زر الرقم 2
pinMode(5, INPUT_PULLUP); // زر الرقم 3
pinMode(6, INPUT_PULLUP); // زر الرقم 4
pinMode(7, INPUT_PULLUP); // زر الرقم 5
pinMode(8, INPUT_PULLUP); // زر الرقم 6
pinMode(9, INPUT_PULLUP); // زر الرقم 7
pinMode(10, INPUT_PULLUP); // زر الرقم 8
pinMode(11, INPUT_PULLUP); // زر الرقم 9
pinMode(12, INPUT_PULLUP); // زر عملية الجمع +
pinMode(13, INPUT_PULLUP); // زر عملية الطرح -
pinMode(A0, INPUT_PULLUP); // زر عملية الضرب *
pinMode(A1, INPUT_PULLUP); // زر عملية القسمة /
pinMode(A2, INPUT_PULLUP); // زر علامة =
pinMode(A3, INPUT_PULLUP); // زر مسح C
}
void loop() {
// التعامل مع الأرقام المدخلة
for (int i = 2; i <= 11; i++) {
if (digitalRead(i) == LOW) {
int number = i - 2;
lcd.print(number);
if (operationSet) {
num2 = num2 * 10 + number;
} else {
num1 = num1 * 10 + number;
}
delay(250); // تأخير لمنع قراءة متكررة
}
}
// التعامل مع العمليات الحسابية
if (digitalRead(12) == LOW) {
setOperation('+');
}
if (digitalRead(13) == LOW) {
setOperation('-');
}
if (digitalRead(A0) == LOW) {
setOperation('*');
}
if (digitalRead(A1) == LOW) {
setOperation('/');
}
// حساب النتيجة عند الضغط على زر =
if (digitalRead(A2) == LOW) {
calculateResult();
}
// مسح القيم عند الضغط على زر C
if (digitalRead(A3) == LOW) {
clearCalculator();
}
}
void setOperation(char op) {
if (!operationSet) {
operation = op;
operationSet = true;
lcd.print(op);
delay(250);
}
}
void calculateResult() {
if (!resultDisplayed) {
float result = 0;
switch (operation) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
if (num2 != 0) {
result = num1 / num2;
} else {
lcd.clear();
lcd.print("Error: Div by 0");
return;
}
break;
}
lcd.setCursor(0, 1);
lcd.print("Result: ");
lcd.print(result);
resultDisplayed = true;
delay(250);
}
}
void clearCalculator() {
lcd.clear();
num1 = 0;
num2 = 0;
operationSet = false;
resultDisplayed = false;
}