#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Διαμόρφωση ακροδεκτών
const int DHT_PIN = 7;
const int HEATER_PIN = 4;
const int FAN_PIN = 8;
const int BUTTON_TEMP_UP_PIN = 2;
const int BUTTON_TEMP_DOWN_PIN = 3;
const int BUTTON_HUMIDITY_UP_PIN = 5;
const int BUTTON_HUMIDITY_DOWN_PIN = 6;
// Σταθερές τιμές
const float TEMP_MARGIN = 0.5;
float targetTemp = 37.5;
float targetHumidity = 50;
// Παράδειγμα DHT22
DHT dht(DHT_PIN, DHT22);
// Παράδειγμα I2C LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
//μοτερ αυγων
const int EGG_MOTOR_PIN = 13;
const unsigned long EGG_TURN_INTERVAL = 100000; // 2 ώρες σε χιλιοστά του δευτερολέπτου
const unsigned long EGG_TURN_DURATION = 6000; // 1 λεπτό σε χιλιοστά του δευτερολέπτου
int eggMotor=EGG_MOTOR_PIN;
unsigned long previousEggTurnTime = 0;
unsigned long eggTurnStartTime = 0;
bool eggTurning = false;
void setup() {
Serial.begin(9600);
dht.begin();
pinMode(HEATER_PIN, OUTPUT);
pinMode(FAN_PIN, OUTPUT);
pinMode(BUTTON_TEMP_UP_PIN, INPUT_PULLUP);
pinMode(BUTTON_TEMP_DOWN_PIN, INPUT_PULLUP);
pinMode(BUTTON_HUMIDITY_UP_PIN, INPUT_PULLUP);
pinMode(BUTTON_HUMIDITY_DOWN_PIN, INPUT_PULLUP);
// Αρχικοποίηση LCD
lcd.init();
lcd.backlight();
pinMode(eggMotor,OUTPUT);
digitalWrite(eggMotor, LOW); // Αρχική θέση
}
void loop() {
// Διαβάστε τη θερμοκρασία και την υγρασία
float temp = dht.readTemperature();
float humidity = dht.readHumidity();
// Έλεγχος θερμάστρας και ανεμιστήρα
if (temp < targetTemp - TEMP_MARGIN) {
digitalWrite(HEATER_PIN, HIGH);
} else {
digitalWrite(HEATER_PIN, LOW);
}
if (humidity < targetHumidity) {
digitalWrite(FAN_PIN, HIGH);
} else {
digitalWrite(FAN_PIN, LOW);
}
// Ελέγξτε τα κουμπιά και προσαρμόστε τη θερμοκρασία και την υγρασία
if (digitalRead(BUTTON_TEMP_UP_PIN) == LOW) {
targetTemp += 0.1;
delay(200);
}
if (digitalRead(BUTTON_TEMP_DOWN_PIN) == LOW) {
targetTemp -= 0.1;
delay(200);
}
if (digitalRead(BUTTON_HUMIDITY_UP_PIN) == LOW) {
targetHumidity += 1;
delay(200);
}
if (digitalRead(BUTTON_HUMIDITY_DOWN_PIN) == LOW) {
targetHumidity -= 1;
delay(200);
}
unsigned long currentTime = millis();
if (!eggTurning && currentTime - previousEggTurnTime >= EGG_TURN_INTERVAL) {
eggTurning = true;
eggTurnStartTime = currentTime;
digitalWrite(eggMotor, HIGH); // Ενεργοποίηση κινητήρα για να γυρίσει τα αυγά
}
if (eggTurning && currentTime - eggTurnStartTime >= EGG_TURN_DURATION) {
eggTurning = false;
previousEggTurnTime = currentTime;
digitalWrite(eggMotor, LOW); // Απενεργοποίηση κινητήρα και επιστροφή στην αρχική θέση
}
// Εμφάνιση θερμοκρασίας, υγρασίας και στόχων στην οθόνη LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("T: ");
lcd.print(temp);
lcd.print(" C S:");
lcd.print(targetTemp);
lcd.setCursor(0, 1);
lcd.print("H: ");
lcd.print(humidity);
lcd.print(" % S:");
lcd.print(targetHumidity);
// Περιμένετε προτού διαβάσετε ξανά
delay(2000);
}