Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/wdt.h>
- #include <LiquidCrystal.h>
- #define TONO_ERROR 600
- #define TIME_INTERVAL 3000
- LiquidCrystal lcd(8, 7, 9, 10, 11, 12); //Inicializar a biblioteca com o número de pinos utilizados // Mega
- //LiquidCrystal lcd(11, 12, A0, A1, A2, A3); //Inicializar a biblioteca com o número de pinos utilizados // Uno
- /*// Pinos do UNO
- #define Linha1 4 // Linha 1 do teclado no pino 4
- #define Linha2 5 // Linha 2 do teclado no pino 5
- #define Linha3 6 // Linha 3 do teclado no pino 6
- #define Linha4 7 // Linha 4 do teclado no pino 7
- #define Row1 8 // Coluna 1 do teclado no pino 8
- #define Row2 9 // Coluna 2 do teclado no pino 9
- #define Row3 10 // Coluna 3 do teclado no pino 10
- */
- // Pinos do Mega
- #define Linha1 34 // Linha 1 do teclado no pino 34
- #define Linha2 35 // Linha 2 do teclado no pino 35
- #define Linha3 36 // Linha 3 do teclado no pino 36
- #define Linha4 37 // Linha 4 do teclado no pino 37
- #define Row1 38 // Coluna 1 do teclado no pino 38
- #define Row2 39 // Coluna 2 do teclado no pino 39
- #define Row3 40 // Coluna 3 do teclado no pino 40
- byte Digito = 0 ; // Variavel Digito digitado
- byte i = 0;
- byte contagem = 0; // Numero de digitos digitados
- unsigned long Acumulado = 0; // Variavel Digitos acumulados
- unsigned long Tempo = 0; // variavel Tempo de atraso = Digito Acumulado
- unsigned Inicio = 0;
- unsigned int horas = 0; // Variável para mostar no LCD as Horas
- unsigned int minutos = 0; // Variável para mostar no LCD as Minutos
- unsigned int segundos = 0; // Variável para mostar no LCD as segundos
- unsigned int segundostotal = 0; //Tempo Total
- int rele = 5; //Rele Mega
- // int rele = 13; //Rele Uno
- int buzzer = 6; //Alarme Mega
- // int buzzer = 3; //Alarme Uno
- int msg= 0; //Barreira para mensagem de boas vindas
- // ---------------------------------------------------------------------
- void setup()
- {
- lcd.begin(16, 2); // Defini o numero de colunas e linhas do LCD 16x2
- //Pinos ligados aos pinos do teclado - Linhas
- pinMode(Linha1, OUTPUT);
- pinMode(Linha2, OUTPUT);
- pinMode(Linha3, OUTPUT);
- pinMode(Linha4, OUTPUT);
- //Pinos ligados aos pinos do teclado - Colunas com resistor pull-up
- pinMode( Row1, INPUT_PULLUP);
- pinMode( Row2, INPUT_PULLUP);
- pinMode( Row3, INPUT_PULLUP);
- pinMode(rele, OUTPUT); //Define o pino como saida
- pinMode(buzzer, OUTPUT); //Pino de alarme --> Salida
- msg = 0; //Barreira para mensagem de boas vindas
- Serial.begin(9600);
- }
- // ------------------------------------------------------------------------
- void loop()
- {
- if(msg==0) //Mostrar a mesnsagem de boas vindas apenas uma vez
- {
- lcd.setCursor(0,0);
- lcd.print("Peneirador PVE-I");
- lcd.setCursor(1,1);
- lcd.print(" Temporizador");
- delay(5500);
- msg = 1;
- lcd.clear();
- }
- //-------------------------------------------------------------------------------------------------
- // Leitura dos botões de seleção de tempo
- // Não sai do loop ate precionar o botão de inicio
- //-------------------------------------------------------------------------------------------------
- lcd.setCursor(1,0);
- lcd.print("Digite o Tempo");
- while (Inicio == 0) // Nào sai da rotina de teclado enquanto Inicio for igual a 0
- {
- lcd.setCursor(4,1);
- if (horas < 10) lcd.print("0"); // Se as horas estão a menos de 10, coloque um "0" na frente.
- lcd.print(horas); // Sem esse código, ele mostra assim : H:M:S (1:M:S)
- lcd.print(":");
- if (minutos < 10) lcd.print("0"); // Se as minutos estão a menos de 10, coloque um "0" na frente.
- lcd.print(minutos);
- lcd.print(":");
- if (segundos < 10) lcd.print("0"); // Se as segundos estão a menos de 10, coloque um "0" na frente.
- lcd.print(segundos);
- for (int porta = 4; porta<8; porta++)
- {
- //Alterna o estado dos pinos das linhas
- digitalWrite(Linha1, HIGH);
- digitalWrite(Linha2, HIGH);
- digitalWrite(Linha3, HIGH);
- digitalWrite(Linha4, HIGH);
- digitalWrite(porta, LOW);
- if (digitalRead(Row1) == LOW) // Verifica se alguma tecla da coluna 1 foi pressionada
- {
- Salva_Digito(porta-3, 1);
- while(digitalRead(Row1) == LOW){}
- }
- if (digitalRead(Row2) == LOW) // Verifica se alguma tecla da coluna 2 foi pressionada
- {
- Salva_Digito(porta-3, 2);
- while(digitalRead(Row2) == LOW){};
- }
- if (digitalRead(Row3) == LOW) // Verifica se alguma tecla da coluna 3 foi pressionada
- {
- Salva_Digito(porta-3, 3);
- while(digitalRead(Row3) == LOW){}
- }
- }
- // Serial.println(Digito);
- delay(10);
- }
- if(segundos > 0 )digitalWrite(rele, HIGH); //Se o tempo for maior que 0 segundos inicia o rele
- segundostotal = segundos + (minutos * 60) + (horas * 60 * 60); //Converte o tempo selecionado em segundos!!
- while (segundostotal > 0)
- {
- delay (1000);
- segundostotal--;
- horas = ((segundostotal / 60)/ 60); //torna os segundos totais em horas
- minutos = (segundostotal / 60) % 60; //torna os segundos totais em minutos
- segundos = segundostotal % 60; //torna os segundos totais em periodos de 60 segundos
- lcd.setCursor(0,0);
- lcd.print(" Tempo Restante");
- lcd.setCursor(4,1);
- if (horas < 10) lcd.print("0");
- lcd.print(horas);
- lcd.print(":");
- if (minutos < 10) lcd.print("0");
- lcd.print(minutos);
- lcd.print(":");
- if (segundos < 10) lcd.print("0");
- lcd.print(segundos);
- if (segundostotal == 0)
- {
- while(1)
- {
- lcd.clear();
- lcd.setCursor(5,0);
- lcd.print("Tempo");
- lcd.setCursor(3,1);
- lcd.print("Finalizado");
- digitalWrite(rele, LOW); //Ao finalizar o processo desliga o rele
- sonarTono(TONO_ERROR,TIME_INTERVAL);
- lcd.clear();
- return;
- //exit(0);
- }
- }
- }
- }
- //------------------------------------
- // Tom
- //------------------------------------
- void sonarTono(int tono, int duracion)
- {
- tone(buzzer,4500);
- delay(1000);
- //Desligando o buzzer.
- noTone(buzzer);
- delay(1000);
- }
- //------------------------------------------------------------------------
- void Salva_Digito(int x, int y)
- {
- Digito =((x*10) +y); // Identifica tecla digitada
- contagem++;
- switch (Digito) // Seleciona valor com tecla digitada
- {
- case 11: Digito = 1; break;
- case 12: Digito = 2; break;
- case 13: Digito = 3; break;
- case 21: Digito = 4; break;
- case 22: Digito = 5; break;
- case 23: Digito = 6; break;
- case 31: Digito = 7; break;
- case 32: Digito = 8; break;
- case 33: Digito = 9; break;
- case 41: Digito = 0x2A; break; // Hexa para * Cancela
- case 42: Digito = 0; break;
- case 43: Digito = 0x23; break; // Hexa para # Enter
- }
- if ((Digito != 0x2A) & (Digito != 0x23)) // Se for diferente de * ou #
- { // Faça
- if (contagem <3)
- {
- horas = (horas*10) + Digito; // Desloca a casa e adiciona digito novo
- if (horas > 24) horas = 0; // Se horas maior que 24 faça igual 0
- }
- if (contagem == 2 ) Serial.println(horas);
- if ((contagem >=3) & (contagem <5))
- {
- minutos = (minutos*10) + Digito; // Desloca a casa e adiciona digito novo
- if (minutos > 60) minutos = 0; // Se minutos maior que 24 faça igual 0
- }
- if (contagem == 4 ) Serial.println(minutos);
- if ((contagem >=5) & (contagem <7))
- {
- segundos = (segundos*10) + Digito; // Desloca a casa e adiciona digito novo
- if (segundos > 60) segundos = 0; // Se segundos maior que 24 faça igual 0
- }
- if (contagem == 6 ) Serial.println(segundos);
- }
- if (Digito == 0x23) // Se for igual a # equivalente a enter
- { // Faça
- Inicio = 1; // Sai da rotina do teclado
- }
- if (Digito == 0x2A) // Se for igual a * equivalente a cancela
- { // Faça
- contagem = 0;
- horas = 0; // Zera Resultado
- minutos = 0; // Zera Resultado
- segundos = 0; // Zera Resultado
- }
- }
- //------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement