Advertisement
RuiViana

Conceito de Threads

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