Приветствую народ! Глючит данный скетч. По работе программы в идеале как я задумал. По RTC часам и состоянию геркон-поплавка(Poplavok1_PIN притянут к земле и установлен в LOW) включается нагрузка на rele1, при достижении контрольного времени, или замыкании геркона Poplavok1_PIN нагрузка отключается и происходит перелив во вторую ёмкость, в которой срабатывает Poplavok2_PIN и активирует rele2. Проблема в том, что програма работает не стабильно, бывает 2 дня нормально, а бывает выставляет все выходы в хай и зависает намертво. Поплавки руками замыкал во время "удачных" пусков по таймеру - работали. сама плата ардуино уно р3 мега32у4 + мега328 дип питается от кренки и от необслуживаемой батареи 12в, поплавки герконы через резистор 10к подтянуты к земле. модуль ds1307 готовый китайчатинка, проверял на другой самоделке - работает. и собственно сам код Код (C++): #include <Wire.h> #define DS1307_I2C_ADDRESS 0x68 int Poplavok1_PIN = 4; int Poplavok2_PIN = 5; int rele1 = 6; int rele2 = 7; int val = 0; /////////// часы byte decToBcd(byte val) { return ( (val / 10 * 16) + (val % 10) ); } byte bcdToDec(byte val) { return ( (val / 16 * 10) + (val % 16) ); } void getDateDs1307(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.write(0); Wire.endTransmission(); Wire.requestFrom(DS1307_I2C_ADDRESS, 7); *second = bcdToDec(Wire.read() & 0x7f); *minute = bcdToDec(Wire.read()); *hour = bcdToDec(Wire.read() & 0x3f); *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec(Wire.read()); *month = bcdToDec(Wire.read()); *year = bcdToDec(Wire.read()); } void setup() { Wire.begin(); pinMode(rele1, OUTPUT); digitalWrite(rele1, LOW); pinMode(rele2, OUTPUT); pinMode(Poplavok1_PIN, INPUT); pinMode(Poplavok2_PIN, INPUT); } void loop() { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); int currentTime = hour * 60 + minute; int tOn1 = 540; int tOff1 = 548; if (currentTime >= tOn1 && digitalRead(Poplavok1_PIN) == LOW) { digitalWrite(rele1, HIGH); } if (currentTime >= tOff1 || digitalRead(Poplavok1_PIN) == HIGH) { digitalWrite(rele1, LOW); } //first timer int tOn2 = 720; int tOff2 = 728; if (currentTime >= tOn2 && digitalRead(Poplavok1_PIN) == LOW) { digitalWrite(rele1, HIGH); } if (currentTime >= tOff2 || digitalRead(Poplavok1_PIN) == HIGH) { digitalWrite(rele1, LOW); } //second timer int tOn3 = 900; int tOff3 = 908; if (currentTime >= tOn3 && digitalRead(Poplavok1_PIN) == LOW) { digitalWrite(rele1, HIGH); } if (currentTime >= tOff3 || digitalRead(Poplavok1_PIN) == HIGH) { digitalWrite(rele1, LOW); } // 3 timer int tOn4 = 1080; int tOff4 = 1088; if (currentTime >= tOn4 && digitalRead(Poplavok1_PIN) == LOW) { digitalWrite(rele1, HIGH); } if (currentTime >= tOff4 || digitalRead(Poplavok1_PIN) == HIGH) { digitalWrite(rele1, LOW); } //4 timer val = digitalRead(Poplavok2_PIN); digitalWrite(rele2, val); }