Advertisement
Guest User

Untitled

a guest
Aug 23rd, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.61 KB | None | 0 0
  1. boa noite pessoal alguém pode dar uma ajuda onde estou errado
  2. estou alterando um projeto do amigo rodrigo Araujo de um irrigador automático porem estou usando um display shield e queria usar os botão dele. no fonte abaixo fiz a alteração mas não funciona alguém pode ajudar? para verificar onde alterei esta comentado como alteração custela. segue abaixo o font
  3. #include <string.h>
  4. #include <Wire.h>
  5. #include <DS1307.h>
  6. #include <avr/wdt.h>
  7. #include <EEPROM.h>
  8. #include <LiquidCrystal.h>
  9. #include <TimerOne.h>
  10. char dateTime[20];
  11. int RTCValues[7];
  12. char acertahora[8];
  13. int programas[21];
  14. LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
  15. const int analogS = A1; // Sensor connected to Analog 1
  16. const int relay1 =12; // Led connected at pin 13 ( Dry ON- Wet OFF)
  17. const int led2= 13; // Led connectected at pin 12(Dry OFF - Wet ON)
  18. const int relay2 = 11; // Realay connected at pin 8
  19. //boolean up = 1; //pinos setar funcao //alteração custela
  20. boolean sete = 0;
  21. boolean dow = 2;
  22. int i = 0;
  23. int p = 0;
  24. byte z = 0;
  25. byte h = 0;
  26. byte db = 0;
  27. boolean m = 0;
  28. boolean o = 0;
  29. int d = 0;
  30. int d1 = 0;
  31. byte menu = 0;
  32. byte program =0;
  33. int humidad = 0;
  34. int reading = 0;
  35. byte estouro = 0;
  36. int deslbomba = 0;
  37. int deslbomba2 = 0;
  38. int up = A0; //alteração custela
  39. void setup() {
  40. Serial.begin(9600);// initialize serial communications at 9600 bps
  41. DS1307.begin();
  42. lcd.begin(16, 2);
  43. Timer1.initialize(500000);
  44. Timer1.attachInterrupt(interrup);
  45. pinMode(relay1, OUTPUT);// declare the ledPin as an OUTPUT:
  46. pinMode(relay2, OUTPUT); // Declare relay as Output
  47. pinMode(led2, OUTPUT);
  48. // pinMode(up, INPUT); //pinos setar função //alteração custela
  49. // digitalWrite(up, HIGH); //pinos setar função //alteração custela
  50. pinMode(dow, INPUT); //pinos setar função
  51. digitalWrite(dow, HIGH); //pinos setar função
  52. pinMode(sete, INPUT); //pinos setar função
  53. digitalWrite(sete, HIGH); //pinos setar função
  54. digitalWrite(relay1, LOW); // Led off at start up
  55. humidad = EEPROM.read(50);
  56. o = EEPROM.read(51);
  57. for (int x=0; x<10; x++){programas[x] = EEPROM.read(x);}
  58. // botao = analogRead (0); //Leitura do valor da porta analógica A0 alteração custela
  59. *((char*)&deslbomba) = EEPROM.read(52);
  60. *((char*)&deslbomba + 1) = EEPROM.read(53);
  61.  
  62. }
  63. void interrup()
  64. {
  65. d1 = d1++;
  66. if(!menu == 0){estouro = estouro++;}
  67. if(!p == 0){estouro = estouro++;}
  68. if(!db == 0){estouro = estouro++;}
  69. if(!h == 0){estouro = estouro++;}
  70. if(!i == 0){estouro = estouro++;}
  71. if(m == 1){estouro = estouro++;}
  72. if(o == 1 && digitalRead(relay2)==HIGH && (reading > humidad)){deslbomba2 = deslbomba2++;}
  73. if(o == 0 && digitalRead(relay2)==HIGH && reading >= humidad){deslbomba2 = deslbomba2++;}
  74. // ou seja a bomba vai ligar ate atingir a humidade necessaria, quando a humidade for atingida ela conta um tempo que é o delay off bomba e depois desliga.
  75. }
  76. void acertartc()// COMANDO PARA ACERTAR A DATA E A HORA.
  77. {
  78. wdt_disable(); // DESABILITA A FUNÇÃO WDT NESTA PARTE DO PROGRAMA.
  79. delay(1000);
  80. while( i> 0 && i<8)
  81. {
  82. lcd.clear();
  83. lcd.setCursor(0,0);
  84. if(i==1){lcd.print(" Entre com Ano ");}
  85. if(i==2){lcd.print(" Entre com Mes ");}
  86. if(i==3){lcd.print(" Entre com Dia ");}
  87. if(i==4){lcd.print(" Entre cm Semana");}
  88. if(i==5){lcd.print(" Entre com Hora ");}
  89. if(i==6){lcd.print(" Entre com Minut");}
  90. if(i==7){lcd.print(" Entre com Segun");}
  91. //if(digitalRead(up) == LOW){acertahora[i]++;estouro = 0;} //alteração custela
  92. //if(analogRead(up) < 200 ){acertahora[i]++;estouro = 0;} //alteração custela
  93. if(analogRead(up) < 200 && acertahora[i] < 255){acertahora[i]++;estouro = 0;} //alteração custela
  94. if(digitalRead(dow) == LOW && acertahora[i] >= 0){acertahora[i]--;estouro = 0;}
  95. if(digitalRead(sete) == LOW){i ++;estouro = 0;}
  96. if(acertahora[1] < 1 ){acertahora[1] = 13;}
  97. if(acertahora[2] > 12){acertahora[2] = 1;}
  98. if(acertahora[2] == 0){acertahora[2] = 12;}
  99. if(acertahora[3] > 31){acertahora[3] = 1;}
  100. if(acertahora[3] == 0){acertahora[3] = 31;}
  101. if(acertahora[4] > 7){acertahora[4] = 1;}
  102. if(acertahora[4] == 0){acertahora[4] = 7;}
  103. if(acertahora[5] > 23){acertahora[5] = 0;}
  104. if(acertahora[5] == -1){acertahora[5] = 23;}
  105. if(acertahora[6] > 59){acertahora[6] = 0;}
  106. if(acertahora[6] == -1){acertahora[6] = 59;}
  107. if(acertahora[7] > 59){acertahora[7] = 0;}
  108. if(acertahora[7] == -1){acertahora[7] = 59;}
  109. lcd.setCursor(9, 1);
  110. lcd.print(acertahora[i], DEC);
  111. if(estouro == 20){ i = 0 ; estouro = 0;}
  112. delay(200);
  113. }
  114. DS1307.setDate(acertahora[1], acertahora[2], acertahora[3], acertahora[4], acertahora[5], acertahora[6], acertahora[7]); // AQUI ENVIAMOS OS DADOS DEFINIDOS PARA O REAL TIME CLOK
  115. lcd.clear();
  116. }
  117. void menus()
  118. {
  119. wdt_disable();
  120. delay(1000);
  121. lcd.clear();
  122. while(menu > 0)
  123. {
  124. lcd.setCursor(0,0);
  125. if(menu==1){lcd.print("Definir Horarios"); if(digitalRead(sete)==LOW){p=1; menu=0; programa();}}
  126. if(menu==2){lcd.print("Definir Umidade "); if(digitalRead(sete)==LOW){h = 1; menu=0; humidade();}}
  127. if(menu==3){lcd.print("Acerta dt e a Hr"); if(digitalRead(sete)==LOW){i=1; menu=0; acertartc();}}
  128. if(menu==4){lcd.print("delay off bomba "); if(digitalRead(sete)==LOW){db=1; menu=0; offbomba();}}
  129. if(menu==5){lcd.print("Zerar programas "); if(digitalRead(sete)==LOW){z=1; menu=0; zera();}}
  130. if(menu==6){lcd.print("Modo de Operacao"); if(digitalRead(sete)==LOW){m=1; menu=0; operacao();}}
  131. //if(digitalRead(up)==LOW && menu < 6){menu++;estouro = 0;} //alteração custela
  132. if (analogRead(up)== 200 && menu < 6){menu++;estouro = 0;} //alteração custela
  133. if(digitalRead(dow)==LOW && menu > 0){menu--;estouro = 0;}
  134. if(estouro == 20){ menu = 0 ; estouro = 0;}
  135. delay(400);
  136. }
  137. lcd.clear();
  138. }
  139. void programa()
  140. {
  141. wdt_disable();
  142. delay(1000);
  143. lcd.clear();
  144. while( p> 0 && p<7)
  145. {
  146. lcd.clear();
  147. lcd.setCursor(0,0);
  148. if(p==1 || p==2){lcd.print(" Programa 1 "); lcd.setCursor(2, 1);lcd.print(programas[1], DEC);lcd.print(':');lcd.print(programas[2]);lcd.print(" horas");}
  149. if(p==3 || p==4){lcd.print(" Programa 2 "); lcd.setCursor(2, 1);lcd.print(programas[3], DEC);lcd.print(':');lcd.print(programas[4]);lcd.print(" horas");}
  150. if(p==5 || p==6){lcd.print(" Programa 3 "); lcd.setCursor(2, 1);lcd.print(programas[5], DEC);lcd.print(':');lcd.print(programas[6]);lcd.print(" horas");}
  151.  
  152. //if(digitalRead(up) == LOW ){programas[p]++;estouro = 0;} //alteração custela
  153. if(analogRead(up)== 200 ){programas[p]++;estouro = 0;} //alteração custela
  154. if(digitalRead(dow) == LOW && programas[p] >= 0 ){programas[p]--;estouro = 0;}
  155. if(digitalRead(sete) == LOW){p ++;estouro = 0;}
  156. if(estouro == 30){ p = 0 ; estouro = 0;}
  157. if(programas[1] > 23){programas[1] = 0; }
  158. if(programas[1] < 0){programas[1] = 23; }
  159. if(programas[3] > 23){programas[3] = 0; }
  160. if(programas[3] < 0){programas[3] = 23; }
  161. if(programas[5] > 23){programas[5] = 0; }
  162. if(programas[5] < 0){programas[5] = 23; }
  163. if(programas[2] > 59){programas[2] = 0; }
  164. if(programas[2] < 0){programas[2] = 59; }
  165. if(programas[4] > 59){programas[4] = 0; }
  166. if(programas[4] < 0){programas[4] = 59; }
  167. if(programas[6] > 59){programas[6] = 0; }
  168. if(programas[6] < 0){programas[6] = 59; }
  169. delay(400);
  170. }
  171. for (int x=0; x<10; x++)
  172. {
  173. EEPROM.write(x, programas[x]);
  174. }
  175. for(int x = 0; x < 16; x++) {delay(90);lcd.setCursor(x,1);lcd.write(B11111111);}
  176. lcd.clear();
  177. p = 0;
  178. }
  179. void humidade()
  180. {
  181. wdt_disable();
  182. delay(1000);
  183. lcd.clear();
  184. while(h > 0)
  185. {
  186. lcd.setCursor(0,0); lcd.print("Definir Umidade ");
  187. //if(digitalRead(up) == LOW && humidad < 100 ){humidad ++;estouro = 0;} //alteração custela
  188. if(analogRead(up)== 200 && humidad < 100 ){humidad ++;estouro = 0;} //alteração custela
  189. if(digitalRead(dow) == LOW && humidad > 0){humidad --;estouro = 0;}
  190. if(digitalRead(sete) == LOW){h = 0;estouro = 0;}
  191. lcd.setCursor(5, 1);lcd.print(humidad);lcd.print("% ");
  192. if(estouro == 20){ h = 0 ; estouro = 0;}
  193. delay(150);
  194. }
  195. EEPROM.write(50, humidad);
  196. for(int x = 0; x < 16; x++) {delay(90);lcd.setCursor(x,1);lcd.write(B11111111);}
  197. lcd.clear();
  198. }
  199. void offbomba()
  200. {
  201. {
  202. wdt_disable();
  203. delay(1000);
  204. lcd.clear();
  205. while(db > 0)
  206. {
  207. lcd.setCursor(0,0); lcd.print("Delay off bomba");
  208. //if(digitalRead(up) == LOW){deslbomba ++;estouro = 0;} //alteração custela
  209. if(analogRead(up)== 200 && humidad < 100 ){deslbomba ++;estouro = 0;} //alteração custela
  210. if(digitalRead(dow) == LOW && humidad > 0){humidad --;estouro = 0;}
  211. if(digitalRead(dow) == LOW && deslbomba > 0){deslbomba --;estouro = 0;}
  212. if(digitalRead(sete) == LOW){db = 0;estouro = 0;}
  213. lcd.setCursor(5, 1);lcd.print(deslbomba);lcd.print(" Segundos");
  214. delay(150);
  215. if(estouro == 30){ db = 0 ; estouro = 0;}
  216. }
  217. EEPROM.write(52,*((char*)&deslbomba ));
  218. EEPROM.write(53, *((char*)&deslbomba + 1));
  219. }
  220. for(int x = 0; x < 16; x++) {delay(90);lcd.setCursor(x,1);lcd.write(B11111111);}
  221. lcd.clear();
  222. }
  223. void zera()
  224. {
  225. lcd.setCursor(4, 0);
  226. lcd.clear();
  227. lcd.print("Zerando");
  228. for (int x=0; x<10; x++)
  229. {
  230. EEPROM.write(x, 0);
  231. }
  232. for (int x=0; x<10; x++){programas[x] = EEPROM.read(x);}
  233. for(int x = 0; x < 16; x++) {delay(90);lcd.setCursor(x,1);lcd.write(B11111111);}
  234. lcd.clear();
  235. }
  236. void operacao()
  237. {
  238. wdt_disable();
  239. delay(500);
  240. lcd.clear();
  241. while(m > 0)
  242. {
  243. lcd.setCursor(0,0); lcd.print("Modo de Controle");
  244. lcd.setCursor(0,1); lcd.print("Dow = Um Up = Pr");
  245. //if(digitalRead(up) == LOW){o = 0;digitalWrite(relay2, LOW); m = 0 ;} //alteração custela
  246. if(analogRead(up)== 200 && humidad < 100 ){o = 0;digitalWrite(relay2, LOW); m = 0 ;} //alteração custela
  247. if(digitalRead(dow) == LOW){ o = 1; m = 0 ;}
  248. if(estouro == 30){ m = 0 ; estouro = 0;}
  249. }
  250. EEPROM.write(51, o);
  251. for(int x = 0; x < 16; x++) {delay(90);lcd.setCursor(x,1);lcd.write(B11111111);}
  252. lcd.clear();
  253. }
  254. void mostrahora()
  255. {
  256. DS1307.getDate(RTCValues);
  257. sprintf(dateTime, "%02d:%02d:%02d%02d/%02d/%02d", RTCValues[4], RTCValues[5], RTCValues[6], RTCValues[2], RTCValues[1], RTCValues[0]);
  258. delay(50);
  259. lcd.setCursor(0,0); lcd.print(dateTime);
  260. delay(50);
  261. }
  262. void teste()
  263. {
  264. if(programas[1] == RTCValues[4] && programas[2] == RTCValues[5] && RTCValues[6] == 0 && reading < humidad){ digitalWrite(relay2, HIGH);}
  265. if(programas[3] == RTCValues[4] && programas[4] == RTCValues[5] && RTCValues[6] == 0 && reading < humidad){ digitalWrite(relay2, HIGH);}
  266. if(programas[5] == RTCValues[4] && programas[6] == RTCValues[5] && RTCValues[6] == 0 && reading < humidad){ digitalWrite(relay2, HIGH);}
  267. if(o == 1 && reading < humidad){ digitalWrite(relay2, HIGH);}else{if(o == 1 && (deslbomba2/2) >= deslbomba){digitalWrite(relay2, LOW);}}// Caso queira que a bomba não desligue imediatamente coloque aqui seu delay.
  268.  
  269. if(RTCValues[4] == 0 && RTCValues[5] == 0 && RTCValues[6] == 0) { digitalWrite(relay2, LOW);}
  270. }
  271. void informa()
  272. {
  273. if(d1<= 10){lcd.setCursor(0,1);lcd.print("Setpoint. ");lcd.print(humidad);lcd.print("% ");}
  274. if(d1>10 && d1<=15){lcd.setCursor(0,1);lcd.print("Sensor ");lcd.print(reading);lcd.print("% ");}
  275. if(d1>15 && d1<=20){lcd.setCursor(0,1);if(digitalRead(relay2)==HIGH){lcd.print("> Bomba ligada <");}else{lcd.print("Bomba Desligada ");}}
  276. if(d1>20 && d1<=25){lcd.setCursor(0,1);if(reading < humidad){lcd.print("Umidade Baixa!!!");}else{lcd.print(" Umidade Normal ");}}
  277. if(d1>25 && d1<=30){lcd.setCursor(0,1);lcd.print("Irrigador Autom.");}
  278. if(d1>=30){d1=0;}
  279. }
  280. void Nivel()
  281. {
  282. int nivelMax = analogRead(1);
  283. int nivelMini = analogRead(2);
  284. if(nivelMax < 10) {digitalWrite(relay1 , LOW);}
  285. if(nivelMini < 10 && nivelMax > 500) {digitalWrite(relay1 , HIGH);}
  286. }
  287. void loop()
  288. {
  289. if(digitalRead(sete)==LOW){menu =1; menus();}
  290. reading = map(analogRead(analogS),0, 1023, 0, 100);
  291. mostrahora();
  292. informa();
  293. teste();
  294. Nivel();
  295. if(digitalRead(relay2)==HIGH && (deslbomba2/2) >= deslbomba){digitalWrite(relay2, LOW);deslbomba2 = 0;}
  296. if(reading < humidad){ digitalWrite(led2, HIGH);}else{digitalWrite(led2, LOW);
  297. }
  298. //for (int b=0; b<21; b++){
  299. // Serial.println(programas[b]);}
  300. //Serial.println(humidad , DEC);
  301. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement