Advertisement
RuiViana

Irrigação04

Oct 6th, 2015
277
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.96 KB | None | 0 0
  1.  
  2. //http://pastebin.com/Wv1veXLD
  3.  
  4. #include <EEPROM.h>
  5. #include<string.h>
  6. #include <DS1307.h>
  7. #include <Wire.h>
  8. #include <LiquidCrystal.h> //Biblioteca do LCD
  9.  
  10. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);//Portas do lcd
  11.  
  12. int bEnter = A1;//botão de enter // Variaveis
  13. int bMode = A0; //botão de menu *
  14. int bUp = A2; //botão de acrescimo *
  15. int bDown = A3; //botão de decrescimo // dos Botões
  16. const byte bomba = 10;//variavel do rele
  17. const byte vs1 = 9;
  18. const byte vs2 = 8;
  19. const byte vs3 = 7;
  20. const byte vs4 = 6;
  21.  
  22. int programa = 0; //variavel para armazenar programas // Variaveis para armazenar
  23. int dia =0; //Dias da semana *
  24. int tBomba= 0;//Tempo para desligar a bomba *
  25. int horario =0; //armazena os horarios *
  26. int testar =0; // faz o teste das ligações *
  27. int zer = 0;//zerar o programa *
  28. int acertarh =0;//Ajuste de hora // valores do menu
  29. int p;//variavel programas
  30. int tB;//variavel tempo de bomba
  31. int valvula;
  32. int estado = 1;
  33. unsigned long del;
  34. byte Ir = 3;
  35. unsigned long Duracao;
  36. unsigned long Tempo = 2000;
  37.  
  38. int semana;
  39. int d[8]; //dias da semana
  40. int h[16]; //horarios dos programas
  41. int v[16];//horario dos programas
  42. char dateTime[20];
  43. int RTCValues[7];
  44. int horaA[7];
  45.  
  46. short menu = 0; //variavel do menu
  47.  
  48.  
  49. void setup() {
  50. Serial.begin(9600);
  51. // DS1307.begin();
  52. lcd.begin(16, 2); // iniciando o lcd
  53. pinMode(bMode, INPUT_PULLUP); //botão Mode
  54. pinMode(bUp, INPUT_PULLUP); //Botão Aumenta
  55. pinMode(bDown, INPUT_PULLUP); //Botão Diminui
  56. pinMode(bEnter, INPUT_PULLUP); //Botão Enter
  57. pinMode(bomba, OUTPUT);//Rele da Bomba
  58. pinMode(vs1, OUTPUT);
  59. pinMode(vs2, OUTPUT);
  60. pinMode(vs3, OUTPUT);
  61. pinMode(vs4, OUTPUT);
  62. digitalWrite(bomba, LOW);
  63. digitalWrite(vs1, HIGH);
  64. digitalWrite(vs2, HIGH);
  65. digitalWrite(vs3, HIGH);
  66. digitalWrite(vs4, HIGH);
  67. lcd.print(" Iniciando...");
  68. delay(2000);
  69. lcd.clear();
  70. lcd.setCursor(1,0);lcd.print("Luciano Junior");
  71. lcd.setCursor(3,1);lcd.print("Versao 1.0");
  72. delay(5000);
  73. lcd.clear();
  74. }
  75.  
  76. void menus() //Função dos Menus
  77. {
  78. delay(1000);
  79. if(digitalRead(bMode)==LOW){menu=1;}
  80. while(menu>0)
  81. {
  82. lcd.clear();
  83. lcd.setCursor(0,0);
  84. if(menu==1){lcd.print("Num de Programas");if(digitalRead(bEnter)==LOW){programa=1; menu=0; numP();}}
  85. if(menu==2){lcd.print("Definir Dias ");if(digitalRead(bEnter)==LOW){dia=1; menu=0; dias();}}
  86. if(menu==3){lcd.print("Definir Horarios");if(digitalRead(bEnter)==LOW){horario=1; menu=0; horarios();}}
  87. if(menu==4){lcd.print("Tempo de Irrigação");if(digitalRead(bEnter)==LOW){tBomba=1; menu=0; Bomba();}}
  88. if(menu==5){lcd.print("Testar Ligacao ");if(digitalRead(bEnter)==LOW){testar=1; menu=0; teste();}}
  89. if(menu==6){lcd.print("Zerar Programas ");if(digitalRead(bEnter)==LOW){zer=1; menu=0; zerar();}}
  90. if(menu==7){lcd.print("Ajustar Hra Data");if(digitalRead(bEnter)==LOW){acertarh=1; menu=0; acertahora();}}
  91. if(menu==8){lcd.print("Sair ");lcd.setCursor(0,1);lcd.print("Enter");lcd.setCursor(6,1);lcd.write(B01111111);lcd.print("Ant");if(digitalRead(bEnter)==LOW){menu=0;}}
  92. if(menu >0 && menu<9){lcd.setCursor(0,1);lcd.print("Enter");lcd.setCursor(6,1);lcd.write(B01111111);lcd.print("Ant");lcd.setCursor(11,1);lcd.print("Prox");lcd.write(B01111110);}
  93. if(!digitalRead(bDown)==LOW && menu <= 8){delay(120);menu++;}
  94. if(!digitalRead(bUp)==LOW && menu > 0){delay(120);menu--;}
  95. }
  96. delay(100);
  97. }
  98. void numP()//Função da quantidade de programas, limite de 3 por dia
  99. {
  100. delay(1000);
  101. while(programa >0 && programa<=4)
  102. {
  103. lcd.clear();
  104. lcd.setCursor(0,0);
  105. lcd.print("Programas ");
  106. lcd.print(programa);
  107. lcd.setCursor(0,1);lcd.print("Enter");lcd.setCursor(7,1);lcd.print("(-)");lcd.setCursor(12,1);lcd.print("(+)");
  108. delay(70);
  109. if(digitalRead(bUp)==LOW && programa<3){delay(70);programa++;}
  110. if(digitalRead(bDown)==LOW && programa>1){delay(70);programa--;}
  111. if(digitalRead(bEnter)==LOW){p=programa*2;programa=0;dia=1;dias();}
  112. if(digitalRead(bMode)==LOW){menu=0;programa=0;}
  113. }
  114. }
  115. void dias()//Dias da semana para serem irrigados
  116. {
  117. lcd.clear();lcd.setCursor(0,0);lcd.print("Definir Dias ");
  118. delay(1000);
  119. int d[8]={0};
  120. while(dia >0 && dia<9)
  121. {
  122. lcd.clear();
  123. lcd.setCursor(0,1);lcd.print("Enter");lcd.setCursor(6,1);lcd.write(B01111111);lcd.print("Ant");lcd.setCursor(11,1);lcd.print("Prox");lcd.write(B01111110);
  124. lcd.setCursor(0,0);
  125. if(dia==1){lcd.print("Todos os dias");if(digitalRead(bEnter)==LOW){lcd.clear();lcd.print("OK");delay(1000);dia=0;d[1]=1;d[2]=1;d[3]=1;d[4]=1;d[5]=1;d[6]=1;d[7]=1;}
  126. else{d[1]=0;d[2]=0;d[3]=0;d[4]=0;d[5]=0;d[6]=0;d[7]=0;}}
  127. if(dia==2){lcd.print("Segunda ");if(digitalRead(bEnter)==LOW){lcd.clear();lcd.print("OK");delay(1000);dia=3;d[2]=1;}else{d[2]=0;}}
  128. if(dia==3){lcd.print("Terca ");if(digitalRead(bEnter)==LOW){lcd.clear();lcd.print("OK");delay(1000);dia=4;d[3]=1;}else{d[3]=0;}}
  129. if(dia==4){lcd.print("Quarta ");if(digitalRead(bEnter)==LOW){lcd.clear();lcd.print("OK");delay(1000);dia=5;d[4]=1;}else{d[4]=0;}}
  130. if(dia==5){lcd.print("Quinta ");if(digitalRead(bEnter)==LOW){lcd.clear();lcd.print("OK");delay(1000);dia=6;d[5]=1;}else{d[5]=0;}}
  131. if(dia==6){lcd.print("Sexta ");if(digitalRead(bEnter)==LOW){lcd.clear();lcd.print("OK");delay(1000);dia=7;d[6]=1;}else{d[6]=0;}}
  132. if(dia==7){lcd.print("Sabado ");if(digitalRead(bEnter)==LOW){lcd.clear();lcd.print("OK");delay(1000);dia=8;d[7]=1;}else{d[7]=0;}}
  133. if(dia==8){lcd.print("Domingo ");if(digitalRead(bEnter)==LOW){lcd.clear();lcd.print("OK");delay(1000);dia=0;d[1]=1;}else{d[1]=0;}}
  134. delay(70);
  135. if(digitalRead(bUp)==LOW && dia<=8){delay(70);dia++;}
  136. if(digitalRead(bDown)==LOW && dia>1){delay(70);dia--;}
  137. if(digitalRead(bMode)==LOW){menu=0;dia=0;}
  138. }
  139. horario=1;horarios();
  140. }
  141. void horarios()//Os horarios de inicio
  142. {
  143. lcd.clear();lcd.setCursor(0,0);lcd.print("Definir Horarios");
  144. delay(1000);
  145. horario=p;
  146. while(horario >0)
  147. {
  148. lcd.clear();lcd.setCursor(0,0); //hora = numeros pares e minutos = numeros impares
  149. switch(p)
  150. {
  151. case 2:
  152. if(horario==2 || horario==1){lcd.setCursor(0,0);lcd.print(" Programa 1 ");lcd.setCursor(0,1);lcd.print("Enter");lcd.setCursor(10,1);
  153. lcd.print(h[2]);lcd.print(":");lcd.print(h[1]);lcd.print("h");delay(120);;if(digitalRead(bEnter)==LOW){delay(120);horario--;}}
  154. break;
  155. case 4:
  156. if(horario==4 || horario==3){lcd.setCursor(0,0);lcd.print(" Programa 1 ");lcd.setCursor(0,1);lcd.print("Enter");lcd.setCursor(10,1);
  157. lcd.print(h[4]);lcd.print(":");lcd.print(h[3]);lcd.print("h");delay(120);;if(digitalRead(bEnter)==LOW){delay(120);horario--;}}
  158. if(horario==2 || horario==1){lcd.setCursor(0,0);lcd.print(" Programa 2 ");lcd.setCursor(0,1);lcd.print("Enter");lcd.setCursor(10,1);
  159. lcd.print(h[2]);lcd.print(":");lcd.print(h[1]);lcd.print("h");delay(120);;if(digitalRead(bEnter)==LOW){delay(120);horario--;}}
  160. break;
  161. case 6:
  162. if(horario==6 || horario==5){lcd.setCursor(0,0);lcd.print(" Programa 1 ");lcd.setCursor(0,1);lcd.print("Enter");lcd.setCursor(10,1);
  163. lcd.print(h[6]);lcd.print(":");lcd.print(h[5]);lcd.print("h");delay(120);;if(digitalRead(bEnter)==LOW){delay(120);horario--;}}
  164. if(horario==4 || horario==3){lcd.setCursor(0,0);lcd.print(" Programa 2 ");lcd.setCursor(0,1);lcd.print("Enter");lcd.setCursor(10,1);
  165. lcd.print(h[4]);lcd.print(":");lcd.print(h[3]);lcd.print("h");delay(120);;if(digitalRead(bEnter)==LOW){delay(120);horario--;}}
  166. if(horario==2 || horario==1){lcd.setCursor(0,0);lcd.print(" Programa 3 ");lcd.setCursor(0,1);lcd.print("Enter");lcd.setCursor(10,1);
  167. lcd.print(h[2]);lcd.print(":");lcd.print(h[1]);lcd.print("h");delay(120);;if(digitalRead(bEnter)==LOW){delay(120);horario--;}}
  168. break;
  169. }//fim switch
  170. if(digitalRead(bUp)==LOW){delay(120);h[horario]++;}
  171. if(digitalRead(bDown)==LOW){delay(120);h[horario]--;}
  172. if(digitalRead(bEnter)==LOW){delay(120);horario--;}
  173. if(digitalRead(bMode)==LOW){menu=0;horario=0;}
  174. if(h[2] > 23){h[2] = 0; }
  175. if(h[2] < 0){h[2] = 23; }
  176. if(h[4] > 23){h[4] = 0; }
  177. if(h[4] < 0){h[4] = 23; }
  178. if(h[6] > 23){h[6] = 0; }
  179. if(h[6] < 0){h[6] = 23; }
  180. if(h[1] > 59){h[1] = 0; }
  181. if(h[1] < 0){h[1] = 59; }
  182. if(h[3] > 59){h[3] = 0; }
  183. if(h[3] < 0){h[3] = 59; }
  184. if(h[5] > 59){h[5] = 0; }
  185. if(h[5] < 0){h[5] = 59; }
  186. }//fim while
  187. tBomba=1;Bomba();
  188. }//fim void
  189.  
  190.  
  191. void acertahora()//Acertar a hora no RTC
  192. {
  193. delay(1000);
  194. while(acertarh>0 && acertarh<8)
  195. {
  196. lcd.clear();lcd.setCursor(0,0);
  197. if(acertarh==1){lcd.print(" Entre com Ano ");}
  198. if(acertarh==2){lcd.print(" Entre com Mes ");}
  199. if(acertarh==3){lcd.print(" Entre com Dia ");}
  200. if(acertarh==4){lcd.print(" Entre cm Semana");}
  201. if(acertarh==5){lcd.print(" Entre com Hora ");}
  202. if(acertarh==6){lcd.print(" Entre com Min ");}
  203. if(acertarh==7){lcd.print(" Entre com Seg ");}
  204. if(digitalRead(bUp)==LOW){delay(70);horaA[acertarh]++;}
  205. if(digitalRead(bDown)==LOW){delay(70);horaA[acertarh]--;}
  206. if(digitalRead(bEnter)==LOW){delay(70);acertarh++;}
  207. if(digitalRead(bMode)==LOW){menu=0;acertarh=0;}
  208. lcd.setCursor(10,1);
  209. lcd.print(horaA[acertarh]);
  210. delay(120);
  211. }
  212. // DS1307.setDate(horaA[1], horaA[2], horaA[3], horaA[4], horaA[5], horaA[6], horaA[7]); // AQUI ENVIAMOS OS DADOS DEFINIDOS PARA O REAL TIME CLOK
  213. lcd.clear();
  214. }
  215.  
  216.  
  217. void Bomba()//Tempo que a bomba ficará ligada
  218. {
  219. delay(1000);
  220. while(tBomba >=1)
  221. {
  222. lcd.clear();lcd.setCursor(0,0);lcd.print("Tempo ");lcd.print(tBomba);lcd.print(" minutos");
  223. lcd.setCursor(0,1);lcd.print("Enter");lcd.setCursor(7,1);lcd.print("(-)");lcd.setCursor(12,1);lcd.print("(+)");
  224. delay(120);
  225. if(tBomba>60){tBomba=1;}
  226. Duracao = tBomba*60000;
  227. // if(digitalRead(bUp)==LOW){delay(70);tBomba++;}
  228. // if(digitalRead(bDown)==LOW){delay(70);tBomba--;}
  229. // if(digitalRead(bEnter)==LOW){delay(70);tB=tBomba*60000;menu=0;tBomba=0;} // nessa variavel aqui vou colocar aquela TEMPO no lugar de tB
  230. // if(digitalRead(bMode)==LOW){menu=0;tBomba=0;}
  231. }//Fim While
  232. }
  233. void zerar()//Zera os programas de irrigação
  234. {
  235. delay(1000);
  236. while(zer >0)
  237. {
  238. lcd.clear();
  239. lcd.setCursor(0,0);
  240. lcd.print("Zerar todos");
  241. if(digitalRead(bMode)==LOW){menu=0;zer=0;}
  242. }
  243. }
  244. void teste() //Teste das ligações apenas para ligar a bomba e conferir se está ligando
  245. { //Pedir para que seja definido um delay
  246. delay(1000); //Pressione ENTER para iniciar
  247. while(testar >0)
  248. {
  249. lcd.clear();
  250. lcd.setCursor(0,0);
  251. lcd.print("Defina valor");
  252. lcd.setCursor(0,1);
  253. lcd.print("Tempo");
  254. if(digitalRead(bMode)==LOW){menu=0;testar=0;}
  255. }
  256. }
  257. void mostrahora()
  258. {
  259. // DS1307.getDate(RTCValues);
  260. sprintf(dateTime, "%02d.%02d.%02d %02d:%02d:%02d", RTCValues[2], //RTCValues [0]=ANO, RTCValues [1]=MES, RTCValues [2]=DIA
  261. RTCValues[1], RTCValues[0], RTCValues[4], RTCValues[5], //RTCValues [3]=DIA DA SEMANA, RTCValues [4]=HORA
  262. RTCValues[6]); //RTCValues [5]=MINUTO, RTCValues [6]=SEGUNDOS
  263. //DIA SEMANA = 1(DOMINGO) E 7(SABADO)
  264.  
  265. lcd.setCursor(0,0);lcd.print("Timer Irrigacao ");
  266. lcd.setCursor(0,1);lcd.print(dateTime);delay(70);
  267. }
  268. void ativa()
  269. {
  270. int semana=RTCValues[3]; //semana recebe o valor de semanas( 1 a 7)
  271. switch(semana){
  272. case 1://Domingo
  273. if(d[1]=1){
  274. if(h[2]==RTCValues[4] && h[1]==RTCValues[5] && RTCValues[6]==0){Inicia_irriga();}//Horarios Para Programa 1
  275. if(h[4]==RTCValues[4] && h[3]==RTCValues[5] && RTCValues[6]==0){valvula=2;}//Horarios Para Programa 2
  276. if(h[6]==RTCValues[4] && h[5]==RTCValues[5] && RTCValues[6]==0){valvula=3;}//Horarios Para Programa 3
  277. }
  278. break;
  279. case 2://Segunda
  280. if(d[2]=1){
  281. if(h[2]==RTCValues[4] && h[1]==RTCValues[5] && RTCValues[6]==0){valvula=1;}//Horarios Para Programa 1
  282. if(h[4]==RTCValues[4] && h[3]==RTCValues[5] && RTCValues[6]==0){valvula=2;}//Horarios Para Programa 2
  283. if(h[6]==RTCValues[4] && h[5]==RTCValues[5] && RTCValues[6]==0){valvula=3;}//Horarios Para Programa 3
  284. }
  285. break;
  286. case 3://Terça
  287. if(d[3]=1){//Horarios Para Programa 1
  288. if(h[2]==RTCValues[4] && h[1]==RTCValues[5] && RTCValues[6]==0){valvula=1;}//Horarios Para Programa 1
  289. if(h[4]==RTCValues[4] && h[3]==RTCValues[5] && RTCValues[6]==0){valvula=2;}//Horarios Para Programa 2
  290. if(h[6]==RTCValues[4] && h[5]==RTCValues[5] && RTCValues[6]==0){valvula=3;}//Horarios Para Programa 3
  291. }
  292. break;
  293. case 4://Quarta
  294. if(d[4]=1){//Horarios Para Programa 1
  295. if(h[2]==RTCValues[4] && h[1]==RTCValues[5] && RTCValues[6]==0){valvula=1;}//Horarios Para Programa 1
  296. if(h[4]==RTCValues[4] && h[3]==RTCValues[5] && RTCValues[6]==0){valvula=2;}//Horarios Para Programa 2
  297. if(h[6]==RTCValues[4] && h[5]==RTCValues[5] && RTCValues[6]==0){valvula=3;}//Horarios Para Programa 3
  298. }
  299. break;
  300. case 5://Quinta
  301. if(d[5]=1){//Horarios Para Programa 1
  302. if(h[2]==RTCValues[4] && h[1]==RTCValues[5] && RTCValues[6]==0){valvula=1;}//Horarios Para Programa 1
  303. if(h[4]==RTCValues[4] && h[3]==RTCValues[5] && RTCValues[6]==0){valvula=2;}//Horarios Para Programa 2
  304. if(h[6]==RTCValues[4] && h[5]==RTCValues[5] && RTCValues[6]==0){valvula=3;}//Horarios Para Programa 3
  305. }
  306. break;
  307. case 6://Sexta
  308. if(d[6]=1){//Horarios Para Programa 1
  309. if(h[2]==RTCValues[4] && h[1]==RTCValues[5] && RTCValues[6]==0){valvula=1;}//Horarios Para Programa 1
  310. if(h[4]==RTCValues[4] && h[3]==RTCValues[5] && RTCValues[6]==0){valvula=2;}//Horarios Para Programa 2
  311. if(h[6]==RTCValues[4] && h[5]==RTCValues[5] && RTCValues[6]==0){valvula=3;}//Horarios Para Programa 3
  312. }
  313. break;
  314. case 7://Sabado
  315. if(d[7]=1){//Horarios Para Programa 1
  316. if(h[2]==RTCValues[4] && h[1]==RTCValues[5] && RTCValues[6]==0){Inicia_irriga();}//Horarios Para Programa 1
  317. if(h[4]==RTCValues[4] && h[3]==RTCValues[5] && RTCValues[6]==0){valvula=2;}//Horarios Para Programa 2
  318. if(h[6]==RTCValues[4] && h[5]==RTCValues[5] && RTCValues[6]==0){valvula=3;}//Horarios Para Programa 3
  319. }
  320. break;
  321. }//Fim Switch
  322. }
  323. // Calc Inicio ---------------------------------------------------------------
  324. void Inicia_irriga()
  325. {
  326. for (byte i = 0; i<Ir; i++) // Executa o n umero definido de irrigação
  327. {
  328. if ((h[2] == RTCValues[4]) & (h[1] == RTCValues[5]) ) // Se for hora de irrigar
  329. { // Faça
  330. digitalWrite(bomba, HIGH); // Liga bomba dágua
  331.  
  332.  
  333. Duracao = Duracao + millis();
  334. // Duracao = Tempo; // Carregue o tempo de irrigar para o setor1
  335.  
  336.  
  337.  
  338. while (Duracao>millis()) // Verifica se terminou o tempo de irrigar
  339. { // Se não, faça
  340. digitalWrite(vs1, LOW); // Ligue válvula setor1
  341. // Duracao--; // Decremente o tempo
  342. }
  343. digitalWrite(vs1, HIGH); // Desligue válvula setor1
  344. Duracao = Duracao + millis();
  345. // Duracao = Tempo; // Carregue o tempo de irrigar para o setor2
  346. while (Duracao>millis()) // Verifica se terminou o tempo de irrigar
  347. { // Se não, faça
  348. digitalWrite(vs2, LOW); // Ligue válvula setor2
  349. // Duracao--; // Decremente o tempo
  350. }
  351. digitalWrite(vs2, HIGH); // Desligue válvula setor2
  352. Duracao = Duracao + millis();
  353. // Duracao = Tempo; // Carregue o tempo de irrigar para o setor3
  354. while (Duracao>millis()) // Verifica se terminou o tempo de irrigar
  355. { // Se não, faça
  356. digitalWrite(vs3, LOW); // Ligue válvula setor3
  357. // Duracao--; // Decremente o tempo
  358. }
  359. digitalWrite(vs3, HIGH); // Desligue válvula setor3
  360. Duracao = Duracao + millis();
  361. // Duracao = Tempo; // Carregue o tempo de irrigar para o setor4
  362. while (Duracao>millis()) // Verifica se terminou o tempo de irrigar
  363. { // Se não, faça
  364. digitalWrite(vs4, LOW); // Ligue válvula setor4
  365. // Duracao--; // Decremente o tempo
  366. }
  367. digitalWrite(vs4, HIGH); // Desligue válvula setor4
  368. }
  369. digitalWrite(bomba, LOW); // Desliga bomba dágua
  370. }
  371. }
  372.  
  373. void loop(){
  374. mostrahora();
  375. ativa();
  376. menus();
  377. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement