#include <DHT.h>
#include <SevSeg.h>
#define DHTPIN 4 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);
#define RED_PIN 18 // Pin connected to the red LED
#define GREEN_PIN 19 // Pin connected to the green LED
#define BLUE_PIN 20 // Pin connected to the blue LED
#define BUZZER_PIN 5 // Digital pin connected to the buzzer
#define TEMP_THRESHOLD 25 // Temperature threshold
#define HUM_THRESHOLD 72 // Humidity threshold
// Pins for the seven-segment display
#define SEGMENT_A 10
#define SEGMENT_B 11
#define SEGMENT_C 12
#define SEGMENT_D 13
#define SEGMENT_E 14
#define SEGMENT_F 15
#define SEGMENT_G 16
#define SEGMENT_DP 17
SevSeg sevseg;
void setup()
{
pinMode(RED_PIN, OUTPUT);
//pinMode(GREEN_PIN, OUTPUT);
//pinMode(BLUE_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
Serial.begin(9600);
dht.begin();
byte numDigits = 4;
byte digitPins[] = {6, 7, 8, 9}; // Pins for controlling digits
byte segmentPins[] = {SEGMENT_A, SEGMENT_B, SEGMENT_C, SEGMENT_D, SEGMENT_E, SEGMENT_F, SEGMENT_G, SEGMENT_DP}; // Pins for controlling segments
sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins);
}
void loop()
{
//pinMode(GREEN_PIN, OUTPUT);
// Reading temperature and humidity takes about 250 milliseconds!
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature))
{
Serial.println("Failed to read TEMPERATURE from DHT SENSOR !!\nPlease REBOOT your DEVICE");
return;
}
if (isnan(humidity))
{
Serial.println("Failed to read HUMIDITY from DHT SENSOR !!\nPlease REBOOT your DEVICE");
return;
}
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
if (temperature > TEMP_THRESHOLD || humidity > HUM_THRESHOLD)
{
triggerAlarm(RED_PIN, BUZZER_PIN); // Trigger RED LED and buzzer alarm
Serial.println("!! TEMPERATURE & HUMIDITY EXCEEDED THRESHOLD !!");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
displayTemperature(temperature);
displayHumidity(humidity);
}
delay(1000); // Delay before next reading
}
void triggerAlarm(int pin, int otherPin)
{
// Trigger the alarm for consecutive 3 times
tone(5 , 1500 , 1500) ;
for (int i = 0; i < 3; i++)
{
digitalWrite(pin, HIGH); // Turn on buzzer or LED
digitalWrite(otherPin, HIGH); // Turn on LED or buzzer
delay(500); // Alarm duration
digitalWrite(pin, LOW); // Turn off buzzer or LED
digitalWrite(otherPin, LOW); // Turn off LED or buzzer
delay(500); // Delay before next alarm
}
}
void displayTemperature(float temp)
{
int temp_int = (int)temp;
sevseg.setNumber(temp_int);
sevseg.refreshDisplay();
}
void displayHumidity(float hum)
{
int hum_int = (int)hum;
sevseg.setNumber(hum_int);
sevseg.refreshDisplay();
}