Advertisement
RuiViana

Teclado 4X4 3 tempod

Nov 8th, 2015
250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.78 KB | None | 0 0
  1. /*
  2. Digite o primeiro tempo e aperte a tecla A
  3.  
  4. Digite o segunto tempo e tecle B
  5. e
  6. Digite o terceiro tempo e tecle C
  7. esse é o proposito
  8. só que quando acabase o tempo A
  9. vai soar um BIP e ai vai aparecer
  10. "Faça o teste do IODO""
  11. Continua ou NAO?
  12. ou melhor
  13. TESTE OK?
  14. SIM ou NAO
  15. SIM ele vai para o tempo B
  16. Nao ele fica neste estado até eu dar prossiga...
  17. ou melhor..
  18. aumente o tempo em minutos
  19. */
  20.  
  21. #include <avr/wdt.h>
  22. #include <LiquidCrystal.h>
  23. #define TONO_ERROR 600
  24. #define TIME_INTERVAL 300
  25.  
  26. LiquidCrystal lcd(A0, A1, A2, A3, A4, A5); //Inicializar a biblioteca com o número de pinos utilizados // Uno
  27.  
  28. // Pinos do UNO
  29. #define Linha1 4 // Linha 1 do teclado no pino 4
  30. #define Linha2 5 // Linha 2 do teclado no pino 5
  31. #define Linha3 6 // Linha 3 do teclado no pino 6
  32. #define Linha4 7 // Linha 4 do teclado no pino 7
  33.  
  34. #define Row1 8 // Coluna 1 do teclado no pino 8
  35. #define Row2 9 // Coluna 2 do teclado no pino 9
  36. #define Row3 10 // Coluna 3 do teclado no pino 10
  37. #define Row4 11 // Coluna 4 do teclado no pino 11
  38.  
  39. byte Digito = 0 ; // Variavel Digito digitado
  40. byte i = 0;
  41. byte contagem = 0; // Numero de digitos digitados
  42. unsigned long Acumulado = 0; // Variavel Digitos acumulados
  43. unsigned long Tempo = 0; // variavel Tempo de atraso = Digito Acumulado
  44.  
  45. unsigned Inicio = 0;
  46. unsigned long horas = 0; // Variável para mostar no LCD as Horas
  47. unsigned long minutos = 0; // Variável para mostar no LCD as Minutos
  48. unsigned long segundos = 0; // Variável para mostar no LCD as segundos
  49. unsigned long segundostotal = 0; // Tempo Total
  50. unsigned long segundostotalA = 0; // Tempo Total
  51. unsigned long segundostotalB = 0; // Tempo Total
  52. unsigned long segundostotalC = 0; // Tempo Total
  53.  
  54. int rele = A7; //Rele Uno
  55. int buzzer = A6; //Alarme Uno
  56. int msg= 0; //Barreira para mensagem de boas vindas
  57.  
  58. // ---------------------------------------------------------------------
  59. void setup()
  60. {
  61. Serial.begin(9600);
  62. lcd.begin(16, 2); // Defini o numero de colunas e linhas do LCD 16x2
  63.  
  64. //Pinos ligados aos pinos do teclado - Linhas
  65. pinMode(Linha1, OUTPUT);
  66. pinMode(Linha2, OUTPUT);
  67. pinMode(Linha3, OUTPUT);
  68. pinMode(Linha4, OUTPUT);
  69.  
  70. //Pinos ligados aos pinos do teclado - Colunas com resistor pull-up
  71. pinMode( Row1, INPUT_PULLUP);
  72. pinMode( Row2, INPUT_PULLUP);
  73. pinMode( Row3, INPUT_PULLUP);
  74. pinMode( Row4, INPUT_PULLUP);
  75.  
  76. pinMode(rele, OUTPUT); //Define o pino como saida
  77. pinMode(buzzer, OUTPUT); //Pino de alarme --> Salida
  78.  
  79. msg = 0; //Barreira para mensagem de boas vindas
  80.  
  81. Serial.begin(9600);
  82. }
  83. // ------------------------------------------------------------------------
  84. void loop()
  85. {
  86. if(msg==0) //Mostrar a mesnsagem de boas vindas apenas uma vez
  87. {
  88. lcd.setCursor(0,0);
  89. lcd.print("Cerveja");
  90. lcd.setCursor(1,1);
  91. lcd.print(" Temporizador");
  92. delay(200);
  93. msg = 1;
  94. lcd.clear();
  95. }
  96. // Não sai do loop ate precionar o botão de inicio
  97. lcd.setCursor(1,0);
  98. lcd.setCursor(0,0);
  99. lcd.print("Digite o Tempo A");
  100. Init_LCD();
  101. LeTeclado();
  102. Inicio = 0;
  103. segundostotalA = segundos + (minutos * 60) + (horas * 60 * 60); //Converte o tempo selecionado em segundos!!
  104. horas = minutos = segundos = 0;
  105. lcd.setCursor(0,0);
  106. lcd.print("Digite o Tempo B");
  107. Init_LCD();
  108. LeTeclado();
  109. Inicio = 0;
  110. segundostotalB = segundos + (minutos * 60) + (horas * 60 * 60); //Converte o tempo selecionado em segundos!!
  111. horas = minutos = segundos = 0;
  112. lcd.setCursor(0,0);
  113. lcd.print("Digite o Tempo C");
  114. Init_LCD();
  115. LeTeclado();
  116. Inicio = 0;
  117. segundostotalC = segundos + (minutos * 60) + (horas * 60 * 60); //Converte o tempo selecionado em segundos!!
  118. horas = minutos = segundos = 0;
  119. segundostotal = segundostotalA;
  120. Decrementa();
  121. segundostotal = segundostotalB;
  122. Decrementa();
  123. segundostotal = segundostotalC;
  124. Decrementa();
  125. }
  126. //-----------------------------------------------------------------------
  127. void LeTeclado()
  128. {
  129. while (Inicio == 0) // Nào sai da rotina de teclado enquanto Inicio for igual a 0
  130. {
  131. for (int porta = 4; porta<8; porta++)
  132. {
  133. //Alterna o estado dos pinos das linhas
  134. digitalWrite(Linha1, HIGH);
  135. digitalWrite(Linha2, HIGH);
  136. digitalWrite(Linha3, HIGH);
  137. digitalWrite(Linha4, HIGH);
  138. digitalWrite(porta, LOW);
  139.  
  140. if (digitalRead(Row1) == LOW) // Verifica se alguma tecla da coluna 1 foi pressionada
  141. {
  142. Salva_Digito(porta-3, 1);
  143. while(digitalRead(Row1) == LOW){}
  144. }
  145. if (digitalRead(Row2) == LOW) // Verifica se alguma tecla da coluna 2 foi pressionada
  146. {
  147. Salva_Digito(porta-3, 2);
  148. while(digitalRead(Row2) == LOW){};
  149. }
  150. if (digitalRead(Row3) == LOW) // Verifica se alguma tecla da coluna 3 foi pressionada
  151. {
  152. Salva_Digito(porta-3, 3);
  153. while(digitalRead(Row3) == LOW){}
  154. }
  155. if (digitalRead(Row4) == LOW) // Verifica se alguma tecla da coluna 4 foi pressionada
  156. {
  157. Salva_Digito(porta-3, 4);
  158. while(digitalRead(Row4) == LOW){}
  159. }
  160. }
  161. delay(10);
  162. }
  163. }
  164. // ----------------------------------------------------------------------
  165. void Decrementa()
  166. {
  167. while (segundostotal > 0)
  168. {
  169. delay (1000);
  170. segundostotal--;
  171. horas = ((segundostotal / 60)/ 60); //torna os segundos totais em horas
  172. minutos = (segundostotal / 60) % 60; //torna os segundos totais em minutos
  173. segundos = segundostotal % 60; //torna os segundos totais em periodos de 60 segundos
  174.  
  175. lcd.setCursor(0,0);
  176. lcd.print(" Tempo Restante ");
  177. lcd.setCursor(4,1);
  178. if (horas < 10) lcd.print("0");
  179. lcd.print(horas);
  180. lcd.print(":");
  181. if (minutos < 10) lcd.print("0");
  182. lcd.print(minutos);
  183. lcd.print(":");
  184. if (segundos < 10) lcd.print("0");
  185. lcd.print(segundos);
  186.  
  187. }
  188. }
  189. // ----------------------------------------------------------------------
  190. void sonarTono(int tono, int duracion)
  191. {
  192. tone(buzzer,4500);
  193. delay(1000);
  194. noTone(buzzer); //Desligando o buzzer.
  195. delay(1000);
  196. }
  197. //------------------------------------------------------------------------
  198. void Salva_Digito(int x, int y)
  199. {
  200. Digito =((x*10) +y); // Identifica tecla digitada
  201. contagem++;
  202. Serial.println(contagem);
  203. switch (Digito) // Seleciona valor com tecla digitada
  204. {
  205. case 11: Digito = 1; break;
  206. case 12: Digito = 2; break;
  207. case 13: Digito = 3; break;
  208. case 14: Digito = 0x61; break;
  209. case 21: Digito = 4; break;
  210. case 22: Digito = 5; break;
  211. case 23: Digito = 6; break;
  212. case 24: Digito = 0x62; break;
  213. case 31: Digito = 7; break;
  214. case 32: Digito = 8; break;
  215. case 33: Digito = 9; break;
  216. case 34: Digito = 0x63; break;
  217. case 41: Digito = 0x2A; break; // Hexa para * Cancela
  218. case 42: Digito = 0; break;
  219. case 43: Digito = 0x23; break; // Hexa para # Enter
  220. case 44: Digito = 0x64; break;
  221. }
  222. if ((Digito != 0x61) & (Digito != 0x62) & (Digito != 0x63) & (Digito != 0x64) & (Digito != 0x2A) & (Digito != 0x23)) // Se for No.
  223. { // Faça
  224. if (contagem <3)
  225. {
  226. horas = (horas*10) + Digito; // Desloca a casa e adiciona digito novo
  227. lcd.setCursor(4,1);
  228. lcd.print(horas);
  229. if (horas > 23) horas = 0; // Se horas maior que 24 faça igual 0
  230. }
  231. if (contagem == 2 )
  232. {
  233. lcd.setCursor(4,1);
  234. if (horas < 10) lcd.print("0"); // Se as horas estão a menos de 10, coloque um "0" na frente.
  235. lcd.print(horas); // Sem esse código, ele mostra assim : H:M:S (1:M:S)
  236. lcd.print(":");
  237. }
  238. if ((contagem >=3) & (contagem <5))
  239. {
  240. minutos = (minutos*10) + Digito; // Desloca a casa e adiciona digito novo
  241. lcd.print(minutos);
  242. if (minutos > 59) minutos = 0; // Se minutos maior que 60 faça igual 0
  243. }
  244. if (contagem == 4 )
  245. {
  246. lcd.setCursor(7,1);
  247. if (minutos < 10) lcd.print("0"); // Se as minutos estão a menos de 10, coloque um "0" na frente.
  248. lcd.print(minutos);
  249. lcd.print(":");
  250. }
  251. if ((contagem >=5) & (contagem <7))
  252. {
  253. lcd.setCursor(10,1);
  254. segundos = (segundos*10) + Digito; // Desloca a casa e adiciona digito novo
  255. lcd.print(segundos);
  256. if (segundos > 59) segundos = 0; // Se segundos maior que 60 faça igual 0
  257. }
  258. if (contagem == 6 )
  259. {
  260. lcd.setCursor(10,1);
  261. if (segundos < 10) lcd.print("0"); // Se as segundos estão a menos de 10, coloque um "0" na frente.
  262. if ((horas+minutos+segundos) == 0) segundos = 1;
  263. lcd.print(segundos);
  264. lcd.noBlink();
  265. delay (500);
  266. lcd.setCursor(0,0);
  267. lcd.print(" # Inic * Cancel");
  268. }
  269. }
  270. else Salva_Anula();
  271.  
  272. }
  273. //-----------------------------------------------------------------------
  274. void Salva_Anula()
  275. {
  276. if (Digito == 0x23) // Se for igual a # equivalente a enter
  277. { // Faça
  278. if (contagem <7)
  279. {
  280. contagem = 0;
  281. horas = 0; // Zera Resultado
  282. minutos = 0; // Zera Resultado
  283. segundos = 0; // Zera Resultado
  284. Init_LCD();
  285. }
  286. contagem = 0;
  287. Inicio = 1; // Sai da rotina do teclado
  288. }
  289. /* if (Digito == 0x62) // Se for igual a # equivalente a enter
  290. { // Faça
  291. if (contagem <7)
  292. {
  293. contagem = 0;
  294. horas = 0; // Zera Resultado
  295. minutos = 0; // Zera Resultado
  296. segundos = 0; // Zera Resultado
  297. Init_LCD();
  298. }
  299. else
  300. segundostotalB = segundos + (minutos * 60) + (horas * 60 * 60); //Converte o tempo selecionado em segundos!!
  301. Inicio = 1; // Sai da rotina do teclado
  302. }
  303. if (Digito == 0x63) // Se for igual a # equivalente a enter
  304. { // Faça
  305. if (contagem <7)
  306. {
  307. contagem = 0;
  308. horas = 0; // Zera Resultado
  309. minutos = 0; // Zera Resultado
  310. segundos = 0; // Zera Resultado
  311. Init_LCD();
  312. }
  313. else
  314. segundostotalC = segundos + (minutos * 60) + (horas * 60 * 60); //Converte o tempo selecionado em segundos!!
  315. Inicio = 1; // Sai da rotina do teclado
  316. }
  317. */
  318. if (Digito == 0x2A) // Se for igual a * equivalente a cancela
  319. { // Faça
  320. contagem = 0;
  321. horas = 0; // Zera Resultado
  322. minutos = 0; // Zera Resultado
  323. segundos = 0; // Zera Resultado
  324. Init_LCD();
  325. }
  326. }
  327. //------------------------------------------------------------------------
  328. void Init_LCD()
  329. {
  330. lcd.setCursor(4,1);
  331. lcd.print("##");
  332. lcd.print(":");
  333. lcd.print("##");
  334. lcd.print(":");
  335. lcd.print("##");
  336. lcd.setCursor(4,1);
  337. lcd.blink();
  338. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement