Для особо одаренных, капельным поливом поливают и круглосуточно. Если сумеете летом найти утром росу в той же Астраханской губернии, вам Нобелевку выдадут. Если сумеете представить обожженые корни от капельного полива, вам за званием академика в Сельхозакадемию.
блин! не поливают кактусы круглосуточно - в постоянно мокрой земле они сгниют нафиг.
Для особо одаренных, капельным поливом поливают и круглосуточно. Если сумеете летом найти утром росу в той же Астраханской губернии, вам Нобелевку выдадут. Если сумеете представить обожженые корни от капельного полива, вам за званием академика в Сельхозакадемию.
блин! не поливают кактусы круглосуточно - в постоянно мокрой земле они сгниют нафиг.
Та мне на кактусы вообще насрать, я за помидоры с огурцами и не балконе.
выкладываю рабочий код работающего автомата полива, сделана калибровка датчика дождя в течении 20 секунд, старт с поливом, без полива. Поливает раз в сутки утром, капельно. Сделал возможность выставления 0 во времени полива.
/*система автополива 11 грядок, первые две без, а все остальные с датчиком дождя
устанавливается один раз с записью в епром, чтобы поменять время полива надо нажать кнопку сброс и вновь выставить
время полива на нужном реле поливается утром, раз в сутки, реализован дисплей на ТМ 1638, реле стандартные для ардуино с включением низким уровнем*/
#include <InvertedTM1638.h>
#include <TM1638.h>
#include <TM1638QYF.h>
#include <TM1640.h>
#include <TM16XX.h>
#include <TM16XXFonts.h>
#include <EEPROM.h>
// define a module on data pin A2, clock pin A3 and strobe pin A4
TM1638 module(A2,A3,A4);
#define irm A1 //датчик влажности
#define pwr A5 //датчик влажности power
#define light A0 //датчик света
#define irrig1 2 //полив реле 1
#define irrig2 3 //полив реле 2
#define irrig3 4
#define irrig4 5
#define irrig5 6
#define irrig6 7
#define irrig7 8
#define irrig8 9
#define irrig9 10
#define irrig10 11
#define irrig11 12
unsigned long startTime; //время начала
unsigned long loopTime; //время прошло
unsigned long LimitTime = 0; //таймер
long previousMillis = 0; //счетчик прошедшего времени для AutoMainScreen
long interval = 10000; //задержка автовозврата к MainScreen 10сек
int h=1;//номер реле
int m=0;
int s=0;
int x;
int val;
boolean running = false; //Флаг Запуска отсчета
boolean flag = false;
void setup(){
//установим режимы работы выходов и входов
pinMode(irrig1,OUTPUT);
pinMode(irrig2,OUTPUT);
pinMode(irrig3,OUTPUT);
pinMode(irrig4,OUTPUT);
pinMode(irrig5,OUTPUT);
pinMode(irrig6,OUTPUT);
pinMode(irrig7,OUTPUT);
pinMode(irrig8,OUTPUT);
pinMode(irrig9,OUTPUT);
pinMode(irrig10,OUTPUT);
pinMode(irrig11,OUTPUT);
pinMode(pwr,OUTPUT);
pinMode(light,INPUT);
pinMode(irm,INPUT);
digitalWrite (irrig1,HIGH);
digitalWrite (irrig2,HIGH);
digitalWrite (irrig3,HIGH);
digitalWrite (irrig4,HIGH);
digitalWrite (irrig5,HIGH);
digitalWrite (irrig6,HIGH);
digitalWrite (irrig7,HIGH);
digitalWrite (irrig8,HIGH);
digitalWrite (irrig9,HIGH);
digitalWrite (irrig10,HIGH);
digitalWrite (irrig11,HIGH);
digitalWrite (pwr,HIGH);
module.setupDisplay(true, 1);
module.setLEDs(0x0000);
module.clearDisplay();
module.setDisplayToString("HELLO");
delay(3000);
}
void loop() {
unsigned long currentMillis = millis();
if (running == true){
module.clearDisplay();
do {
val = analogRead (light);//ждем день
if (val > 600) { flag = false; }
delay(3000);
val = analogRead (light);
if (val < 600) { flag = true; }
}
while (flag);
running = true;
digitalWrite (pwr,LOW);
delay(500);
}
if (running == true && EEPROM.read (21)>0){
startTime = millis();
h = 1;
m = EEPROM.read (1);
LimitTime = m*60000;
digitalWrite (irrig1,LOW);
digitalWrite (pwr,HIGH);
while(loopTime < LimitTime){ // сравниваем время прошло с вр окончания
s = (LimitTime - loopTime)/1000;
delay(500);
loopTime = millis() - startTime; //вычисляем сколько времени прошло
}
running = false;//окончание работы таймера
loopTime = 0;
LimitTime = 0;
s = 0;
EEPROM.write (21,0);
digitalWrite (irrig1,HIGH);
digitalWrite (pwr,LOW);
delay (1000);
running = true;
}
if (running == true && EEPROM.read (22)>0) {
startTime = millis();
h = 2;
m = EEPROM.read (2);
LimitTime = m*60000;
digitalWrite (irrig2,LOW);
digitalWrite (pwr,HIGH);
while(loopTime < LimitTime){
s = (LimitTime - loopTime)/1000;
delay(500);
loopTime = millis() - startTime;
}
running = false;
loopTime = 0;
LimitTime = 0;
s = 0;
EEPROM.write (22,0);
digitalWrite (irrig2,HIGH);
digitalWrite (pwr,LOW);//включаем питание датчика влаги(реле)
delay (1000);
running = true;
}
if (running == true && analogRead (irm)>220 && EEPROM.read (23)> 0) { //таймер запущен и датчик дождя сухой
startTime = millis();
digitalWrite (pwr,HIGH);//выключаем питание датчика влаги(реле)
h = 3;
m = EEPROM.read (3);
LimitTime = m*60000;
digitalWrite (irrig3,LOW);
while(loopTime < LimitTime){
s = (LimitTime - loopTime)/1000;
delay(500);
loopTime = millis() - startTime;
}
running = false;
loopTime = 0;
LimitTime = 0;
s = 0;
EEPROM.write (23,0);
digitalWrite (irrig3,HIGH);
digitalWrite (pwr,LOW);
delay (1000);
running = true;
}
if (running == true && analogRead (irm)>220 && EEPROM.read (24)> 0) {
startTime = millis();
digitalWrite (pwr,HIGH);
h = 4;
m = EEPROM.read (4);
LimitTime = m*60000;
digitalWrite (irrig4,LOW);
while(loopTime < LimitTime){
s = (LimitTime - loopTime)/1000;
delay(500);
loopTime = millis() - startTime;
}
running = false;
loopTime = 0;
LimitTime = 0;
s = 0;
EEPROM.write (24,0);
digitalWrite (irrig4,HIGH);
digitalWrite (pwr,LOW);
delay (1000);
running = true;
}
if (running == true && analogRead (irm)>220 && EEPROM.read (25)> 0) {
startTime = millis();
digitalWrite (pwr,HIGH);
h = 5;
m = EEPROM.read (5);
LimitTime = m*60000;
digitalWrite (irrig5,LOW);
while(loopTime < LimitTime){
s = (LimitTime - loopTime)/1000;
delay(500);
loopTime = millis() - startTime;
}
running = false;
loopTime = 0;
LimitTime = 0;
s = 0;
EEPROM.write (25,0);
digitalWrite (irrig5,HIGH);
digitalWrite (pwr,LOW);
delay (1000);
running = true;
}
if (running == true && analogRead (irm)>220 && EEPROM.read (26)> 0) {
startTime = millis();
digitalWrite (pwr,HIGH);
h = 6;
m = EEPROM.read (6);
LimitTime = m*60000;
digitalWrite (irrig6,LOW);
while(loopTime < LimitTime){
s = (LimitTime - loopTime)/1000;
delay(500);
loopTime = millis() - startTime;
}
running = false;
loopTime = 0;
LimitTime = 0;
s = 0;
EEPROM.write (26,0);
digitalWrite (irrig6,HIGH);
digitalWrite (pwr,LOW);
delay (1000);
running = true;
}
if (running == true && analogRead (irm)>220 && EEPROM.read (27)> 0) {
startTime = millis();
digitalWrite (pwr,HIGH);
h = 7;
m = EEPROM.read (7);
LimitTime = m*60000;
digitalWrite (irrig7,LOW);
while(loopTime < LimitTime){
s = (LimitTime - loopTime)/1000;
delay(500);
loopTime = millis() - startTime;
}
running = false;
loopTime = 0;
LimitTime = 0;
s = 0;
EEPROM.write (27,0);
digitalWrite (irrig7,HIGH);
digitalWrite (pwr,LOW);
delay (1000);
running = true;
}
if (running == true && analogRead (irm)>220 && EEPROM.read (28)> 0) {
startTime = millis();
digitalWrite (pwr,HIGH);
h = 8;
m = EEPROM.read (8);
LimitTime = m*60000;
digitalWrite (irrig8,LOW);
while(loopTime < LimitTime){
s = (LimitTime - loopTime)/1000;
delay(500);
loopTime = millis() - startTime;
}
running = false;//окончание работы таймера
loopTime = 0;
LimitTime = 0;
s = 0;
EEPROM.write (28,0);
digitalWrite (irrig8,HIGH);
digitalWrite (pwr,LOW);
delay (1000);
running = true;
}
if (running == true && analogRead (irm)>220 && EEPROM.read (29)> 0) {
startTime = millis();
digitalWrite (pwr,HIGH);
h = 9;
m = EEPROM.read (9);
LimitTime = m*60000;
digitalWrite (irrig9,LOW);
while(loopTime < LimitTime){
s = (LimitTime - loopTime)/1000;
delay(500);
loopTime = millis() - startTime;
}
running = false;
loopTime = 0;
LimitTime = 0;
s = 0;
EEPROM.write (29,0);
digitalWrite (irrig9,HIGH);
digitalWrite (pwr,LOW);
delay (1000);
running = true;
}
if (running == true && analogRead (irm)>220 && EEPROM.read (30)> 0) {
startTime = millis();
digitalWrite (pwr,HIGH);
h = 10;
m = EEPROM.read (10);
LimitTime = m*60000;
digitalWrite (irrig10,LOW);
while(loopTime < LimitTime){
s = (LimitTime - loopTime)/1000;
delay(500);
loopTime = millis() - startTime;
}
running = false;
loopTime = 0;
LimitTime = 0;
s = 0;
EEPROM.write (30,0);
digitalWrite (irrig10,HIGH);
digitalWrite (pwr,LOW);
delay (1000);
running = true;
}
if (running == true && analogRead (irm)>220 && EEPROM.read (31)> 0) {
startTime = millis();
digitalWrite (pwr,HIGH);
h = 11;
m = EEPROM.read (11);
LimitTime = m*60000;
digitalWrite (irrig11,LOW);
while(loopTime < LimitTime){
s = (LimitTime - loopTime)/1000;
delay(500);
loopTime = millis() - startTime;
}
running = false;
loopTime = 0;
LimitTime = 0;
s = 0;
EEPROM.write (31,0);
digitalWrite (irrig11,HIGH);
digitalWrite (pwr,LOW);
delay (1000);
running = true;
}
if (running == true){
digitalWrite (pwr,HIGH);
do {
val = analogRead (light);//ждем ночь
if (val < 600) { flag = false; }
delay(3000);
val = analogRead (light);
if (val > 600) { flag = true; }
}
while (flag);
EEPROM.write (21,1);
EEPROM.write (22,1);
EEPROM.write (23,1);
EEPROM.write (24,1);
EEPROM.write (25,1);
EEPROM.write (26,1);
EEPROM.write (27,1);
EEPROM.write (28,1);
EEPROM.write (29,1);
EEPROM.write (30,1);
EEPROM.write (31,1);
running = true;
}
if (module.getButtons()==0b00000001){
show ();
}
else{
module.setLEDs(0xFFFF);
byte btn= module.getButtons(); //опрашиваем кнопки
switch (btn){
case 1: h++; //1-я добавить номер
if (h > 11 ){
h = 1;}
previousMillis = currentMillis;
delay(300);
show();
break;
case 2: h--; //2 - убавить номер
if (h < 1){
h = 11;}
previousMillis = currentMillis;
delay(300);
show();
break;
case 4: m++; //3-я добавить минут
if (m > 59 ){
m = 0;}
previousMillis = currentMillis;
delay(300);
show();
break;
case 8: m--; //4-я убавить минут
if (m < 0 ){
m = 59;}
previousMillis = currentMillis;
delay(300);
show();
break;
case 16: // установить значение и записать в память 5
module.clearDisplay();
module.setDisplayToString("SAPIS");
previousMillis = currentMillis;
delay(1000);
set();
break;
case 32: // калибровка датчика дождя 6 действует 20 секунд
module.clearDisplay();
module.setDisplayToString("rAin SEt");
previousMillis = currentMillis;
digitalWrite (pwr,LOW);
delay(20000);
digitalWrite (pwr,HIGH);
module.setLEDs(0x0000);
module.clearDisplay();
break;
case 64: //старт без полива 7
module.setLEDs(0x0000);
module.clearDisplay();
module.setDisplayToString("StARt");
s =0;
delay (1000);
EEPROM.write (21,0);
EEPROM.write (22,0);
EEPROM.write (23,0);
EEPROM.write (24,0);
EEPROM.write (25,0);
EEPROM.write (26,0);
EEPROM.write (27,0);
EEPROM.write (28,0);
EEPROM.write (29,0);
EEPROM.write (30,0);
EEPROM.write (31,0);
module.setLEDs(0x0000);
module.clearDisplay();
running = true;
break;
case 128: //старт с поливом 8
module.setLEDs(0x0000);
module.clearDisplay();
module.setDisplayToString("StARt 1");
s =0;
delay (1000);
EEPROM.write (21,1);
EEPROM.write (22,1);
EEPROM.write (23,1);
EEPROM.write (24,1);
EEPROM.write (25,1);
EEPROM.write (26,1);
EEPROM.write (27,1);
EEPROM.write (28,1);
EEPROM.write (29,1);
EEPROM.write (30,1);
EEPROM.write (31,1);
module.setLEDs(0x0000);
module.clearDisplay();
running = true;
break;
}
if(currentMillis - previousMillis > interval)
previousMillis = currentMillis;
module.setDisplayToString("out");
delay (1000);
module.setLEDs(0x0000);
module.clearDisplay();
running = true;
}
}
void timing()//для показа посекундно
{
m = s/60;
s = s - m*60;
}
void show()//показ на дисплее
{
x = h/10;
module.setDisplayDigit(x,0,0);
x = h - x*10;
module.setDisplayDigit(x,1,0);
x = m/10;
module.setDisplayDigit(x,3,0);
x = m - x*10;
module.setDisplayDigit(x,4,0);
x = s/10;
module.setDisplayDigit(x,6,0);
x = s - x*10;
module.setDisplayDigit(x,7,0);
module.setDisplayToString("-",false,2);
module.setDisplayToString("-",false,5);
}
void set()//запись в память
{
EEPROM.write (h,m);
x = h/10;
module.setDisplayDigit(x,0,0);
x = h - x*10;
module.setDisplayDigit(x,1,0);
x = m/10;
module.setDisplayDigit(x,3,0);
x = m - x*10;
module.setDisplayDigit(x,4,0);
x = s/10;
module.setDisplayDigit(x,6,0);
x = s - x*10;
module.setDisplayDigit(x,7,0);
module.setDisplayToString("-",false,2);
module.setDisplayToString("-",false,5);
}
просто у меня в процессе эксплуатации выявились различные косяки(невозможность выставить ноль в поливе, невозможность калибровать датчик дождя с кнопки, да много чего еще произошло за 2 года). Изобрел же я велосипед потому, что в инете не нашел проги, удовлетворяющей моему ТЗ! Поверьте, если бы можно было тупо скопировать программу у кого-нибудь, я не стал бы заморачиваться. Можете в меня плюнуть, но двигатель прогресса все-таки жена))). сейчас стоит вопрос о прикручивании к поливалке А6 для управления с сотового телефона))). Вот отсюда и прогресс... Спасибо всем за дельные и не очень советы. Вы все очень помогаете!
Для особо одаренных, капельным поливом поливают и круглосуточно. Если сумеете летом найти утром росу в той же Астраханской губернии, вам Нобелевку выдадут. Если сумеете представить обожженые корни от капельного полива, вам за званием академика в Сельхозакадемию.
блин! не поливают кактусы круглосуточно - в постоянно мокрой земле они сгниют нафиг.
Для особо одаренных, капельным поливом поливают и круглосуточно. Если сумеете летом найти утром росу в той же Астраханской губернии, вам Нобелевку выдадут. Если сумеете представить обожженые корни от капельного полива, вам за званием академика в Сельхозакадемию.
блин! не поливают кактусы круглосуточно - в постоянно мокрой земле они сгниют нафиг.
Та мне на кактусы вообще насрать, я за помидоры с огурцами и не балконе.
Та мне на кактусы вообще насрать, я за помидоры с огурцами и не балконе.
я за траву в шкафу.
Та мне на кактусы вообще насрать, я за помидоры с огурцами и не балконе.
я за траву в шкафу.
А это добро нам без надобности. Мне для веселья ректификатора хватает.
Мне для веселья ректификатора хватает.
кому и кобыла - невеста.
Мне для веселья ректификатора хватает.
кому и кобыла - невеста.
Уху, жеребцу.
выкладываю рабочий код работающего автомата полива, сделана калибровка датчика дождя в течении 20 секунд, старт с поливом, без полива. Поливает раз в сутки утром, капельно. Сделал возможность выставления 0 во времени полива.
/*система автополива 11 грядок, первые две без, а все остальные с датчиком дождя устанавливается один раз с записью в епром, чтобы поменять время полива надо нажать кнопку сброс и вновь выставить время полива на нужном реле поливается утром, раз в сутки, реализован дисплей на ТМ 1638, реле стандартные для ардуино с включением низким уровнем*/ #include <InvertedTM1638.h> #include <TM1638.h> #include <TM1638QYF.h> #include <TM1640.h> #include <TM16XX.h> #include <TM16XXFonts.h> #include <EEPROM.h> // define a module on data pin A2, clock pin A3 and strobe pin A4 TM1638 module(A2,A3,A4); #define irm A1 //датчик влажности #define pwr A5 //датчик влажности power #define light A0 //датчик света #define irrig1 2 //полив реле 1 #define irrig2 3 //полив реле 2 #define irrig3 4 #define irrig4 5 #define irrig5 6 #define irrig6 7 #define irrig7 8 #define irrig8 9 #define irrig9 10 #define irrig10 11 #define irrig11 12 unsigned long startTime; //время начала unsigned long loopTime; //время прошло unsigned long LimitTime = 0; //таймер long previousMillis = 0; //счетчик прошедшего времени для AutoMainScreen long interval = 10000; //задержка автовозврата к MainScreen 10сек int h=1;//номер реле int m=0; int s=0; int x; int val; boolean running = false; //Флаг Запуска отсчета boolean flag = false; void setup(){ //установим режимы работы выходов и входов pinMode(irrig1,OUTPUT); pinMode(irrig2,OUTPUT); pinMode(irrig3,OUTPUT); pinMode(irrig4,OUTPUT); pinMode(irrig5,OUTPUT); pinMode(irrig6,OUTPUT); pinMode(irrig7,OUTPUT); pinMode(irrig8,OUTPUT); pinMode(irrig9,OUTPUT); pinMode(irrig10,OUTPUT); pinMode(irrig11,OUTPUT); pinMode(pwr,OUTPUT); pinMode(light,INPUT); pinMode(irm,INPUT); digitalWrite (irrig1,HIGH); digitalWrite (irrig2,HIGH); digitalWrite (irrig3,HIGH); digitalWrite (irrig4,HIGH); digitalWrite (irrig5,HIGH); digitalWrite (irrig6,HIGH); digitalWrite (irrig7,HIGH); digitalWrite (irrig8,HIGH); digitalWrite (irrig9,HIGH); digitalWrite (irrig10,HIGH); digitalWrite (irrig11,HIGH); digitalWrite (pwr,HIGH); module.setupDisplay(true, 1); module.setLEDs(0x0000); module.clearDisplay(); module.setDisplayToString("HELLO"); delay(3000); } void loop() { unsigned long currentMillis = millis(); if (running == true){ module.clearDisplay(); do { val = analogRead (light);//ждем день if (val > 600) { flag = false; } delay(3000); val = analogRead (light); if (val < 600) { flag = true; } } while (flag); running = true; digitalWrite (pwr,LOW); delay(500); } if (running == true && EEPROM.read (21)>0){ startTime = millis(); h = 1; m = EEPROM.read (1); LimitTime = m*60000; digitalWrite (irrig1,LOW); digitalWrite (pwr,HIGH); while(loopTime < LimitTime){ // сравниваем время прошло с вр окончания s = (LimitTime - loopTime)/1000; delay(500); loopTime = millis() - startTime; //вычисляем сколько времени прошло } running = false;//окончание работы таймера loopTime = 0; LimitTime = 0; s = 0; EEPROM.write (21,0); digitalWrite (irrig1,HIGH); digitalWrite (pwr,LOW); delay (1000); running = true; } if (running == true && EEPROM.read (22)>0) { startTime = millis(); h = 2; m = EEPROM.read (2); LimitTime = m*60000; digitalWrite (irrig2,LOW); digitalWrite (pwr,HIGH); while(loopTime < LimitTime){ s = (LimitTime - loopTime)/1000; delay(500); loopTime = millis() - startTime; } running = false; loopTime = 0; LimitTime = 0; s = 0; EEPROM.write (22,0); digitalWrite (irrig2,HIGH); digitalWrite (pwr,LOW);//включаем питание датчика влаги(реле) delay (1000); running = true; } if (running == true && analogRead (irm)>220 && EEPROM.read (23)> 0) { //таймер запущен и датчик дождя сухой startTime = millis(); digitalWrite (pwr,HIGH);//выключаем питание датчика влаги(реле) h = 3; m = EEPROM.read (3); LimitTime = m*60000; digitalWrite (irrig3,LOW); while(loopTime < LimitTime){ s = (LimitTime - loopTime)/1000; delay(500); loopTime = millis() - startTime; } running = false; loopTime = 0; LimitTime = 0; s = 0; EEPROM.write (23,0); digitalWrite (irrig3,HIGH); digitalWrite (pwr,LOW); delay (1000); running = true; } if (running == true && analogRead (irm)>220 && EEPROM.read (24)> 0) { startTime = millis(); digitalWrite (pwr,HIGH); h = 4; m = EEPROM.read (4); LimitTime = m*60000; digitalWrite (irrig4,LOW); while(loopTime < LimitTime){ s = (LimitTime - loopTime)/1000; delay(500); loopTime = millis() - startTime; } running = false; loopTime = 0; LimitTime = 0; s = 0; EEPROM.write (24,0); digitalWrite (irrig4,HIGH); digitalWrite (pwr,LOW); delay (1000); running = true; } if (running == true && analogRead (irm)>220 && EEPROM.read (25)> 0) { startTime = millis(); digitalWrite (pwr,HIGH); h = 5; m = EEPROM.read (5); LimitTime = m*60000; digitalWrite (irrig5,LOW); while(loopTime < LimitTime){ s = (LimitTime - loopTime)/1000; delay(500); loopTime = millis() - startTime; } running = false; loopTime = 0; LimitTime = 0; s = 0; EEPROM.write (25,0); digitalWrite (irrig5,HIGH); digitalWrite (pwr,LOW); delay (1000); running = true; } if (running == true && analogRead (irm)>220 && EEPROM.read (26)> 0) { startTime = millis(); digitalWrite (pwr,HIGH); h = 6; m = EEPROM.read (6); LimitTime = m*60000; digitalWrite (irrig6,LOW); while(loopTime < LimitTime){ s = (LimitTime - loopTime)/1000; delay(500); loopTime = millis() - startTime; } running = false; loopTime = 0; LimitTime = 0; s = 0; EEPROM.write (26,0); digitalWrite (irrig6,HIGH); digitalWrite (pwr,LOW); delay (1000); running = true; } if (running == true && analogRead (irm)>220 && EEPROM.read (27)> 0) { startTime = millis(); digitalWrite (pwr,HIGH); h = 7; m = EEPROM.read (7); LimitTime = m*60000; digitalWrite (irrig7,LOW); while(loopTime < LimitTime){ s = (LimitTime - loopTime)/1000; delay(500); loopTime = millis() - startTime; } running = false; loopTime = 0; LimitTime = 0; s = 0; EEPROM.write (27,0); digitalWrite (irrig7,HIGH); digitalWrite (pwr,LOW); delay (1000); running = true; } if (running == true && analogRead (irm)>220 && EEPROM.read (28)> 0) { startTime = millis(); digitalWrite (pwr,HIGH); h = 8; m = EEPROM.read (8); LimitTime = m*60000; digitalWrite (irrig8,LOW); while(loopTime < LimitTime){ s = (LimitTime - loopTime)/1000; delay(500); loopTime = millis() - startTime; } running = false;//окончание работы таймера loopTime = 0; LimitTime = 0; s = 0; EEPROM.write (28,0); digitalWrite (irrig8,HIGH); digitalWrite (pwr,LOW); delay (1000); running = true; } if (running == true && analogRead (irm)>220 && EEPROM.read (29)> 0) { startTime = millis(); digitalWrite (pwr,HIGH); h = 9; m = EEPROM.read (9); LimitTime = m*60000; digitalWrite (irrig9,LOW); while(loopTime < LimitTime){ s = (LimitTime - loopTime)/1000; delay(500); loopTime = millis() - startTime; } running = false; loopTime = 0; LimitTime = 0; s = 0; EEPROM.write (29,0); digitalWrite (irrig9,HIGH); digitalWrite (pwr,LOW); delay (1000); running = true; } if (running == true && analogRead (irm)>220 && EEPROM.read (30)> 0) { startTime = millis(); digitalWrite (pwr,HIGH); h = 10; m = EEPROM.read (10); LimitTime = m*60000; digitalWrite (irrig10,LOW); while(loopTime < LimitTime){ s = (LimitTime - loopTime)/1000; delay(500); loopTime = millis() - startTime; } running = false; loopTime = 0; LimitTime = 0; s = 0; EEPROM.write (30,0); digitalWrite (irrig10,HIGH); digitalWrite (pwr,LOW); delay (1000); running = true; } if (running == true && analogRead (irm)>220 && EEPROM.read (31)> 0) { startTime = millis(); digitalWrite (pwr,HIGH); h = 11; m = EEPROM.read (11); LimitTime = m*60000; digitalWrite (irrig11,LOW); while(loopTime < LimitTime){ s = (LimitTime - loopTime)/1000; delay(500); loopTime = millis() - startTime; } running = false; loopTime = 0; LimitTime = 0; s = 0; EEPROM.write (31,0); digitalWrite (irrig11,HIGH); digitalWrite (pwr,LOW); delay (1000); running = true; } if (running == true){ digitalWrite (pwr,HIGH); do { val = analogRead (light);//ждем ночь if (val < 600) { flag = false; } delay(3000); val = analogRead (light); if (val > 600) { flag = true; } } while (flag); EEPROM.write (21,1); EEPROM.write (22,1); EEPROM.write (23,1); EEPROM.write (24,1); EEPROM.write (25,1); EEPROM.write (26,1); EEPROM.write (27,1); EEPROM.write (28,1); EEPROM.write (29,1); EEPROM.write (30,1); EEPROM.write (31,1); running = true; } if (module.getButtons()==0b00000001){ show (); } else{ module.setLEDs(0xFFFF); byte btn= module.getButtons(); //опрашиваем кнопки switch (btn){ case 1: h++; //1-я добавить номер if (h > 11 ){ h = 1;} previousMillis = currentMillis; delay(300); show(); break; case 2: h--; //2 - убавить номер if (h < 1){ h = 11;} previousMillis = currentMillis; delay(300); show(); break; case 4: m++; //3-я добавить минут if (m > 59 ){ m = 0;} previousMillis = currentMillis; delay(300); show(); break; case 8: m--; //4-я убавить минут if (m < 0 ){ m = 59;} previousMillis = currentMillis; delay(300); show(); break; case 16: // установить значение и записать в память 5 module.clearDisplay(); module.setDisplayToString("SAPIS"); previousMillis = currentMillis; delay(1000); set(); break; case 32: // калибровка датчика дождя 6 действует 20 секунд module.clearDisplay(); module.setDisplayToString("rAin SEt"); previousMillis = currentMillis; digitalWrite (pwr,LOW); delay(20000); digitalWrite (pwr,HIGH); module.setLEDs(0x0000); module.clearDisplay(); break; case 64: //старт без полива 7 module.setLEDs(0x0000); module.clearDisplay(); module.setDisplayToString("StARt"); s =0; delay (1000); EEPROM.write (21,0); EEPROM.write (22,0); EEPROM.write (23,0); EEPROM.write (24,0); EEPROM.write (25,0); EEPROM.write (26,0); EEPROM.write (27,0); EEPROM.write (28,0); EEPROM.write (29,0); EEPROM.write (30,0); EEPROM.write (31,0); module.setLEDs(0x0000); module.clearDisplay(); running = true; break; case 128: //старт с поливом 8 module.setLEDs(0x0000); module.clearDisplay(); module.setDisplayToString("StARt 1"); s =0; delay (1000); EEPROM.write (21,1); EEPROM.write (22,1); EEPROM.write (23,1); EEPROM.write (24,1); EEPROM.write (25,1); EEPROM.write (26,1); EEPROM.write (27,1); EEPROM.write (28,1); EEPROM.write (29,1); EEPROM.write (30,1); EEPROM.write (31,1); module.setLEDs(0x0000); module.clearDisplay(); running = true; break; } if(currentMillis - previousMillis > interval) previousMillis = currentMillis; module.setDisplayToString("out"); delay (1000); module.setLEDs(0x0000); module.clearDisplay(); running = true; } } void timing()//для показа посекундно { m = s/60; s = s - m*60; } void show()//показ на дисплее { x = h/10; module.setDisplayDigit(x,0,0); x = h - x*10; module.setDisplayDigit(x,1,0); x = m/10; module.setDisplayDigit(x,3,0); x = m - x*10; module.setDisplayDigit(x,4,0); x = s/10; module.setDisplayDigit(x,6,0); x = s - x*10; module.setDisplayDigit(x,7,0); module.setDisplayToString("-",false,2); module.setDisplayToString("-",false,5); } void set()//запись в память { EEPROM.write (h,m); x = h/10; module.setDisplayDigit(x,0,0); x = h - x*10; module.setDisplayDigit(x,1,0); x = m/10; module.setDisplayDigit(x,3,0); x = m - x*10; module.setDisplayDigit(x,4,0); x = s/10; module.setDisplayDigit(x,6,0); x = s - x*10; module.setDisplayDigit(x,7,0); module.setDisplayToString("-",false,2); module.setDisplayToString("-",false,5); }Молодэць!
Изобрёл велик!
Изобрёл велик!
Ну, это гораздо лучше, чем ничего не изобрести.
просто у меня в процессе эксплуатации выявились различные косяки(невозможность выставить ноль в поливе, невозможность калибровать датчик дождя с кнопки, да много чего еще произошло за 2 года). Изобрел же я велосипед потому, что в инете не нашел проги, удовлетворяющей моему ТЗ! Поверьте, если бы можно было тупо скопировать программу у кого-нибудь, я не стал бы заморачиваться. Можете в меня плюнуть, но двигатель прогресса все-таки жена))). сейчас стоит вопрос о прикручивании к поливалке А6 для управления с сотового телефона))). Вот отсюда и прогресс... Спасибо всем за дельные и не очень советы. Вы все очень помогаете!