Advertisement
RuiViana

Temporizador3_ Erros Corrigidos

Oct 9th, 2015
658
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.89 KB | None | 0 0
  1. #include <avr/wdt.h>
  2. #include <LiquidCrystal.h>
  3. #define TONO_ERROR 600
  4. #define TIME_INTERVAL 3000
  5.  
  6. //LiquidCrystal lcd(8, 7, 9, 10, 11, 12); //Inicializar a biblioteca com o número de pinos utilizados // Mega
  7. LiquidCrystal lcd(A0, A1, A2, A3, A4, A5); //Inicializar a biblioteca com o número de pinos utilizados // Uno
  8.  
  9. // Pinos do UNO
  10. #define Linha1 4 // Linha 1 do teclado no pino 4
  11. #define Linha2 5 // Linha 2 do teclado no pino 5
  12. #define Linha3 6 // Linha 3 do teclado no pino 6
  13. #define Linha4 7 // Linha 4 do teclado no pino 7
  14.  
  15. #define Row1 8 // Coluna 1 do teclado no pino 8
  16. #define Row2 9 // Coluna 2 do teclado no pino 9
  17. #define Row3 10 // Coluna 3 do teclado no pino 10
  18.  
  19. // Pinos do Mega
  20. /* #define Linha1 34 // Linha 1 do teclado no pino 34
  21. #define Linha2 35 // Linha 2 do teclado no pino 35
  22. #define Linha3 36 // Linha 3 do teclado no pino 36
  23. #define Linha4 37 // Linha 4 do teclado no pino 37
  24.  
  25. #define Row1 38 // Coluna 1 do teclado no pino 38
  26. #define Row2 39 // Coluna 2 do teclado no pino 39
  27. #define Row3 40 // Coluna 3 do teclado no pino 40
  28. */
  29. byte Digito = 0 ; // Variavel Digito digitado
  30. byte i = 0;
  31. byte contagem = 0; // Numero de digitos digitados
  32. unsigned long Acumulado = 0; // Variavel Digitos acumulados
  33. unsigned long Tempo = 0; // variavel Tempo de atraso = Digito Acumulado
  34.  
  35. unsigned Inicio = 0;
  36. unsigned long horas = 0; // Variável para mostar no LCD as Horas
  37. unsigned long minutos = 0; // Variável para mostar no LCD as Minutos
  38. unsigned long segundos = 0; // Variável para mostar no LCD as segundos
  39. unsigned long segundostotal = 0; //Tempo Total
  40.  
  41.  
  42. // int rele = 5; //Rele Mega
  43. int rele = 13; //Rele Uno
  44. // int buzzer = 6; //Alarme Mega
  45. int buzzer = 3; //Alarme Uno
  46. int msg= 0; //Barreira para mensagem de boas vindas
  47.  
  48. // ---------------------------------------------------------------------
  49. void setup()
  50. {
  51. lcd.begin(16, 2); // Defini o numero de colunas e linhas do LCD 16x2
  52.  
  53. //Pinos ligados aos pinos do teclado - Linhas
  54. pinMode(Linha1, OUTPUT);
  55. pinMode(Linha2, OUTPUT);
  56. pinMode(Linha3, OUTPUT);
  57. pinMode(Linha4, OUTPUT);
  58.  
  59. //Pinos ligados aos pinos do teclado - Colunas com resistor pull-up
  60. pinMode( Row1, INPUT_PULLUP);
  61. pinMode( Row2, INPUT_PULLUP);
  62. pinMode( Row3, INPUT_PULLUP);
  63.  
  64. pinMode(rele, OUTPUT); //Define o pino como saida
  65. pinMode(buzzer, OUTPUT); //Pino de alarme --> Salida
  66.  
  67. msg = 0; //Barreira para mensagem de boas vindas
  68.  
  69. Serial.begin(9600);
  70. }
  71. // ------------------------------------------------------------------------
  72. void loop()
  73. {
  74. if(msg==0) //Mostrar a mesnsagem de boas vindas apenas uma vez
  75. {
  76. lcd.setCursor(0,0);
  77. lcd.print("Peneirador PVE-I");
  78. lcd.setCursor(1,1);
  79. lcd.print(" Temporizador");
  80. // delay(5500);
  81. delay(100);
  82. msg = 1;
  83. lcd.clear();
  84. }
  85. //-------------------------------------------------------------------------------------------------
  86. // Leitura dos botões de seleção de tempo
  87. // Não sai do loop ate precionar o botão de inicio
  88. //-------------------------------------------------------------------------------------------------
  89. lcd.setCursor(1,0);
  90. Init_LCD();
  91. while (Inicio == 0) // Nào sai da rotina de teclado enquanto Inicio for igual a 0
  92. {
  93. for (int porta = 4; porta<8; porta++)
  94. {
  95. //Alterna o estado dos pinos das linhas
  96. digitalWrite(Linha1, HIGH);
  97. digitalWrite(Linha2, HIGH);
  98. digitalWrite(Linha3, HIGH);
  99. digitalWrite(Linha4, HIGH);
  100. digitalWrite(porta, LOW);
  101.  
  102. if (digitalRead(Row1) == LOW) // Verifica se alguma tecla da coluna 1 foi pressionada
  103. {
  104. Salva_Digito(porta-3, 1);
  105. while(digitalRead(Row1) == LOW){}
  106. }
  107. if (digitalRead(Row2) == LOW) // Verifica se alguma tecla da coluna 2 foi pressionada
  108. {
  109. Salva_Digito(porta-3, 2);
  110. while(digitalRead(Row2) == LOW){};
  111. }
  112. if (digitalRead(Row3) == LOW) // Verifica se alguma tecla da coluna 3 foi pressionada
  113. {
  114. Salva_Digito(porta-3, 3);
  115. while(digitalRead(Row3) == LOW){}
  116. }
  117. }
  118. delay(10);
  119. }
  120. if(segundos > 0 )digitalWrite(rele, HIGH); //Se o tempo for maior que 0 segundos inicia o rele
  121. segundostotal = segundos + (minutos * 60) + (horas * 60 * 60); //Converte o tempo selecionado em segundos!!
  122. while (segundostotal > 0)
  123. {
  124. delay (1000);
  125. segundostotal--;
  126. horas = ((segundostotal / 60)/ 60); //torna os segundos totais em horas
  127. minutos = (segundostotal / 60) % 60; //torna os segundos totais em minutos
  128. segundos = segundostotal % 60; //torna os segundos totais em periodos de 60 segundos
  129.  
  130. lcd.setCursor(0,0);
  131. lcd.print(" Tempo Restante ");
  132. lcd.setCursor(4,1);
  133. if (horas < 10) lcd.print("0");
  134. lcd.print(horas);
  135. lcd.print(":");
  136. if (minutos < 10) lcd.print("0");
  137. lcd.print(minutos);
  138. lcd.print(":");
  139. if (segundos < 10) lcd.print("0");
  140. lcd.print(segundos);
  141. if (segundostotal == 0)
  142. {
  143. while(1)
  144. {
  145. lcd.clear();
  146. lcd.setCursor(5,0);
  147. lcd.print("Tempo");
  148. lcd.setCursor(3,1);
  149. lcd.print("Finalizado");
  150. digitalWrite(rele, LOW); //Ao finalizar o processo desliga o rele
  151. Inicio = 0;
  152. contagem = 0;
  153.  
  154. sonarTono(TONO_ERROR,TIME_INTERVAL);
  155. lcd.clear();
  156. return; //exit(0);
  157. }
  158. }
  159. }
  160. }
  161. //------------------------------------
  162. // Tom
  163. //------------------------------------
  164. void sonarTono(int tono, int duracion)
  165. {
  166. tone(buzzer,4500);
  167. delay(1000);
  168.  
  169. //Desligando o buzzer.
  170. noTone(buzzer);
  171. delay(1000);
  172. }
  173. //------------------------------------------------------------------------
  174. void Salva_Digito(int x, int y)
  175. {
  176. Digito =((x*10) +y); // Identifica tecla digitada
  177. contagem++;
  178. switch (Digito) // Seleciona valor com tecla digitada
  179. {
  180. case 11: Digito = 1; break;
  181. case 12: Digito = 2; break;
  182. case 13: Digito = 3; break;
  183. case 21: Digito = 4; break;
  184. case 22: Digito = 5; break;
  185. case 23: Digito = 6; break;
  186. case 31: Digito = 7; break;
  187. case 32: Digito = 8; break;
  188. case 33: Digito = 9; break;
  189. case 41: Digito = 0x2A; break; // Hexa para * Cancela
  190. case 42: Digito = 0; break;
  191. case 43: Digito = 0x23; break; // Hexa para # Enter
  192. }
  193. if ((Digito != 0x2A) & (Digito != 0x23)) // Se for diferente de * ou #
  194. { // Faça
  195. if (contagem <3)
  196. {
  197. horas = (horas*10) + Digito; // Desloca a casa e adiciona digito novo
  198. lcd.setCursor(4,1);
  199. lcd.print(horas);
  200. if (horas > 23) horas = 0; // Se horas maior que 24 faça igual 0
  201. }
  202. if (contagem == 2 )
  203. {
  204. lcd.setCursor(4,1);
  205. if (horas < 10) lcd.print("0"); // Se as horas estão a menos de 10, coloque um "0" na frente.
  206. lcd.print(horas); // Sem esse código, ele mostra assim : H:M:S (1:M:S)
  207. lcd.print(":");
  208. }
  209. if ((contagem >=3) & (contagem <5))
  210. {
  211. minutos = (minutos*10) + Digito; // Desloca a casa e adiciona digito novo
  212. lcd.print(minutos);
  213. if (minutos > 59) minutos = 0; // Se minutos maior que 60 faça igual 0
  214. }
  215. if (contagem == 4 )
  216. {
  217. lcd.setCursor(7,1);
  218. if (minutos < 10) lcd.print("0"); // Se as minutos estão a menos de 10, coloque um "0" na frente.
  219. lcd.print(minutos);
  220. lcd.print(":");
  221. }
  222. if ((contagem >=5) & (contagem <7))
  223. {
  224. lcd.setCursor(10,1);
  225. segundos = (segundos*10) + Digito; // Desloca a casa e adiciona digito novo
  226. lcd.print(segundos);
  227. if (segundos > 59) segundos = 0; // Se segundos maior que 60 faça igual 0
  228. }
  229. if (contagem == 6 )
  230. {
  231. lcd.setCursor(10,1);
  232. if (segundos < 10) lcd.print("0"); // Se as segundos estão a menos de 10, coloque um "0" na frente.
  233. if ((horas+minutos+segundos) == 0) segundos = 1;
  234. lcd.print(segundos);
  235. lcd.noBlink();
  236. delay (500);
  237. lcd.setCursor(0,0);
  238. lcd.print(" # Inic * Cancel");
  239. }
  240. }
  241. if (Digito == 0x23) // Se for igual a # equivalente a enter
  242. { // Faça
  243. if (contagem <7)
  244. {
  245. contagem = 0;
  246. horas = 0; // Zera Resultado
  247. minutos = 0; // Zera Resultado
  248. segundos = 0; // Zera Resultado
  249. Init_LCD();
  250. }
  251. else
  252. Inicio = 1; // Sai da rotina do teclado
  253. }
  254. if (Digito == 0x2A) // Se for igual a * equivalente a cancela
  255. { // Faça
  256. contagem = 0;
  257. horas = 0; // Zera Resultado
  258. minutos = 0; // Zera Resultado
  259. segundos = 0; // Zera Resultado
  260. Init_LCD();
  261. }
  262. }
  263. //------------------------------------------------------------------------
  264. void Init_LCD()
  265. {
  266. lcd.setCursor(1,0);
  267. lcd.print("Digite o Tempo ");
  268. lcd.setCursor(4,1);
  269. lcd.print("HH");
  270. lcd.print(":");
  271. lcd.print("MM");
  272. lcd.print(":");
  273. lcd.print("SS");
  274. lcd.setCursor(4,1);
  275. lcd.blink();
  276. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement