#include <LiquidCrystal.h>
#include <DHT.h>
#define DHTPIN A1
#define sensor_lm35 A2
#define DHTTYPE DHT22
#define RED_PIN 2
#define GREEN_PIN 3
#define BLUE_PIN 4
#define BuzzerPin 5
#define GasSensor A0
float tempc;
float tempf;
float vout;
int gas = 0;
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
DHT dht(DHTPIN, DHTTYPE);
void print_gas_value(){
gas = analogRead(GasSensor);
int gasPercentage = map(gas, 0, 1023, 0, 100);
lcd.setCursor(0, 0);
lcd.println("GAS =");
lcd.print(gasPercentage);
lcd.print(" % ");
if (gasPercentage > 50)
{
tone(BuzzerPin, 400, 1000);
lcd.setCursor(0, 1);
lcd.print("<< DANGER !!! >>");
}
else
{
tone(BuzzerPin, 0, 250);
lcd.setCursor(0, 1);
lcd.print("<OUT OF DANGER.>");
}
}
void print_temp_lm35(){
vout = analogRead(sensor_lm35);
vout = (vout*500)/1023;
tempc = vout;
tempf = (vout*1.8)+32;
lcd.clear();
lcd.print("C = ");
lcd.println(tempc);
lcd.setCursor(0,1);
lcd.print("F = ");
lcd.println(tempf);
}
void print_humidity_dh11(){
// قراءة الرطوبة
float h = dht.readHumidity();
// عرض الرطوبة على شاشة الأردوينو
Serial.print("Humidity: ");
Serial.print(h);
Serial.println("%");
// عرض الرطوبة على شاشة LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Humidity: ");
lcd.print(h);
lcd.print("%");
// تحويل شدة الرطوبة إلى قيمة مناسبة لشدة الإضاءة
if (h>70)
{
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
else if (h>40)
{
digitalWrite(4, HIGH);
digitalWrite(3, LOW);
digitalWrite(2, LOW);
}
else
{
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(2, LOW);
}
}
void lcd_welcome_message(){
lcd.clear();
//delay(500);
lcd.setCursor(9,0);
lcd.write(byte(0));
lcd.write(1);
lcd.write(2);
lcd.write(3);
lcd.setCursor(8,0);
lcd.write(4);
//delay(500);
lcd.setCursor(1, 0);
lcd.print("HELLO");
//delay(500);
lcd.setCursor(0, 1);
lcd.print("----");
delay(500);
lcd.setCursor(4, 1);
lcd.print("----");
delay(500);
lcd.setCursor(8, 1);
lcd.print("----");
delay(500);
lcd.setCursor(12, 1);
lcd.print("----");
delay(500);
lcd.clear();
delay(500);
lcd.setCursor(0, 0);
lcd.print("Air quality monitoring sensor detector");
delay(500);
}
byte M[8] = {
0b00000,
0b00000,
0b00110,
0b01001,
0b11001,
0b00110,
0b00000,
0b00000
};
byte R[8] = {
0b00000,
0b00000,
0b00010,
0b00010,
0b00011,
0b00100,
0b01000,
0b10000
};
byte H[8] = {
0b00000,
0b01100,
0b10010,
0b00001,
0b11111,
0b00000,
0b00000,
0b00000
};
byte BA[8] = {
0b10000,
0b10000,
0b10000,
0b10010,
0b11111,
0b00000,
0b00100,
0b00000
};
byte logo[8] = {
0b11111,
0b10101,
0b11111,
0b11111,
0b01110,
0b01010,
0b11011,
0b00000,
};
void setup(){
Serial.begin(9600);
lcd.begin(16, 2);
dht.begin();
pinMode(BuzzerPin, OUTPUT);
pinMode(sensor_lm35, INPUT);
pinMode(GasSensor, INPUT);
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
lcd.createChar(0, BA); // char (با)
lcd.createChar(1, H); //char ( ح )
lcd.createChar(2, R); //char (ـر)
lcd.createChar(3, M); //char (مـ)
lcd.createChar(4, logo);
lcd_welcome_message();
delay(1000);
for (int positionCounter = 0; positionCounter < 22; positionCounter++) {
lcd.scrollDisplayLeft();
delay(150);}
}
void loop() {
lcd.clear();
print_gas_value();
delay(2000);
lcd.clear();
print_temp_lm35();
delay(2000);
lcd.clear();
print_humidity_dh11();
delay(2000);
}