Advertisement
RuiViana

Temporizador_Teclado_01

Oct 7th, 2015
366
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.33 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
  7.  
  8.  
  9. /* // Pinos do UNO
  10. #define Linha1 A0 // Linha 1 do teclado no pino 4
  11. #define Linha2 A1 // Linha 2 do teclado no pino 5
  12. #define Linha3 A2 // Linha 3 do teclado no pino 6
  13. #define Linha4 A3 // Linha 4 do teclado no pino 7
  14.  
  15. #define Row1 3 // Coluna 1 do teclado no pino 8
  16. #define Row2 4 // Coluna 2 do teclado no pino 9
  17. #define Row3 13 // 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
  43. int buzzer = 6; //Alarme
  44. int msg= 0; //Barreira para mensagem de boas vindas
  45.  
  46. // ---------------------------------------------------------------------
  47. void setup()
  48. {
  49. lcd.begin(16, 2); // Defini o numero de colunas e linhas do LCD 16x2
  50.  
  51. pinMode(rele, OUTPUT); //Define o pino como saida
  52. pinMode(buzzer, OUTPUT); //Pino de alarme --> Salida
  53.  
  54. msg = 0; //Barreira para mensagem de boas vindas
  55.  
  56. Serial.begin(9600);
  57. }
  58. // ------------------------------------------------------------------------
  59. void loop()
  60. {
  61. if(msg==0) //Mostrar a mesnsagem de boas vindas apenas uma vez
  62. {
  63. lcd.setCursor(0,0);
  64. lcd.print("Peneirador PVE-I");
  65. lcd.setCursor(1,1);
  66. lcd.print(" Temporizador");
  67. delay(5500);
  68. msg = 1;
  69. lcd.clear();
  70. }
  71. //-------------------------------------------------------------------------------------------------
  72. // Leitura dos botões de seleção de tempo
  73. // Não sai do loop ate precionar o botão de inicio
  74. //-------------------------------------------------------------------------------------------------
  75.  
  76. while (Inicio == 0) // Nào sai da rotina de teclado enquanto Inicio for igual a 0
  77. {
  78. lcd.setCursor(4,1);
  79.  
  80. if (horas < 10) lcd.print("0"); // Se as horas estão a menos de 10, coloque um "0" na frente.
  81. lcd.print(horas); // Sem esse código, ele mostra assim : H:M:S (1:M:S)
  82. lcd.print(":");
  83.  
  84. if (minutos < 10) lcd.print("0"); // Se as minutos estão a menos de 10, coloque um "0" na frente.
  85. lcd.print(minutos);
  86.  
  87. lcd.print(":");
  88. if (segundos < 10) lcd.print("0"); // Se as segundos estão a menos de 10, coloque um "0" na frente.
  89. lcd.print(segundos);
  90.  
  91. for (int porta = 4; porta<8; porta++)
  92. {
  93. //Alterna o estado dos pinos das linhas
  94. digitalWrite(Linha1, HIGH);
  95. digitalWrite(Linha2, HIGH);
  96. digitalWrite(Linha3, HIGH);
  97. digitalWrite(Linha4, HIGH);
  98. digitalWrite(porta, LOW);
  99.  
  100. if (digitalRead(Row1) == LOW) // Verifica se alguma tecla da coluna 1 foi pressionada
  101. {
  102. Salva_Digito(porta-3, 1);
  103. while(digitalRead(Row1) == LOW){}
  104. }
  105. if (digitalRead(Row2) == LOW) // Verifica se alguma tecla da coluna 2 foi pressionada
  106. {
  107. Salva_Digito(porta-3, 2);
  108. while(digitalRead(Row2) == LOW){};
  109. }
  110. if (digitalRead(Row3) == LOW) // Verifica se alguma tecla da coluna 3 foi pressionada
  111. {
  112. Salva_Digito(porta-3, 3);
  113. while(digitalRead(Row3) == LOW){}
  114. }
  115. }
  116. delay(10);
  117. }
  118.  
  119. if(segundos > 0 )digitalWrite(rele, HIGH); //Se o tempo for maior que 0 segundos inicia o rele
  120.  
  121. segundostotal = segundos + (minutos * 60) + (horas * 60 * 60); //Converte o tempo selecionado em segundos!!
  122.  
  123. while (segundostotal > 0)
  124. {
  125. delay (1000);
  126. segundostotal--;
  127.  
  128. horas = ((segundostotal / 60)/ 60); //torna os segundos totais em horas
  129. minutos = (segundostotal / 60) % 60; //torna os segundos totais em minutos
  130. segundos = segundostotal % 60; //torna os segundos totais em periodos de 60 segundos
  131.  
  132. lcd.setCursor(0,0);
  133. lcd.print(" Tempo Restante");
  134.  
  135. lcd.setCursor(4,1);
  136. if (horas < 10) lcd.print("0");
  137. lcd.print(horas);
  138. lcd.print(":");
  139.  
  140. if (minutos < 10) lcd.print("0");
  141. lcd.print(minutos);
  142.  
  143. lcd.print(":");
  144. if (segundos < 10) lcd.print("0");
  145. lcd.print(segundos);
  146.  
  147. if (segundostotal == 0)
  148.  
  149. {
  150. while(1)
  151. {
  152. lcd.clear();
  153. lcd.setCursor(5,0);
  154. lcd.print("Tempo");
  155. lcd.setCursor(3,1);
  156. lcd.print("Finalizado");
  157. digitalWrite(rele, LOW); //Ao finalizar o processo desliga o rele
  158.  
  159. sonarTono(TONO_ERROR,TIME_INTERVAL);
  160. lcd.clear();
  161. return;
  162. //exit(0);
  163. }
  164. }
  165. }
  166.  
  167. }
  168. //------------------------------------
  169. // Tom
  170. //------------------------------------
  171.  
  172.  
  173. void sonarTono(int tono, int duracion)
  174. {
  175. tone(buzzer,4500);
  176. delay(1000);
  177.  
  178. //Desligando o buzzer.
  179. noTone(buzzer);
  180. delay(1000);
  181. }
  182.  
  183. //------------------------------------------------------------------------
  184. void Salva_Digito(int x, int y)
  185. {
  186. Digito =((x*10) +y); // Identifica tecla digitada
  187. contagem++;
  188. switch (Digito) // Seleciona valor com tecla digitada
  189. {
  190. case 11: Digito = 1; break;
  191. case 12: Digito = 2; break;
  192. case 13: Digito = 3; break;
  193. case 21: Digito = 4; break;
  194. case 22: Digito = 5; break;
  195. case 23: Digito = 6; break;
  196. case 31: Digito = 7; break;
  197. case 32: Digito = 8; break;
  198. case 33: Digito = 9; break;
  199. case 41: Digito = 0x2A; break; // Hexa para * Cancela
  200. case 42: Digito = 0; break;
  201. case 43: Digito = 0x23; break; // Hexa para # Enter
  202. }
  203. if ((Digito != 0x2A) & (Digito != 0x23)) // Se for diferente de * ou #
  204. { // Faça
  205. if (contagem <3)
  206. {
  207. horas = (horas*10) + Digito; // Desloca a casa e adiciona digito novo
  208. if (horas > 24) horas = 0; // Se horas maior que 24 faça igual 0
  209. }
  210. if ((contagem >=3) & (contagem <5))
  211. {
  212. minutos = (minutos*10) + Digito; // Desloca a casa e adiciona digito novo
  213. if (minutos > 60) minutos = 0; // Se minutos maior que 24 faça igual 0
  214. }
  215. if ((contagem >=5) & (contagem <7))
  216. {
  217. segundos = (segundos*10) + Digito; // Desloca a casa e adiciona digito novo
  218. if (segundos > 60) segundos = 0; // Se segundos maior que 24 faça igual 0
  219. }
  220. }
  221. if (Digito == 0x23) // Se for igual a # equivalente a enter
  222. { // Faça
  223. Inicio = 1; // Sai da rotina do teclado
  224. }
  225. if (Digito == 0x2A) // Se for igual a * equivalente a cancela
  226. { // Faça
  227. contagem = 0;
  228. horas = 0; // Zera Resultado
  229. minutos = 0; // Zera Resultado
  230. segundos = 0; // Zera Resultado
  231. }
  232. }
  233. //------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement