#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <Adafruit_BMP280.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 2 // دبوس مستشعر DHT22
#define DHTTYPE DHT22 // نوع مستشعر DHT
#define BUTTON_PIN 3 // دبوس الزر
DHT dht(DHTPIN, DHTTYPE);
Adafruit_BMP280 bmp;
LiquidCrystal_I2C lcd(0x27, 16, 2); // عنوان LCD، 16 عمود و2 صف
int screen = 0; // الحالة الحالية للشاشة
bool lastButtonState = HIGH; // الحالة السابقة للزر
unsigned long lastDebounceTime = 0; // وقت آخر تغيير للحالة
unsigned long debounceDelay = 100; // زمن التأخير
void setup() {
Serial.begin(9600); // بدء الاتصال التسلسلي
lcd.begin(16, 2); // إعداد LCD باستخدام عدد الأعمدة والصفوف
dht.begin();
bmp.begin(0x76); // تأكد من استخدام العنوان الصحيح لمستشعر BMP280
pinMode(BUTTON_PIN, INPUT_PULLUP); // إعداد دبوس الزر كدخل
}
void loop() {
// قراءة حالة الزر
bool buttonState = digitalRead(BUTTON_PIN);
// تحقق من تغيير الحالة
if (buttonState == LOW && lastButtonState == HIGH && (millis() - lastDebounceTime) > debounceDelay) {
screen++; // الانتقال إلى الشاشة التالية
if (screen > 2) screen = 0; // إعادة التدوير بين الشاشات
lastDebounceTime = millis();
}
lastButtonState = buttonState;
// تحديث الشاشة بناءً على الحالة الحالية
lcd.clear();
switch (screen) {
case 0:
lcd.print("مرحبا");
Serial.println("شاشة مرحبا");
break;
case 1: {
float h = dht.readHumidity();
float t = dht.readTemperature();
lcd.print("درجة الحرارة: ");
lcd.print(t);
lcd.print(" C");
Serial.println("شاشة درجة الحرارة");
break;
}
case 2: {
float pressure = bmp.readPressure() / 100.0F; // تحويل إلى هكتوباسكال
lcd.print("الضغط: ");
lcd.print(pressure);
lcd.print(" hPa");
Serial.println("شاشة الضغط");
break;
}
}
delay(200); // تأخير لتجنب التحديث السريع
}