Advertisement
RuiViana

Temporizador_Corrijido

Oct 8th, 2015
322
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.11 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(11, 12, A0, A1, A2, A3); //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 int horas = 0; // Variável para mostar no LCD as Horas
  37. unsigned int minutos = 0; // Variável para mostar no LCD as Minutos
  38. unsigned int segundos = 0; // Variável para mostar no LCD as segundos
  39. unsigned int 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. msg = 1;
  82. lcd.clear();
  83. }
  84. //-------------------------------------------------------------------------------------------------
  85. // Leitura dos botões de seleção de tempo
  86. // Não sai do loop ate precionar o botão de inicio
  87. //-------------------------------------------------------------------------------------------------
  88. lcd.setCursor(1,0);
  89. lcd.print("Digite o Tempo");
  90. while (Inicio == 0) // Nào sai da rotina de teclado enquanto Inicio for igual a 0
  91. {
  92. lcd.setCursor(4,1);
  93.  
  94. if (horas < 10) lcd.print("0"); // Se as horas estão a menos de 10, coloque um "0" na frente.
  95. lcd.print(horas); // Sem esse código, ele mostra assim : H:M:S (1:M:S)
  96. lcd.print(":");
  97.  
  98. if (minutos < 10) lcd.print("0"); // Se as minutos estão a menos de 10, coloque um "0" na frente.
  99. lcd.print(minutos);
  100.  
  101. lcd.print(":");
  102. if (segundos < 10) lcd.print("0"); // Se as segundos estão a menos de 10, coloque um "0" na frente.
  103. lcd.print(segundos);
  104.  
  105. for (int porta = 4; porta<8; porta++)
  106. {
  107. //Alterna o estado dos pinos das linhas
  108. digitalWrite(Linha1, HIGH);
  109. digitalWrite(Linha2, HIGH);
  110. digitalWrite(Linha3, HIGH);
  111. digitalWrite(Linha4, HIGH);
  112. digitalWrite(porta, LOW);
  113.  
  114. if (digitalRead(Row1) == LOW) // Verifica se alguma tecla da coluna 1 foi pressionada
  115. {
  116. Salva_Digito(porta-3, 1);
  117. while(digitalRead(Row1) == LOW){}
  118. }
  119. if (digitalRead(Row2) == LOW) // Verifica se alguma tecla da coluna 2 foi pressionada
  120. {
  121. Salva_Digito(porta-3, 2);
  122. while(digitalRead(Row2) == LOW){};
  123. }
  124. if (digitalRead(Row3) == LOW) // Verifica se alguma tecla da coluna 3 foi pressionada
  125. {
  126. Salva_Digito(porta-3, 3);
  127. while(digitalRead(Row3) == LOW){}
  128. }
  129. }
  130. // Serial.println(Digito);
  131. delay(10);
  132. }
  133.  
  134. if(segundos > 0 )digitalWrite(rele, HIGH); //Se o tempo for maior que 0 segundos inicia o rele
  135.  
  136. segundostotal = segundos + (minutos * 60) + (horas * 60 * 60); //Converte o tempo selecionado em segundos!!
  137.  
  138. while (segundostotal > 0)
  139. {
  140. delay (1000);
  141. segundostotal--;
  142.  
  143. horas = ((segundostotal / 60)/ 60); //torna os segundos totais em horas
  144. minutos = (segundostotal / 60) % 60; //torna os segundos totais em minutos
  145. segundos = segundostotal % 60; //torna os segundos totais em periodos de 60 segundos
  146.  
  147. lcd.setCursor(0,0);
  148. lcd.print(" Tempo Restante");
  149.  
  150. lcd.setCursor(4,1);
  151. if (horas < 10) lcd.print("0");
  152. lcd.print(horas);
  153. lcd.print(":");
  154.  
  155. if (minutos < 10) lcd.print("0");
  156. lcd.print(minutos);
  157.  
  158. lcd.print(":");
  159. if (segundos < 10) lcd.print("0");
  160. lcd.print(segundos);
  161.  
  162. if (segundostotal == 0)
  163. {
  164. while(1)
  165. {
  166. lcd.clear();
  167. lcd.setCursor(5,0);
  168. lcd.print("Tempo");
  169. lcd.setCursor(3,1);
  170. lcd.print("Finalizado");
  171. digitalWrite(rele, LOW); //Ao finalizar o processo desliga o rele
  172.  
  173. sonarTono(TONO_ERROR,TIME_INTERVAL);
  174. lcd.clear();
  175. return;
  176. //exit(0);
  177. }
  178. }
  179. }
  180. }
  181. //------------------------------------
  182. // Tom
  183. //------------------------------------
  184. void sonarTono(int tono, int duracion)
  185. {
  186. tone(buzzer,4500);
  187. delay(1000);
  188.  
  189. //Desligando o buzzer.
  190. noTone(buzzer);
  191. delay(1000);
  192. }
  193. //------------------------------------------------------------------------
  194. void Salva_Digito(int x, int y)
  195. {
  196. Digito =((x*10) +y); // Identifica tecla digitada
  197. contagem++;
  198. switch (Digito) // Seleciona valor com tecla digitada
  199. {
  200. case 11: Digito = 1; break;
  201. case 12: Digito = 2; break;
  202. case 13: Digito = 3; break;
  203. case 21: Digito = 4; break;
  204. case 22: Digito = 5; break;
  205. case 23: Digito = 6; break;
  206. case 31: Digito = 7; break;
  207. case 32: Digito = 8; break;
  208. case 33: Digito = 9; break;
  209. case 41: Digito = 0x2A; break; // Hexa para * Cancela
  210. case 42: Digito = 0; break;
  211. case 43: Digito = 0x23; break; // Hexa para # Enter
  212. }
  213. if ((Digito != 0x2A) & (Digito != 0x23)) // Se for diferente de * ou #
  214. { // Faça
  215. if (contagem <3)
  216. {
  217. horas = (horas*10) + Digito; // Desloca a casa e adiciona digito novo
  218. if (horas > 24) horas = 0; // Se horas maior que 24 faça igual 0
  219. }
  220. if (contagem == 2 ) Serial.println(horas);
  221. if ((contagem >=3) & (contagem <5))
  222. {
  223. minutos = (minutos*10) + Digito; // Desloca a casa e adiciona digito novo
  224. if (minutos > 60) minutos = 0; // Se minutos maior que 24 faça igual 0
  225. }
  226. if (contagem == 4 ) Serial.println(minutos);
  227. if ((contagem >=5) & (contagem <7))
  228. {
  229. segundos = (segundos*10) + Digito; // Desloca a casa e adiciona digito novo
  230. if (segundos > 60) segundos = 0; // Se segundos maior que 24 faça igual 0
  231. }
  232. if (contagem == 6 ) Serial.println(segundos);
  233. }
  234. if (Digito == 0x23) // Se for igual a # equivalente a enter
  235. { // Faça
  236. Inicio = 1; // Sai da rotina do teclado
  237. }
  238. if (Digito == 0x2A) // Se for igual a * equivalente a cancela
  239. { // Faça
  240. contagem = 0;
  241. horas = 0; // Zera Resultado
  242. minutos = 0; // Zera Resultado
  243. segundos = 0; // Zera Resultado
  244. }
  245. }
  246. //------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement