#include "DHT.h"
#define DHTPIN 5
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
//temperature, vologist,chastota provitren, chastota perevorotu, truvalist perevorotu
double numbers[21][5] = { {37.4, 70, 60, 288, 600},{37.4, 70, 60, 288, 600},{37.4, 70, 60, 288, 600},{37.4, 70, 60, 288, 600},{37.4, 70, 60, 288, 600},{37.4, 70, 60, 288, 600},{37.4, 70, 60, 288, 600},{37.4, 70, 60, 288, 600},{37.4, 70, 60, 288, 600},{37.4, 70, 60, 288, 600},{37.4, 70, 60, 288, 600},{37.4, 70, 60, 288, 600},{37.4, 70, 60, 288, 600},{37.4, 70, 60, 288, 600},{37.4, 70, 60, 288, 600},{37.4, 70, 60, 288, 600},{37.4, 70, 60, 288, 600},{37.4, 70, 60, 288, 600},{37.4, 70, 60, 288, 600},{37.4, 70, 60, 288, 600},{37.4, 70, 60, 288, 600}};
//time
//unsigned long millis_in_second = 1; //use it for fast test
float millis_in_second = 1; //use it for fast test
unsigned long minutes = millis_in_second*60;
unsigned long hour = millis_in_second*3600;
unsigned long day=millis_in_second*86400;
float oldtime = 0; //for timing in real time
float worktime = 0;//for timing in real time
unsigned long minworktime = 0;
int perevorot = 1;
int provitrenya = 1;
unsigned long minofday= 0;
unsigned long forperevorot=0;
//input and output port
const int heating = 13;
const int humidifier = 12;
const int ventilation = 11;
const int revolution1 = 10;
const int revolution2 = 9;
uint8_t temperature_control(uint8_t heating_level){
digitalWrite(heating, heating_level); // turn the LED on (HIGH is the voltage level)
}
uint8_t humidity_control(uint8_t humidity_level){
digitalWrite(humidifier, humidity_level); // turn the LED on (HIGH is the voltage level)
}
void setup() {
Serial.begin(115200);
Serial.println(F("DHT22 example!"));
dht.begin();
}
void loop() {
worktime = worktime+((millis()-oldtime));
oldtime=millis();
int nowday = int(worktime/day);
minofday=(worktime-(nowday*day))/minutes;
//Serial.println(int(minofday));
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
//перевірка vologosti, відповідно до дня
if (humidity<numbers[int(worktime/minutes)][1]){
humidity_control(HIGH);
}
if(humidity>numbers[int(worktime/minutes)][1]){
humidity_control(LOW);}
//перевірка температури, відповідно до дня
if (temperature<numbers[int(worktime/minutes)][0]){
temperature_control(HIGH);
}
if(temperature>numbers[int(worktime/minutes)][0]){
temperature_control(LOW);}
if(temperature>=39){
temperature_control(LOW);
}
//perevorot
if(minofday%int(numbers[nowday][3])==0 and minofday!=0){
if(perevorot%2==0){
digitalWrite(revolution1, HIGH);
delay(int(numbers[nowday][4]));
digitalWrite(revolution1, HIGH);
}else{digitalWrite(revolution1, HIGH);
delay(int(numbers[nowday][4]));
digitalWrite(revolution1, HIGH);}
Serial.print("Perevorot");
Serial.println(perevorot);
Serial.print("Den");
Serial.println(int(nowday));
// Serial.println(int(minofday));
// Serial.println(int(minutes/(numbers[int(minworktime/minutes)][3])));
perevorot++;
}
//provitrenya
if(minofday%int(numbers[nowday][2])==0 and minofday!=0&&int(numbers[nowday][2])!=0){
Serial.print("provitrenya");
Serial.println(provitrenya);
Serial.print("Den");
Serial.println(int(nowday));
// Serial.println(int(minofday));
// Serial.println(int(minutes/(numbers[int(minworktime/minutes)][2])));
digitalWrite(ventilation, HIGH);
delay(30*millis_in_second);
digitalWrite(ventilation, LOW);
/// ventilation
provitrenya++;
}}