#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include "pitches.h"
#define buzzPin 25
#define ledPin 4
#define DHTPIN 12
#define DHTTYPE DHT22
DHT dht (DHTPIN, DHTTYPE);
uint8_t lcdColumns = 20;
uint8_t lcdRows = 4;
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);
int risk;
const int buttonTones[] = {
NOTE_C4, NOTE_D4
};
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(buzzPin, OUTPUT);
pinMode(ledPin, OUTPUT);
dht.begin();
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Sensor values");
}
void loop() {
// put your main code here, to run repeatedly:
float temp = dht.readTemperature();
float hum = dht.readHumidity();
float hic = dht.computeHeatIndex(temp, hum, false);
delay(2000);
lcd.clear();
Serial.print("Temperature : ");
Serial.print(temp);
lcd.setCursor(0,0);
lcd.print("Temp");
lcd.setCursor(7,0);
lcd.print(":");
lcd.setCursor(9,0);
lcd.print(temp);
Serial.print(" | Humidity : ");
Serial.print(hum);
lcd.setCursor(0,1);
lcd.print("Hum");
lcd.setCursor(7,1);
lcd.print(":");
lcd.setCursor(9,1);
lcd.print(hum);
Serial.print(F("| Heat index: "));
Serial.print(hic);
Serial.println(F("°C "));
lcd.setCursor(0,2);
lcd.print("Index");
lcd.setCursor(7,2);
lcd.print(":");
lcd.setCursor(9,2);
lcd.print(hic);
if (isnan(temp) || isnan(hum) ) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
if(temp <= 15 ){ // Cool and dry conditions - Very Low Risk
if(hum <= 50){
risk = 1;
}
else(risk = 2);
}
if(temp >= 16 && temp <= 20 ){ //light rainfall, low moisture content - Low Risk
if(hum <= 50){
risk = 1;
}
if(hum >= 51 && hum <= 60){
risk = 2;
}
if(hum >= 61){
risk = 3;
}
}
if(temp >= 21 && temp <= 25 ){ //Warm and moderate chance of Rain - Moderate Risk
if(hum <= 60){
risk = 2;
}
if(hum >= 61 && hum<= 70){
risk = 3;
}
if(hum >= 71){
risk = 4;
}
}
if(temp >= 26 && temp <= 30 ){ //Heavy rain and Thunderstorms - High Risk
if(hum <= 70){
risk = 3;
}
if(hum >= 71 && hum<= 80){
risk = 4;
}
if(hum >= 81){
risk = 5;
}
}
if(temp >= 31){// extreme rainfall events - Very High Risk
if(hum<= 65){
risk = 3;
}
if(hum<= 80 && hum>=65){
risk = 4;
}
if(hum >= 80){
risk = 5;
}
}
// It would have been easier to do this with the Heat index instead
int pitch = 0;
if (risk == 4){
pitch = buttonTones[0];
tone(buzzPin, pitch);
digitalWrite(ledPin, HIGH);
delay(2000);
noTone(buzzPin);
digitalWrite(ledPin, LOW);
// digitalWrite(buzzPin, HIGH);
// delay(1000);
// digitalWrite(buzzPin, LOW);
// delay(1000);
}
if (risk == 5){
pitch = buttonTones[1];
tone(buzzPin, pitch);
digitalWrite(ledPin, HIGH);
// digitalWrite(buzzPin, HIGH);
// delay(100);
// digitalWrite(buzzPin, LOW);
// delay(100);
}
if (!pitch) {
noTone(buzzPin);
digitalWrite(ledPin, LOW);
}
// else{
// digitalWrite(buzzPin, LOW);
// }
lcd.setCursor(0,3);
lcd.print("Risk");
lcd.setCursor(7,3);
lcd.print(":");
lcd.setCursor(9,3);
lcd.print(risk);
delay(1000);
}