// تحميل المكتبات اللازمة
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// تعريف الثوابت
#define TRIG_PIN 9 // الطرف المستخدم لإرسال النبضة
#define ECHO_PIN 10 // الطرف المستخدم لاستقبال النبضة
#define BUTTON1_PIN 8 // الطرف المستخدم للزر الأول
#define BUTTON2_PIN 11 // الطرف المستخدم للزر الثاني
#define LCD_ADDRESS 0x27 // عنوان شاشة LCD على الحافلة i2c
#define LCD_COLS 16 // عدد أعمدة شاشة LCD
#define LCD_ROWS 2 // عدد صفوف شاشة LCD
// إنشاء كائن لشاشة LCD
LiquidCrystal_I2C lcd(LCD_ADDRESS, LCD_COLS, LCD_ROWS);
// تعريف المتغيرات العامة
float distance; // المسافة بين الكائن والمستشعر بالمترات
float length; // الطول بين الكائنين بالمترات
float width; // العرض بين الكائنين بالمترات
float area; // المساحة بين الكائنين بالمترات المربعة
bool button1_pressed; // حالة الزر الأول
bool button2_pressed; // حالة الزر الثاني
void setup() {
// تهيئة الأطراف كمدخل أو مخرج
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUTTON1_PIN, INPUT_PULLUP);
pinMode(BUTTON2_PIN, INPUT_PULLUP);
// تهيئة شاشة LCD
lcd.init();
lcd.backlight();
// تهيئة المتغيرات العامة
distance = 0;
length = 0;
width = 0;
area = 0;
button1_pressed = false;
button2_pressed = false;
}
void loop() {
// قياس المسافة بين الكائن والمستشعر
distance = measureDistance();
// عرض المسافة على شاشة LCD
lcd.setCursor(0, 0);
lcd.print("Distance: ");
lcd.print(distance);
lcd.print(" m");
// قراءة حالة الزر الأول
button1_pressed = digitalRead(BUTTON1_PIN) == LOW;
// إذا تم الضغط على الزر الأول
if (button1_pressed) {
// حفظ المسافة الحالية في متغير
length = distance;
// عرض الطول على شاشة LCD
lcd.setCursor(0, 1);
lcd.print("Length: ");
lcd.print(length);
lcd.print(" m");
// انتظار إطلاق الزر
while (digitalRead(BUTTON1_PIN) == LOW);
}
// قراءة حالة الزر الثاني
button2_pressed = digitalRead(BUTTON2_PIN) == LOW;
// إذا تم الضغط على الزر الثاني
if (button2_pressed) {
// حفظ المسافة الحالية في متغير
width = distance;
// حساب المساحة بين الكائنين
area = length * width;
// عرض المساحة على شاشة LCD
lcd.setCursor(0, 1);
lcd.print("Area: ");
lcd.print(area);
lcd.print(" m2 ");
// انتظار إطلاق الزر
while (digitalRead(BUTTON2_PIN) == LOW);
}
}
// دالة لقياس المسافة بين الكائن والمستشعر
float measureDistance() {
// تعريف متغير محلي
float duration; // المدة التي تستغرقها النبضة للذهاب والعودة بالمايكروثانية
// إرسال نبضة على الطرف TRIG
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// استقبال النبضة على الطرف ECHO
duration = pulseIn(ECHO_PIN, HIGH);
// حساب المسافة بالمترات
return (duration * 0.034 / 2) / 100;
}