#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Define pins
#define DHTPIN 2 // DHT sensor pin
#define RELAY_PIN1 10 // Relay pin for heater/fan
#define BUTTON_PIN0 3 // Push button pin
#define BUTTON_PIN1 4 // Push button1 pin
#define BUTTON_PIN2 5 // Push button2 pin
#define LED_PIN 13 // LED pin for indication
#define DHTTYPE DHT22 // DHT 22 (AM2302)
int var = 0;
float currentTemp = 0.0;
float desiredTemp = 35.0; // Default desired temperature
float currentHumidity = 0.0;
float desiredHumidity = 60.0;
bool relayState = false;
bool led
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 20, 4);
volatile bool buttonPressed = false; // Variable to indicate button press
unsigned long previousMillis = 0; // Store the last time the button was pressed
const long interval = 3000; // Interval for 5 seconds
void setup() {
lcd.init();
lcd.backlight();
// lcd.clear();
dht.begin();
Serial.begin(9600);
pinMode(RELAY_PIN1, OUTPUT);
pinMode(BUTTON_PIN0, INPUT_PULLUP);
pinMode(BUTTON_PIN1, INPUT_PULLUP); // Use internal pull-up resistor
pinMode(BUTTON_PIN2, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT); // LED pin as output
// Attach interrupt to BUTTON_PIN0
attachInterrupt(digitalPinToInterrupt(BUTTON_PIN0), buttonISR, FALLING);
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis; }
Serial.println( previousMillis);
// Check if the button was pressed
if (buttonPressed) {
SetValue(); } // Call function to toggle LED
if(ledState == HIGH) {
lcd.clear();
switch (var) {
case 1:
/*lcd.setCursor("SET TEMP", 1);
lcd.print("T: ");
lcd.print(desiredTemp);
lcd.setCursor(15, 1);
lcd.print("'C");
lcd.setCursor(2, 2);
lcd.print("H: ");
lcd.print(desiredHumidity);
lcd.setCursor(15, 2);
lcd.print(" %"); */
previousMillis = currentMillis; }
lcd.clear();
var = 0;
previousMillis = 0;
break;
default:
while(currentMillis - previousMillis <= interval) {
lcd.setCursor(3, 0);
lcd.print("SET VALUE");
previousMillis = currentMillis; }
lcd.clear();
break;
}
/*
var =+ 1;
digitalWrite(LED_PIN, HIGH);
lcd.clear();
switch (var) {
case 1:
while(millis() - previousMillis <= interval) {
lcd.setCursor(3, 0);
lcd.print("SET VALUE");
lcd.setCursor("SET TEMP", 1);
lcd.print("T: ");
lcd.print(desiredTemp);
lcd.setCursor(15, 1);
lcd.print("'C");
lcd.setCursor(2, 2);
lcd.print("H: ");
lcd.print(desiredHumidity);
lcd.setCursor(15, 2);
lcd.print(" %");
if(digitalRead(BUTTON_PIN1) == LOW) {
delay(50);
desiredTemp += 0.1; // Increase desired temperature by 0.1°C
if (desiredTemp > 50.0) { desiredTemp = 50.0; } // Limit temp 50C
//previousMillis = 0;
}
if(digitalRead(BUTTON_PIN2 == LOW)) {
delay(50);
desiredTemp -= 0.1; // Increase desired temperature by 0.1°C
if (desiredTemp> 25.0) { desiredTemp = 25.0; } // Limit H 90%
//previousMillis = 0;
}
previousMillis = millis();
}
digitalWrite(LED_PIN, LOW);
Serial.print(previousMillis);
lcd.clear();
break;
}
Your regular code goes here (e.g., reading DHT sensor, controlling relay, etc.)
*/// Read current temperature and humidity
float currentTemp = dht.readTemperature();
float currentHumidity = dht.readHumidity();
// Display the temperature and humidity on the LCD
//lcd.clear();
lcd.setCursor(4, 0);
lcd.print("PV");
lcd.setCursor(12, 0);
lcd.print("SV");
lcd.setCursor(0, 1);
lcd.print("T: ");
lcd.print(currentTemp);
lcd.setCursor(17, 1);
lcd.print("'C");
lcd.setCursor(0, 2);
lcd.print("H: ");
lcd.print(currentHumidity);
lcd.setCursor(17, 2);
lcd.print(" %");
lcd.setCursor(11, 1);
lcd.print(desiredTemp);
lcd.setCursor(11, 2);
lcd.print(desiredHumidity);
// delay(200); // Update every second
}
// Interrupt Service Routine (ISR) for the button press
void buttonISR() {
buttonPressed = true; // Set the flag when button is pressed
}
// Function to toggle LED state
void SetValue() {
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("SET VALUE");
if (var <3 ) {
var =+ 1; }
else
var = 0;
//static bool ledState = LOW; // Static variable to remember the LED state
//ledState = !ledState; // Toggle the state
//digitalWrite(LED_PIN, ledState); // Set the LED pin
digitalWrite(LED_PIN, HIGH);
// delay(3000);
// lcd.clear();
buttonPressed = false; // Reset the flag
digitalWrite(LED_PIN, LOW);
}