#define CLK 0
#define DT 1
#define SW 9
#define RST 16
#define CLK_rts 14
#define DAT 4
#define ventilation 6
#define heater 5
#define Light 7
#define disinfection 8
#define FILTER_STEP 3000
#define disk1 0x50
#include <LiquidCrystal_I2C_OLED.h>
#include <Servo.h>
#include <iarduino_RTC.h>
#include "GyverEncoder.h"
#include "iarduino_DHT.h"
#include <Wire.h>
Encoder enc1(CLK, DT, SW, 2);
iarduino_DHT sensor(A0);
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo servo;
iarduino_RTC Time (RTC_DS1302, RST, CLK_rts, DAT); //назначение пинов обмена данными RST, CLK, DAT
int hours1 = 0, h1, hours2 = 0, h2, hours3 = 0, h3, minutes1 = 0, m1, minutes2 = 0, m2, minutes3 = 0, m3, T1, pos = 0, TimsWorker, Temp1, Hum1, light_On_H, LightEepromOn_H, light_Off_H, LightEepromOff_H, counter = 15, counterEeprom,light_On_m, LightEepromOn_m, light_Off_m, LightEepromOff_m, On_Off1 = true, On_Off2 = true, On_Off3 = false;
unsigned int address = 0, address1 = 10, address2 = 20, address3 = 30, address4 = 40, address5 = 50, address6 = 60, address7 = 70, address8 = 80, address9 = 90, address10 = 100, address11 = 110, address12 = 120, address13 = 150, address14 = 160, address15 = 170, address16 = 180;
unsigned long filter_timer, filter_timer2, TimeWork, home_timerMenu;
int ench = 0, enc = 0,secT, minT, hoursT, dayT, monthT, weekdayT, yearT, cliCk = 0, userTemp = 15ul, userHum = 70ul, val_humidity, val_temperature, humidity, temperature, LigtOnOff;
boolean qr = true, QR = true, W2 = false, W3 = false, w, On_Off1_1, On_Off2_2, On_Off3_3;
boolean statusVent = digitalRead(ventilation), statusHeat = digitalRead(heater), statusLight, disinfection_st = digitalRead(disinfection);
int resistor1 = A2,resistor2 = A3, etalon = counter, etalon_1;
unsigned int valueResistor1 = 0,valueResistor2 = 0;
boolean R1, R2, active2 = false, active1 = false, active1_2 = false, nextStege1=false, nextStege2=false, output = false, input = false, start1 = false, start2 = false;
byte c = 1, menu = 1, T_W;
byte line_2[8] =
{
B00010,
B10101,
B10101,
B01110,
B00100,
B00100,
B00100,
};
byte line_1[8] =
{
B01000,
B10100,
B01000,
B00000,
B00000,
B00000,
B00000,
};
byte line_3[8] =
{
B11000,
B01100,
B00110,
B00111,
B00110,
B01100,
B11000,
};
byte line_4[8] =
{
B00000,
B01100,
B10010,
B10000,
B10000,
B10010,
B01100,
};
byte line_5[8] =
{
B00000,
B01110,
B01111,
B00100,
B11110,
B01100,
B10010,
};
void setup() {
delay(300);
Time.begin();
Wire.begin();
pinMode(ventilation, OUTPUT);
pinMode(heater, OUTPUT);
pinMode(Light, OUTPUT);
pinMode(disinfection, OUTPUT);
digitalWrite(disinfection, LOW);
digitalWrite(ventilation, LOW);
digitalWrite(heater, LOW);
attachInterrupt(0, encoder, CHANGE);
attachInterrupt(1, encoder, CHANGE);
lcd.init();
enc1.setTickMode(AUTO);
servo.attach(15);
filter_timer = millis();
filter_timer2 = millis();
lcd.createChar(1, line_1);
lcd.createChar(2, line_2);
lcd.createChar(3, line_3);
lcd.createChar(4, line_4);
lcd.createChar(5, line_5);
lcd.clear();
hours1 = readEEPROM(disk1, address ); h1 = hours1;
minutes1 = readEEPROM(disk1, address1 ); m1 = minutes1;
hours2 = readEEPROM(disk1, address2 ); h2 = hours2;
minutes2 = readEEPROM(disk1, address3 ); m2 = minutes2;
hours3 = readEEPROM(disk1, address4 ); h3 = hours3;
minutes3 = readEEPROM(disk1, address5 ); m3 = minutes3;
userTemp = readEEPROM(disk1, address6);Temp1 = userTemp;
userHum = readEEPROM(disk1, address7);Hum1 = userHum;
etalon_1 = readEEPROM(disk1, address8 ); counterEeprom = etalon_1; counter = etalon_1;
light_On_H = readEEPROM(disk1, address9 ); LightEepromOn_H = light_On_H ;
light_Off_H = readEEPROM(disk1, address10); LightEepromOff_H = light_Off_H;
light_On_m = readEEPROM(disk1, address11); LightEepromOn_m = light_On_m ;
light_Off_m = readEEPROM(disk1, address12); LightEepromOff_m = light_Off_m;
On_Off1 = readEEPROM(disk1, address14); On_Off1_1 = On_Off1 ;
On_Off2 = readEEPROM(disk1, address15); On_Off2_2 = On_Off2 ;
On_Off3 = readEEPROM(disk1, address16); On_Off3_3 = On_Off3 ;
T_W = readEEPROM(disk1, address13); TimsWorker = T_W * 100; T1 = TimsWorker;
Time.gettime();yearT=Time.year;
}
void loop() {
Time.period(5);
if (enc1.isClick ()) {
if (millis() - home_timerMenu != 0 && QR == false){
lcd.noBacklight();
home_timerMenu = 0;
QR = true;
}else{
lcd.backlight();home_timerMenu = millis(); QR = false; w = true;
}
}
if (enc1.isHolded()) {
cliCk += 1;
}
if (cliCk != 0) {
cliCk = 0; home_timerMenu = millis();
switch (menu) {
case 1: statusLight = digitalRead(Light);
if(statusLight == HIGH){digitalWrite (Light,LOW);
}
else {digitalWrite (Light,HIGH);
}break;
case 26: Time.settime(secT, minT, hoursT, dayT, monthT, yearT, weekdayT); break;
case 6: if (On_Off1 == true) {
On_Off1 = false;
lcd.setCursor(13, 0);
lcd.print("OFF");
if (On_Off1 != On_Off1_1){
writeEEPROM(disk1, address14, On_Off1);
On_Off1_1=On_Off1;
}}
else {
On_Off1 = true ;
lcd.setCursor(13, 0);
lcd.print("ON ");
if (On_Off1 != On_Off1_1){
writeEEPROM(disk1, address14, On_Off1);
On_Off1_1=On_Off1;
}} break;
case 9: if (On_Off2 == true) {
On_Off2 = false;
lcd.setCursor(13, 1);
lcd.print("OFF");
if (On_Off2 != On_Off2_2){
writeEEPROM(disk1, address15, On_Off2);
On_Off2_2=On_Off2;
}
}
else {
On_Off2 = true ;
lcd.setCursor(13, 1);
lcd.print("ON ");
if (On_Off2 != On_Off2_2){
writeEEPROM(disk1, address15, On_Off2);
On_Off2_2=On_Off2;
}
} break;
case 12: if (On_Off3 == true) {
On_Off3 = false;
lcd.setCursor(13, 0);
lcd.print("OFF");
if (On_Off3 != On_Off3_3){
writeEEPROM(disk1, address16, On_Off3);
On_Off3_3=On_Off3;
}
}
else {
On_Off3 = true ;
lcd.setCursor(13, 0);
lcd.print("ON ");
if (On_Off3 != On_Off3_3){
writeEEPROM(disk1, address16, On_Off3);
On_Off3_3=On_Off3;
}
} break;
case 13: if (counterEeprom != etalon_1){
lcd.setCursor(13, 1); lcd.print(etalon_1);
counterEeprom = etalon_1;
}break;
case 18: switch (c) {
case 1: servoOpen(); servoToClose(); break;
case 2: W2 = true; servoOpen(); TimeWork = millis(); break;
case 3: W3 = true; servoOpen(); TimeWork = millis(); break;
}
}
}
if (enc1.isTurn()) {
lcd.backlight(); home_timerMenu = millis(); QR = false; w = true;
if (enc != 0) {
menu += enc;
enc = 0;
if (menu > 26) {
menu = 1;
} if (menu < 1) {
menu = 26;
}
}
switch (menu) {
case 1: if (w == true) {
lcd.clear();
lcd.setCursor(1, 0); lcd.print("t"); lcd.write(1); lcd.setCursor(3, 0); lcd.print(val_temperature); lcd.write(4); lcd.write(1); lcd.setCursor(8, 0); lcd.print(Time.gettime("H:i:s"));
lcd.setCursor(1, 1); lcd.write(2); lcd.setCursor(3, 1); lcd.print(val_humidity);lcd.print("%");lcd.setCursor(12, 1); lcd.write(5); lcd.setCursor(13, 1); lcd.print(counter);w = false;
} break;
case 2: if (w == true) {
lcd.clear(); userTemp += ench; ench = 0;
if (Temp1 != userTemp){
writeEEPROM(disk1, address6, userTemp);
} lcd.setCursor(0, 0); lcd.write(3); lcd.setCursor(1, 0); lcd.print("t"); lcd.write(1); lcd.setCursor(3, 0); lcd.print(userTemp); lcd.write(4); lcd.write(1); lcd.setCursor(8, 0); lcd.print("users");
lcd.setCursor(1, 1); lcd.write(2); lcd.setCursor(3, 1); lcd.print(userHum); lcd.print("%"); lcd.setCursor(8, 1); lcd.print("users"); w = false;
} break;
case 3: if (w == true) {
lcd.clear(); userHum += ench; ench = 0;
if (Hum1 != userHum){
writeEEPROM(disk1, address7, userHum);
} lcd.setCursor(1, 0); lcd.print("t"); lcd.write(1); lcd.setCursor(3, 0); lcd.print(userTemp); lcd.write(4); lcd.write(1); lcd.setCursor(8, 0); lcd.print("users");
lcd.setCursor(0, 1); lcd.write(3); lcd.setCursor(1, 1); lcd.write(2); lcd.setCursor(3, 1); lcd.print(userHum); lcd.print("%"); lcd.setCursor(8, 1); lcd.print("users"); w = false;
} break;
case 4: if (w == true) {
lcd.clear(); hours1 += ench; ench = 0; if (hours1 > 23) {
hours1 = 0;
} if (hours1 < 0) {
hours1 = 23;
} if (h1 != hours1) {
writeEEPROM(disk1, address, hours1);
h1 = hours1;
} if (On_Off1 == true) {
lcd.setCursor(13, 0);
lcd.print("ON ");
} else {
lcd.setCursor(13, 0);
lcd.print("OFF");
} if (On_Off2 == true) {
lcd.setCursor(13, 1);
lcd.print("ON ");
} else {
lcd.setCursor(13, 1);
lcd.print("OFF");
}
lcd.setCursor(4, 0); lcd.write(3); lcd.setCursor(0, 0); lcd.print("Food"); lcd.setCursor(7, 0); lcd.print("h"); lcd.setCursor(5, 0); lcd.print(hours1); lcd.setCursor(11, 0); lcd.print("m"); lcd.setCursor(9, 0); lcd.print(minutes1);
lcd.setCursor(0, 1); lcd.print("Food"); lcd.setCursor(7, 1); lcd.print("h"); lcd.setCursor(5, 1); lcd.print(hours2); lcd.setCursor(11, 1); lcd.print("m"); lcd.setCursor(9, 1); lcd.print(minutes2); w = false;
} break;
case 5: if (w == true) {
lcd.clear(); minutes1 += ench; ench = 0; if (minutes1 > 59) {
minutes1 = 0;
} if (minutes1 < 0) {
minutes1 = 59;
} if (m1 != minutes1) {
writeEEPROM(disk1, address1, minutes1);
m1 = minutes1;
} if (On_Off1 == true) {
lcd.setCursor(13, 0);
lcd.print("ON ");
} else {
lcd.setCursor(13, 0);
lcd.print("OFF");
} if (On_Off2 == true) {
lcd.setCursor(13, 1);
lcd.print("ON ");
} else {
lcd.setCursor(13, 1);
lcd.print("OFF");
}
lcd.setCursor(0, 0); lcd.print("Food"); lcd.setCursor(7, 0); lcd.print("h"); lcd.setCursor(8, 0); lcd.write(3); lcd.setCursor(5, 0); lcd.print(hours1); lcd.setCursor(11, 0); lcd.print("m"); lcd.setCursor(9, 0); lcd.print(minutes1);
lcd.setCursor(0, 1); lcd.print("Food"); lcd.setCursor(7, 1); lcd.print("h"); lcd.setCursor(5, 1); lcd.print(hours2); lcd.setCursor(11, 1); lcd.print("m"); lcd.setCursor(9, 1); lcd.print(minutes2); w = false;
} break;
case 6: if (w == true) {lcd.clear();
if (On_Off1 == true) {
lcd.setCursor(13, 0);
lcd.print("ON ");
} else {
lcd.setCursor(13, 0);
lcd.print("OFF");
} if (On_Off2 == true) {
lcd.setCursor(13, 1);
lcd.print("ON ");
} else {
lcd.setCursor(13, 1);
lcd.print("OFF");
}
lcd.setCursor(0, 0); lcd.print("Food"); lcd.setCursor(7, 0); lcd.print("h"); lcd.setCursor(5, 0); lcd.print(hours1); lcd.setCursor(11, 0); lcd.print("m"); lcd.setCursor(9, 0); lcd.print(minutes1);
lcd.setCursor(0, 1); lcd.print("Food"); lcd.setCursor(7, 1); lcd.print("h"); lcd.setCursor(5, 1); lcd.print(hours2); lcd.setCursor(11, 1); lcd.print("m"); lcd.setCursor(9, 1); lcd.print(minutes2);
lcd.setCursor(12, 0); lcd.write(3);w = false;
}break;
case 7: if (w == true) {
lcd.clear(); hours2 += ench; ench = 0; if (hours2 > 23) {
hours2 = 0;
} if (hours2 < 0) {
hours2 = 23;
} if (h2 != hours2) {
writeEEPROM(disk1, address2, hours2);
h2 = hours2;
} if (On_Off1 == true) {
lcd.setCursor(13, 0);
lcd.print("ON ");
} else {
lcd.setCursor(13, 0);
lcd.print("OFF");
} if (On_Off2 == true) {
lcd.setCursor(13, 1);
lcd.print("ON ");
} else {
lcd.setCursor(13, 1);
lcd.print("OFF");
}
lcd.setCursor(0, 0); lcd.print("Food"); lcd.setCursor(7, 0); lcd.print("h"); lcd.setCursor(5, 0); lcd.print(hours1); lcd.setCursor(11, 0); lcd.print("m"); lcd.setCursor(9, 0); lcd.print(minutes1);
lcd.setCursor(0, 1); lcd.print("Food"); lcd.setCursor(4, 1); lcd.write(3); lcd.setCursor(7, 1); lcd.print("h"); lcd.setCursor(5, 1); lcd.print(hours2); lcd.setCursor(11, 1); lcd.print("m"); lcd.setCursor(9, 1); lcd.print(minutes2); hours2 += ench; ench = 0; w = false;
} break;
case 8: if (w == true) {
lcd.clear(); minutes2 += ench; ench = 0; if (minutes2 > 59) {
minutes2 = 0;
} if (minutes2 < 0) {
minutes2 = 59;
} if (m2 != minutes2) {
writeEEPROM(disk1, address3, minutes2);
m2 = minutes2;
} if (On_Off1 == true) {
lcd.setCursor(13, 0);
lcd.print("ON ");
} else {
lcd.setCursor(13, 0);
lcd.print("OFF");
} if (On_Off2 == true) {
lcd.setCursor(13, 1);
lcd.print("ON ");
} else {
lcd.setCursor(13, 1);
lcd.print("OFF");
}
lcd.setCursor(0, 0); lcd.print("Food"); lcd.setCursor(7, 0); lcd.print("h"); lcd.setCursor(5, 0); lcd.print(hours1); lcd.setCursor(11, 0); lcd.print("m"); lcd.setCursor(9, 0); lcd.print(minutes1);
lcd.setCursor(0, 1); lcd.print("Food"); lcd.setCursor(8, 1); lcd.write(3); lcd.setCursor(5, 1); lcd.print(hours2); lcd.setCursor(7, 1); lcd.print("h"); lcd.setCursor(11, 1); lcd.print("m"); lcd.setCursor(9, 1); lcd.print(minutes2); w = false;
} break;
case 9: if (w == true) {lcd.clear();
if (On_Off1 == true) {
lcd.setCursor(13, 0);
lcd.print("ON ");
} else {
lcd.setCursor(13, 0);
lcd.print("OFF");
} if (On_Off2 == true) {
lcd.setCursor(13, 1);
lcd.print("ON ");
} else {
lcd.setCursor(13, 1);
lcd.print("OFF");
}
lcd.setCursor(0, 0); lcd.print("Food"); lcd.setCursor(7, 0); lcd.print("h"); lcd.setCursor(5, 0); lcd.print(hours1); lcd.setCursor(11, 0); lcd.print("m"); lcd.setCursor(9, 0); lcd.print(minutes1);
lcd.setCursor(0, 1); lcd.print("Food"); lcd.setCursor(7, 1); lcd.print("h"); lcd.setCursor(5, 1); lcd.print(hours2); lcd.setCursor(11, 1); lcd.print("m"); lcd.setCursor(9, 1); lcd.print(minutes2); w = false;
lcd.setCursor(12, 1); lcd.write(3);
}break;
case 10: if (w == true) {
lcd.clear(); hours3 += ench; ench = 0; if (hours3 > 23) {
hours3 = 0;
} if (hours3 < 0) {
hours3 = 23;
} if (h3 != hours3) {
writeEEPROM(disk1, address4, hours3);
h3 = hours3;
} if (On_Off3 == true) {
lcd.setCursor(13, 0);
lcd.print("ON ");
} else {
lcd.setCursor(13, 0);
lcd.print("OFF");
}
lcd.setCursor(0, 0); lcd.print("Food");lcd.setCursor(4, 0); lcd.write(3); lcd.setCursor(7, 0); lcd.print("h"); lcd.setCursor(5, 0); lcd.print(hours3); lcd.setCursor(11, 0); lcd.print("m"); lcd.setCursor(9, 0); lcd.print(minutes3);
lcd.setCursor(0, 1); lcd.print("counter");lcd.setCursor(11, 1); lcd.write(5); lcd.setCursor(13, 1); lcd.print(etalon_1); w = false;
} break;
case 11: if (w == true) {
lcd.clear(); minutes3 += ench; ench = 0; if (minutes3 > 59) {
minutes3 = 0;
} if (minutes3 < 0) {
minutes3 = 59;
} if (m3 != minutes3) {
writeEEPROM(disk1, address5, minutes3);
m3 = minutes3;
} if (On_Off3 == true) {
lcd.setCursor(13, 0);
lcd.print("ON ");
} else {
lcd.setCursor(13, 0);
lcd.print("OFF");
}
lcd.setCursor(0, 0); lcd.print("Food"); lcd.setCursor(8, 0); lcd.write(3); lcd.setCursor(7, 0); lcd.print("h"); lcd.setCursor(5, 0); lcd.print(hours3); lcd.setCursor(11, 0); lcd.print("m"); lcd.setCursor(9, 0); lcd.print(minutes3);
lcd.setCursor(0, 1); lcd.print("counter"); lcd.setCursor(11, 1); lcd.write(5);lcd.setCursor(13, 1); lcd.print(etalon_1); w = false;
} break;
case 12: if (w == true) {lcd.clear();
if (On_Off3 == true) {
lcd.setCursor(13, 0);
lcd.print("ON ");
} else {
lcd.setCursor(13, 0);
lcd.print("OFF");
}
lcd.setCursor(0, 0); lcd.print("Food"); lcd.setCursor(7, 0); lcd.print("h"); lcd.setCursor(5, 0); lcd.print(hours3); lcd.setCursor(11, 0); lcd.print("m"); lcd.setCursor(9, 0); lcd.print(minutes3); lcd.setCursor(12, 0); lcd.write(3);
lcd.setCursor(0, 1); lcd.print("counter");lcd.setCursor(11, 1); lcd.write(5); lcd.setCursor(13, 1); lcd.print(etalon_1); w = false;
} break;
case 13: if (w == true) {lcd.clear();
etalon_1 += ench; ench = 0; if (etalon_1 > 999) {
etalon_1 = 0;
} if (etalon_1 < 0) {
etalon_1 = 999;
} if (On_Off3 == true) {
lcd.setCursor(13, 0);
lcd.print("ON ");
} else {
lcd.setCursor(13, 0);
lcd.print("OFF");
}
if (etalon_1 != counterEeprom) {
writeEEPROM(disk1, address8, etalon_1);
counterEeprom = etalon_1;
}
lcd.setCursor(0, 0); lcd.print("Food"); lcd.setCursor(7, 0); lcd.print("h"); lcd.setCursor(5, 0); lcd.print(hours3); lcd.setCursor(11, 0); lcd.print("m"); lcd.setCursor(9, 0); lcd.print(minutes3);
lcd.setCursor(0, 1); lcd.print("counter");lcd.setCursor(11, 1); lcd.write(5); lcd.setCursor(12, 1); lcd.write(3); lcd.setCursor(13, 1); lcd.print(etalon_1); w = false;
} break;
case 14: if (w == true) {
lcd.clear(); light_On_H += ench; ench = 0; if (light_On_H > 59) {
light_On_H = 0;
} if (light_On_H < 0) {
light_On_H = 23;
} if (LightEepromOn_H != light_On_H) {
writeEEPROM(disk1, address9, light_On_H);
LightEepromOn_H = light_On_H;
}
lcd.setCursor(0, 0); lcd.print("Light_On"); lcd.setCursor(10, 0); lcd.write(3); lcd.setCursor(11, 0); lcd.print(light_On_H); lcd.setCursor(14, 0); lcd.print(light_On_m);
lcd.setCursor(0, 1); lcd.print("Light_Off"); lcd.setCursor(11, 1); lcd.print(light_Off_H); lcd.setCursor(14, 1); lcd.print(light_Off_m); w = false;
} break;
case 15: if (w == true) {
lcd.clear(); light_On_m += ench; ench = 0; if (light_On_m > 59) {
light_On_m = 0;
} if (light_On_m < 0) {
light_On_m = 59;
} if (LightEepromOn_m != light_On_m) {
writeEEPROM(disk1, address11, light_On_m);
LightEepromOn_m = light_On_m;
}
lcd.setCursor(0, 0); lcd.print("Light_On"); lcd.setCursor(11, 0); lcd.print(light_On_H);lcd.setCursor(13, 0); lcd.write(3); lcd.setCursor(14, 0); lcd.print(light_On_m);
lcd.setCursor(0, 1); lcd.print("Light_Off"); lcd.setCursor(11, 1); lcd.print(light_Off_H); lcd.setCursor(14, 1); lcd.print(light_Off_m); w = false;
} break;
case 16: if (w == true) {
lcd.clear(); light_Off_H += ench; ench = 0; if (light_Off_H > 59) {
light_Off_H = 0;
} if (light_Off_H < 0) {
light_Off_H = 23;
} if (LightEepromOff_H != light_Off_H) {
writeEEPROM(disk1, address10, light_Off_H);
LightEepromOff_H = light_Off_H;
}
lcd.setCursor(0, 0); lcd.print("Light_On"); lcd.setCursor(11, 0); lcd.print(light_On_H); lcd.setCursor(14, 0); lcd.print(light_On_m);
lcd.setCursor(0, 1); lcd.print("Light_Off"); lcd.setCursor(10, 1); lcd.write(3);lcd.setCursor(11, 1); lcd.print(light_Off_H); lcd.setCursor(14, 1); lcd.print(light_Off_m); w = false;
} break;
case 17: if (w == true) {
lcd.clear(); light_Off_m += ench; ench = 0; if (light_Off_m > 59) {
light_Off_m = 0;
} if (light_Off_m < 0) {
light_Off_m = 59;
} if (LightEepromOff_m != light_Off_m) {
writeEEPROM(disk1, address12, light_Off_m);
LightEepromOff_m = light_Off_m;
}
lcd.setCursor(0, 0); lcd.print("Light_On"); lcd.setCursor(11, 0); lcd.print(light_On_H); lcd.setCursor(14, 0); lcd.print(light_On_m);
lcd.setCursor(0, 1); lcd.print("Light_Off"); lcd.setCursor(11, 1); lcd.print(light_Off_H);lcd.setCursor(13, 1); lcd.write(3); lcd.setCursor(14, 1); lcd.print(light_Off_m); w = false;
} break;
case 18: lcd.clear(); c += ench; ench = 0; if (c > 3) {
c = 3;
} if (c < 1) {
c = 1;
} lcd.setCursor(0, 0); lcd.print("DokopM");lcd.setCursor(7,0); lcd.write(3); lcd.setCursor(10, 1); lcd.print(TimsWorker);
switch (c) {
case 1: lcd.setCursor(8, 0); lcd.print("Experemen"); break;
case 2: lcd.setCursor(8, 0); lcd.print("1/2 "); break;
case 3: lcd.setCursor(8, 0); lcd.print("Doza "); break;
} break;
case 19: if (w == true) {
lcd.clear(); T_W += ench; ench = 0; TimsWorker = T_W * 100; if (TimsWorker < 100) {
TimsWorker = 100;
} if (TimsWorker > 20000) {
TimsWorker = 20000;
} if (T1 != TimsWorker) {
writeEEPROM(disk1, address13, T_W);
T1 = TimsWorker;
}
lcd.setCursor(0, 1); lcd.write(3); lcd.setCursor(2, 1); lcd.print("TimsWork"); lcd.setCursor(10, 1); lcd.print(TimsWorker); w = false;
} break;
case 20: if (w == true){Time.gettime(); hoursT=Time.Hours ;minT=Time.minutes ;secT=Time.seconds; dayT=Time.day; monthT=Time.month; weekdayT=Time.weekday;
lcd.clear(); secT += ench; ench = 0; if (secT > 60){
secT = 0;
} if (secT < 0){
secT = 60;
}
lcd.setCursor(1, 0); lcd.write(3); lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w");
lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1);lcd.print("20"); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false;
} break;
case 21: if (w == true){
lcd.clear(); minT += ench; ench = 0; if (minT > 60){
minT = 0;
} if (minT < 0){
minT = 60;
}
lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(5, 0); lcd.write(3); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w");
lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1);lcd.print("20"); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false;
} break;
case 22: if (w == true) {
lcd.clear(); hoursT += ench; ench = 0; if (hoursT > 23) {
hoursT = 0;
} if (hoursT < 0) {
hoursT = 23;
}
lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(9, 0); lcd.write(3); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w");
lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1);lcd.print("20"); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false;
} break;
case 23: if (w == true) {
lcd.clear(); weekdayT += ench; ench = 0; if (weekdayT > 7) {
weekdayT = 1;
} if (weekdayT < 1) {
weekdayT = 7;
}
lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(13, 0); lcd.write(3); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w");
lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1);lcd.print("20"); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false;
} break;
case 24: if (w == true) {
lcd.clear(); dayT += ench; ench = 0; if (dayT > 31) {
dayT = 1;
} if (dayT < 1) {
dayT = 31;
}
lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w");
lcd.setCursor(1, 1); lcd.write(3); lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1);lcd.print("20"); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false;
} break;
case 25: if (w == true) {
lcd.clear(); monthT += ench; ench = 0; if (monthT > 12) {
monthT = 1;
} if (monthT < 1) {
monthT = 12;
}
lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w");
lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(5, 1); lcd.write(3); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(10, 1);lcd.print("20"); lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false;
} break;
case 26: if (w == true) {
lcd.clear(); yearT += ench; ench = 0; if (yearT < 21) {
yearT = 21;
} if (yearT > 99) {
yearT = 99;
}
lcd.setCursor(2, 0); lcd.print(secT); lcd.setCursor(4, 0); lcd.print("s"); lcd.setCursor(6, 0); lcd.print(minT); lcd.setCursor(8, 0); lcd.print("m"); lcd.setCursor(10, 0); lcd.print(hoursT); lcd.setCursor(12, 0); lcd.print("h"); lcd.setCursor(14, 0); lcd.print(weekdayT); lcd.setCursor(16, 0); lcd.print("w");
lcd.setCursor(2, 1); lcd.print(dayT); lcd.setCursor(4, 1); lcd.print("d"); lcd.setCursor(6, 1); lcd.print(monthT); lcd.setCursor(8, 1); lcd.print("m"); lcd.setCursor(9, 1); lcd.write(3); lcd.setCursor(10, 1); lcd.print("20");lcd.print(yearT); lcd.setCursor(14, 1); lcd.print("yr"); w = false;
} break;
}
}
if (menu == 1) {
if (millis() - filter_timer2 > 1000ul) {
statusVent = digitalRead(ventilation); statusHeat = digitalRead(heater);
lcd.setCursor(1, 0); lcd.print("t"); lcd.write(1); lcd.setCursor(3, 0); lcd.print(val_temperature); lcd.write(4); lcd.write(1); lcd.setCursor(8, 0); lcd.print(Time.gettime("H:i:s"));
lcd.setCursor(1, 1); lcd.write(2); lcd.setCursor(3, 1); lcd.print(val_humidity);lcd.print("%"); filter_timer2 = millis();lcd.setCursor(12, 1); lcd.write(5); lcd.setCursor(13, 1); lcd.print(counter);
}
}
Time.gettime();
if (On_Off1 == true && qr == true && Time.Hours == hours1 && Time.minutes == minutes1 && Time.seconds <= 0.5) {
qr = false; QR = false; TimeWork = millis(); home_timerMenu = millis(); lcd.backlight(); servoOpen();
}
if (On_Off2 == true && qr == true && Time.Hours == hours2 && Time.minutes == minutes2 && Time.seconds <= 0.5) {
qr = false; QR = false; TimeWork = millis(); home_timerMenu = millis(); lcd.backlight(); servoOpen();
}
if (On_Off3 == true && qr == true && Time.Hours == hours3 && Time.minutes == minutes3 && Time.seconds <= 0.5) {
qr = false; QR = false; TimeWork = millis(); home_timerMenu = millis(); lcd.backlight(); servoOpen();
}
statusLight = digitalRead(Light);
if (statusLight == LOW && Time.Hours == light_On_H && Time.minutes == light_On_m && Time.seconds <= 0.5 ){digitalWrite (Light, HIGH);
}else if (statusLight == HIGH && Time.Hours == light_Off_H && Time.minutes == light_Off_m && Time.seconds <= 0.5 ){digitalWrite (Light, LOW);
}
if (val_humidity - userHum> 10 && statusVent == LOW ){digitalWrite (ventilation, HIGH);}
else if (userHum - val_humidity> 10 && statusVent == HIGH ){digitalWrite (ventilation, LOW);}
if (userTemp - val_temperature > 4 && statusHeat == LOW ) {digitalWrite (heater, HIGH);}//15-10=5>4 и вкл то выкл
else if (val_temperature - userTemp > 4 && statusHeat == HIGH) {digitalWrite (heater, LOW);}
if (millis() - TimeWork >= TimsWorker / 2 && W2 == true ) {
servoToClose();
W2 = false;
TimeWork = 0;
}
if (millis() - TimeWork >= TimsWorker && W3 == true) {
servoToClose();
W3 = false;
TimeWork = 0;
}
if (millis() - TimeWork >= TimsWorker && qr == false) {
servoToClose();
qr = true ;
}
if (millis() - home_timerMenu >= 30000 && QR == false) {
lcd.noBacklight();
lcd.clear();
home_timerMenu = 0;
QR = true;
menu = 1;
c = 1;
}
if (millis() - filter_timer > FILTER_STEP) {
filter_timer = millis();
switch (sensor.read()) {
case DHT_OK: humidity = sensor.hum; temperature = sensor.tem;
val_humidity = (val_humidity * 5 + humidity ) / 6;
val_temperature = (val_temperature * 5 + temperature) / 6;
if (menu == 1) {
lcd.setCursor(7, 1);
lcd.print(" ");
} break;
default: lcd.setCursor(7, 1); lcd.print("ERROR"); break;
}
}
valueResistor1 = analogRead(resistor1);
valueResistor2 = analogRead(resistor2);
if(valueResistor1 >= 800){ R1=true; }
else R1=false;
if(valueResistor2 >= 800){ R2=true; }
else R2=false;
if (R2 == false) {active2=true;}
else active2 = false;
if (R1 == false) {active1=true;}
else active1 = false;
if (counter > etalon_1){counter = etalon_1;}
if (active1==true && active2==false&&start1 == false) {output = true;} //первый сработал вход
if (active1==true && active2==true) {start2 = true;}
if (start2 == true){
if (active1 == true && active2 == true && output == true){ active1_2 = true;} // сработали оба
if (active1_2 == true && active2 == true && active1 == false && output == true ){nextStege1=true;}//срабатывали оба, сработан выход,не сработан вход,первый сработал вход
if (nextStege1== true && active1 == true && active2 == false && output == true ){nextStege1 = false;}//срабатывали оба, сработан выход,не сработан вход,первый сработал вход
if (nextStege1==true && active1 == false && active2 == false && output == true){ counter ++;active1_2 =false;nextStege1 = false;output = false;}
if (active1 == false && active2 == false&&start2 == true){start2 = false;}
}
if (active2==true && active1==false&&start2 == false) {input = true;} //первый сработал выход
if (active1==true && active2==true) {start1 = true;}
if (start1 == true){
if (active1 == true && active2 == true && input == true){ active1_2 = true;}// сработали оба
}
if (active1_2 == true && active1 == true && active2 == false && input == true ) {nextStege2=true;}//срабатывали оба,не сработан выход, сработан вход,первый сработал выход
if (nextStege2== true && active2 == true && active1 == false && input == true ) {nextStege2 = false;}//срабатывали оба, сработан выход,не сработан вход,первый сработал вход
if (nextStege2==true && active1 == false && active2 == false && input == true){counter --; if (counter < 0){counter = 0;} active1_2 = false;nextStege2 = false; input = false;}
if (active1 == false && active2 == false&&start1 == true){start1 = false;}
if (etalon_1 != etalon){
etalon = etalon_1;
if(menu==10 || menu==11 || menu==12 || menu==13){
lcd.setCursor(13, 1); lcd.print(etalon_1);
}
}
if (counter <= 0){disinfection_st = digitalRead(disinfection);
if (disinfection_st == LOW){digitalWrite(disinfection,HIGH);
}}
if(counter >= 1){disinfection_st = digitalRead(disinfection);
if(disinfection_st == HIGH){digitalWrite(disinfection,LOW);
}}
}
void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data ) {
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.write(data);
Wire.endTransmission();
delay(5);
}
byte readEEPROM(int deviceaddress, unsigned int eeaddress ) {
byte rdata = 0xFF;
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)) ;
Wire.write((int)(eeaddress & 0xFF)) ;
Wire.endTransmission();
Wire.requestFrom(deviceaddress, 1);
if (Wire.available()) {rdata = Wire.read();}
return rdata;
}
void servoOpen() {
for (pos = 90; pos >= 0; pos -= 1) {
servo.write(pos);
delay(5);
}
if(menu==18){lcd.setCursor(4, 1);
lcd.print("OPEN");
}}
void servoToClose() {
for (pos = 0; pos <= 90; pos += 1) {
servo.write(pos);
delay(5);
}
servoDo();
}
void servoDo() {
for (pos = 90; pos >= 88; pos -= 1) {
servo.write(pos);
delay(5);
}
if(menu==18){lcd.setCursor(4, 1);
lcd.print("CLOSE ");
}}
void encoder () {
if (enc1.isRight ()) {
enc ++;
}
if (enc1.isLeft ()) {
enc --;
}
if (enc1.isRightH()) {
ench++;
}
if (enc1.isLeftH ()) {
ench--;
}
}
Не могу понять, по чему сервопривод дергается каждую секунду. Подскажите пожалуйста