Advertisement
RuiViana

Teclado 4x4 com pause

Nov 8th, 2015
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.53 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. byte Cont_Timer = 0;
  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. // ------------------------------------------------------------------------
  82. void loop()
  83. {
  84. if(msg==0) //Mostrar a mesnsagem de boas vindas apenas uma vez
  85. {
  86. lcd.setCursor(0,0);
  87. lcd.print("Cerveja");
  88. lcd.setCursor(1,1);
  89. lcd.print(" Temporizador");
  90. delay(200);
  91. msg = 1;
  92. lcd.clear();
  93. }
  94.  
  95.  
  96.  
  97. // Não sai do loop ate precionar o botão de inicio
  98.  
  99. lcd.setCursor(1,0);
  100. lcd.setCursor(0,0);
  101. lcd.print("Digite o Tempo A");
  102. Init_LCD();
  103. LeTeclado();
  104. Inicio = 0;
  105.  
  106. segundostotalA = segundos + (minutos * 60) + (horas * 60 * 60); //Converte o tempo selecionado em segundos!!
  107. horas = minutos = segundos = 0;
  108. lcd.setCursor(0,0);
  109. lcd.print("Digite o Tempo B");
  110. Init_LCD();
  111. LeTeclado();
  112. Inicio = 0;
  113. segundostotalB = segundos + (minutos * 60) + (horas * 60 * 60); //Converte o tempo selecionado em segundos!!
  114. horas = minutos = segundos = 0;
  115. lcd.setCursor(0,0);
  116. lcd.print("Digite o Tempo C");
  117. Init_LCD();
  118. LeTeclado();
  119. Inicio = 0;
  120. segundostotalC = segundos + (minutos * 60) + (horas * 60 * 60); //Converte o tempo selecionado em segundos!!
  121. horas = minutos = segundos = 0;
  122. segundostotal = segundostotalA;
  123. Decrementa();
  124. lcd.setCursor(0,0);
  125. lcd.print(" Pausa B ");
  126. Cont_Timer = 1;
  127. Inicio = 0;
  128. LeTeclado();
  129. segundostotal = segundostotalB;
  130. Decrementa();
  131. lcd.setCursor(0,0);
  132. lcd.print(" Pausa C ");
  133. Cont_Timer = 1;
  134. Inicio = 0;
  135. LeTeclado();
  136. segundostotal = segundostotalC;
  137. Decrementa();
  138. lcd.setCursor(0,0);
  139. lcd.print(" Fim do Processo ");
  140. Cont_Timer = 0;
  141. Inicio = 0;
  142. }
  143. //-----------------------------------------------------------------------
  144. void LeTeclado()
  145. {
  146. while (Inicio == 0) // Nào sai da rotina de teclado enquanto Inicio for igual a 0
  147. {
  148. for (int porta = 4; porta<8; porta++)
  149. {
  150. //Alterna o estado dos pinos das linhas
  151. digitalWrite(Linha1, HIGH);
  152. digitalWrite(Linha2, HIGH);
  153. digitalWrite(Linha3, HIGH);
  154. digitalWrite(Linha4, HIGH);
  155. digitalWrite(porta, LOW);
  156.  
  157. if (digitalRead(Row1) == LOW) // Verifica se alguma tecla da coluna 1 foi pressionada
  158. {
  159. Salva_Digito(porta-3, 1);
  160. while(digitalRead(Row1) == LOW){}
  161. }
  162. if (digitalRead(Row2) == LOW) // Verifica se alguma tecla da coluna 2 foi pressionada
  163. {
  164. Salva_Digito(porta-3, 2);
  165. while(digitalRead(Row2) == LOW){};
  166. }
  167. if (digitalRead(Row3) == LOW) // Verifica se alguma tecla da coluna 3 foi pressionada
  168. {
  169. Salva_Digito(porta-3, 3);
  170. while(digitalRead(Row3) == LOW){}
  171. }
  172. if (digitalRead(Row4) == LOW) // Verifica se alguma tecla da coluna 4 foi pressionada
  173. {
  174. Salva_Digito(porta-3, 4);
  175. while(digitalRead(Row4) == LOW){}
  176. }
  177. }
  178. delay(10);
  179. }
  180. }
  181. //------------------------------------------------------------------------
  182. void Salva_Digito(int x, int y)
  183. {
  184. Digito =((x*10) +y); // Identifica tecla digitada
  185. contagem++;
  186. // Serial.println(contagem);
  187. switch (Digito) // Seleciona valor com tecla digitada
  188. {
  189. case 11: Digito = 1; break;
  190. case 12: Digito = 2; break;
  191. case 13: Digito = 3; break;
  192. case 14: Digito = 0x61; break;
  193. case 21: Digito = 4; break;
  194. case 22: Digito = 5; break;
  195. case 23: Digito = 6; break;
  196. case 24: Digito = 0x62; break;
  197. case 31: Digito = 7; break;
  198. case 32: Digito = 8; break;
  199. case 33: Digito = 9; break;
  200. case 34: Digito = 0x63; break;
  201. case 41: Digito = 0x2A; break; // Hexa para * Cancela
  202. case 42: Digito = 0; break;
  203. case 43: Digito = 0x23; break; // Hexa para # Enter
  204. case 44: Digito = 0x64; break;
  205. }
  206.  
  207. if (Cont_Timer==0)
  208. Ident_Digito();
  209. else
  210. Sai_Pause();
  211. }
  212. //-----------------------------------------------------------------------------
  213. void Ident_Digito()
  214. {
  215. if ((Digito != 0x61) & (Digito != 0x62) & (Digito != 0x63) & (Digito != 0x64) & (Digito != 0x2A) & (Digito != 0x23)) // Se for No.
  216. { // Faça
  217. if (contagem <3)
  218. {
  219. horas = (horas*10) + Digito; // Desloca a casa e adiciona digito novo
  220. lcd.setCursor(4,1);
  221. lcd.print(horas);
  222. if (horas > 23) horas = 0; // Se horas maior que 24 faça igual 0
  223. }
  224. if (contagem == 2 )
  225. {
  226. lcd.setCursor(4,1);
  227. if (horas < 10) lcd.print("0"); // Se as horas estão a menos de 10, coloque um "0" na frente.
  228. lcd.print(horas); // Sem esse código, ele mostra assim : H:M:S (1:M:S)
  229. lcd.print(":");
  230. }
  231. if ((contagem >=3) & (contagem <5))
  232. {
  233. minutos = (minutos*10) + Digito; // Desloca a casa e adiciona digito novo
  234. lcd.print(minutos);
  235. if (minutos > 59) minutos = 0; // Se minutos maior que 60 faça igual 0
  236. }
  237. if (contagem == 4 )
  238. {
  239. lcd.setCursor(7,1);
  240. if (minutos < 10) lcd.print("0"); // Se as minutos estão a menos de 10, coloque um "0" na frente.
  241. lcd.print(minutos);
  242. lcd.print(":");
  243. }
  244. if ((contagem >=5) & (contagem <7))
  245. {
  246. lcd.setCursor(10,1);
  247. segundos = (segundos*10) + Digito; // Desloca a casa e adiciona digito novo
  248. lcd.print(segundos);
  249. if (segundos > 59) segundos = 0; // Se segundos maior que 60 faça igual 0
  250. }
  251. if (contagem == 6 )
  252. {
  253. lcd.setCursor(10,1);
  254. if (segundos < 10) lcd.print("0"); // Se as segundos estão a menos de 10, coloque um "0" na frente.
  255. if ((horas+minutos+segundos) == 0) segundos = 1;
  256. lcd.print(segundos);
  257. lcd.noBlink();
  258. delay (500);
  259. lcd.setCursor(0,0);
  260. lcd.print(" # Inic * Cancel");
  261. }
  262. }
  263. else Salva_Anula();
  264. }
  265. //------------------------------------------------------------------------
  266. void Sai_Pause ()
  267. {
  268. // Serial.println("pause");
  269. Inicio = 1;
  270. }
  271. //-----------------------------------------------------------------------
  272. void Salva_Anula()
  273. {
  274. if (Digito == 0x23) // Se for igual a # equivalente a enter
  275. { // Faça
  276. if (contagem <7)
  277. {
  278. contagem = 0;
  279. horas = 0; // Zera Resultado
  280. minutos = 0; // Zera Resultado
  281. segundos = 0; // Zera Resultado
  282. Init_LCD();
  283. }
  284. contagem = 0;
  285. Inicio = 1; // Sai da rotina do teclado
  286. }
  287. /* if (Digito == 0x62) // Se for igual a # equivalente a enter
  288. { // Faça
  289. if (contagem <7)
  290. {
  291. contagem = 0;
  292. horas = 0; // Zera Resultado
  293. minutos = 0; // Zera Resultado
  294. segundos = 0; // Zera Resultado
  295. Init_LCD();
  296. }
  297. else
  298. segundostotalB = segundos + (minutos * 60) + (horas * 60 * 60); //Converte o tempo selecionado em segundos!!
  299. Inicio = 1; // Sai da rotina do teclado
  300. }
  301. if (Digito == 0x63) // Se for igual a # equivalente a enter
  302. { // Faça
  303. if (contagem <7)
  304. {
  305. contagem = 0;
  306. horas = 0; // Zera Resultado
  307. minutos = 0; // Zera Resultado
  308. segundos = 0; // Zera Resultado
  309. Init_LCD();
  310. }
  311. else
  312. segundostotalC = segundos + (minutos * 60) + (horas * 60 * 60); //Converte o tempo selecionado em segundos!!
  313. Inicio = 1; // Sai da rotina do teclado
  314. }
  315. */
  316. if (Digito == 0x2A) // Se for igual a * equivalente a cancela
  317. { // Faça
  318. contagem = 0;
  319. horas = 0; // Zera Resultado
  320. minutos = 0; // Zera Resultado
  321. segundos = 0; // Zera Resultado
  322. Init_LCD();
  323. }
  324. }
  325. // ----------------------------------------------------------------------
  326. void Decrementa()
  327. {
  328. while (segundostotal > 0)
  329. {
  330. delay (1000);
  331. segundostotal--;
  332. horas = ((segundostotal / 60)/ 60); //torna os segundos totais em horas
  333. minutos = (segundostotal / 60) % 60; //torna os segundos totais em minutos
  334. segundos = segundostotal % 60; //torna os segundos totais em periodos de 60 segundos
  335.  
  336. lcd.setCursor(0,0);
  337. lcd.print(" Tempo Restante ");
  338. lcd.setCursor(4,1);
  339. if (horas < 10) lcd.print("0");
  340. lcd.print(horas);
  341. lcd.print(":");
  342. if (minutos < 10) lcd.print("0");
  343. lcd.print(minutos);
  344. lcd.print(":");
  345. if (segundos < 10) lcd.print("0");
  346. lcd.print(segundos);
  347.  
  348. }
  349. }
  350. //------------------------------------------------------------------------
  351. void Init_LCD()
  352. {
  353. lcd.setCursor(0,1);
  354. lcd.print(" ##");
  355. lcd.print(":");
  356. lcd.print("##");
  357. lcd.print(":");
  358. lcd.print("## ");
  359. lcd.setCursor(4,1);
  360. lcd.blink();
  361. }
  362. // ----------------------------------------------------------------------
  363. void sonarTono(int tono, int duracion)
  364. {
  365. tone(buzzer,4500);
  366. delay(1000);
  367. noTone(buzzer); //Desligando o buzzer.
  368. delay(1000);
  369. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement