#include "DHT.h"
#include <Servo.h>
#include <Adafruit_Sensor.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 2
#define DHTTYPE DHT22
#define BUZZPIN 12
#define NOTE 196
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
Servo servo;
DHT dht(DHTPIN, DHTTYPE);
//void scrollText(String message1, String message2, int delayTime, int lcdColumns) {
// // Pad the messages with spaces to make sure they can scroll fully
// for (int i = 0; i < lcdColumns; i++) {
// message1 = " " + message1;
// message2 = " " + message2;
// }
//
// // Loop through the message length and scroll both messages simultaneously
// for (int pos = 0; pos < message1.length(); pos++) {
// lcd.setCursor(0, 0);
// lcd.print(message1.substring(pos, pos + lcdColumns));
// lcd.setCursor(0, 3);
// lcd.print(message2.substring(pos, pos + lcdColumns));
// delay(delayTime);
// }
//}
void scrollText(int row, String message, int delayTime, int lcdColumns) {
for (int i=0; i < lcdColumns; i++) {
message = " " + message;
}
message = message + " ";
for (int pos = 0; pos < message.length(); pos++) {
lcd.setCursor(0, row);
lcd.print(message.substring(pos, pos + lcdColumns));
delay(delayTime);
}
}
void setup() {
servo.attach(9);
lcd.init();
lcd.backlight();
pinMode(BUZZPIN, OUTPUT);
dht.begin();
}
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (!isnan(humidity) || !isnan(temperature)) {
if (temperature > 30.0 && humidity > 70.0) {
servo.write(90);
tone(BUZZPIN, NOTE);
} else {
servo.write(0);
noTone(BUZZPIN);
}
String result_humidity = "Humidity: " + String(humidity) + " %";
String result_temperature = "Temperature: " + String(temperature) + "*C";
lcd.setCursor(0, 0);
lcd.print(result_humidity);
lcd.setCursor(0, 1);
lcd.print(result_temperature);
// Display humidity and temperature simultaneously
//scrollText(result_humidity, result_temperature, 250, LCD_COLUMNS);
} else {
String messageToScroll = "Failed to read from DHT";
scrollText(3, messageToScroll, 250, LCD_COLUMNS);
}
delay(2000);
}