// Inclusão da biblioteca do módulo teclado
#include <neotimer.h>
#include <Keypad.h>
#include <Wire.h> // requried to run I2C SH1106
#include <SPI.h> // requried to run I2C SH1106
#include <Adafruit_GFX.h> // https://github.com/adafruit/Adafruit-GFX-Library
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
Neotimer playStart;
Neotimer piscaTela;
Neotimer alertaBuzzer;
Neotimer alertaBuzerNo;
Neotimer tempoSemUso; //DELETAR *************************
//USADO para controlar o tempo e contagem
unsigned long tempoAnterior = 0;
const long intervalo = 1000; //Intervalor para contagem do conometro (1segundo)
/************************ DEFINIÇÃO Do ARREY para armazenar TEMPO ******************************* */
char digitado [4] = {0,0,0,0};
char digitadoBiz [4];
int x = 0;
char segundos [2] = {0,0};
char minutos [2] = {0,0};
int ms;
int ss;
int conometro = 0;
int pausa = 0;
int tocar = 0;
int inverter = 0;
int sinoX = 0;
int pisca = 0;
int fimTempo = 0;
bool estadoInicial = 0;
/************************ CONFIGURAÇÕES TECLADO ******************************* */
const byte LINHAS = 4; // quantidade de linhas do teclado
const byte COLUNAS = 4; // quantidade de colunas do teclado
char digitos[LINHAS][COLUNAS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}}; // todos os caracteres do teclado
byte pinosLinha[LINHAS] = { 10, 9, 8, 7 }; // pinos de conexão das linhas no arduino
byte pinosColuna[COLUNAS] = { 6, 5, 4, 3 }; // pinos de conexão das colunas no arduino
Keypad keypad = Keypad( makeKeymap(digitos), pinosLinha, pinosColuna, LINHAS, COLUNAS ); // objeto de leitura das teclas com os parâmetros lidos
/************************ VARIÁVEIS AUXILIARES ******************************* */
//USADO para controlar o tempo e contagem
char digito;
bool botaoPorta;
int portaFechada = 0;
const int ledVermelho = A1; //LED POWER
const int pinLuz = A2; //Luz da Porta
const int pinMotor = A3; // Rele do Motod do Prato
const int buzzer = A0; // Som das teclas e do alarme
int pinMagnetron = 12;
int pinBotao = 2;
int estadoLuz = LOW;
int estadoMotor = LOW;
int estadoMagnetron = LOW;
int tempoBuzz = 50;
int autoReset = 0;
int tpReset = 60;
int alertaPausa = 0;
int limpaLCD = 1;
char position [2];
int posicao=0;
int colunaX;
/***************************************************************************** */
// CONFIGURAÇÃO DE CARACTERES PARA NUMEROS GRANDES ********
byte d1[8] =
{
B00000,
B00000,
B00000,
B00000,
B00000,
B11111,
B11111,
B11111
};
byte d2[8] =
{
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
};
byte d3[8] =
{
B11111,
B11111,
B11111,
B00000,
B00000,
B00000,
B00000,
B00000,
};
byte ponto[8] =
{
B00000,
B00000,
B00100,
B01110,
B11111,
B01110,
B00100,
B00000
};
void num_0(){
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.write(byte(1));
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.write(byte(2));
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 2); //Coluna, Linha
lcd.write(byte(2));
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 3); //Coluna, Linha
lcd.write(byte(3));
lcd.write(byte(3));
lcd.write(byte(3));
}
void num_1(){
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 2); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 3); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(3));
}
void num_2(){
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.write(byte(1));
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.write(byte(1));
lcd.write(byte(1));
lcd.write(byte(2));
lcd.setCursor(colunaX, 2); //Coluna, Linha
lcd.write(byte(2));
lcd.print(" ");
lcd.setCursor(colunaX, 3); //Coluna, Linha
lcd.write(byte(3));
lcd.write(byte(3));
lcd.write(byte(3));
}
void num_3(){
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.write(byte(1));
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.write(byte(1));
lcd.write(byte(1));
lcd.write(byte(2));
lcd.setCursor(colunaX, 2); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 3); //Coluna, Linha
lcd.write(byte(3));
lcd.write(byte(3));
lcd.write(byte(3));
}
void num_4(){
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.write(byte(1));
lcd.print(" ");
lcd.write(byte(1));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.write(byte(2));
lcd.write(byte(1));
lcd.write(byte(2));
lcd.setCursor(colunaX, 2); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 3); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(3));
}
void num_5(){
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.write(byte(1));
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.write(byte(2));
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 2); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 3); //Coluna, Linha
lcd.write(byte(3));
lcd.write(byte(3));
lcd.write(byte(3));
}
void num_6(){
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.write(byte(1));
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.write(byte(2));
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 2); //Coluna, Linha
lcd.write(byte(2));
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 3); //Coluna, Linha
lcd.write(byte(3));
lcd.write(byte(3));
lcd.write(byte(3));
}
void num_7(){
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.write(byte(1));
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.write(byte(3));
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 2); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 3); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(3));
}
void num_8(){
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.write(byte(1));
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.write(byte(2));
lcd.write(byte(1));
lcd.write(byte(2));
lcd.setCursor(colunaX, 2); //Coluna, Linha
lcd.write(byte(2));
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 3); //Coluna, Linha
lcd.write(byte(3));
lcd.write(byte(3));
lcd.write(byte(3));
}
void num_9(){
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.write(byte(1));
lcd.write(byte(1));
lcd.write(byte(1));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.write(byte(2));
lcd.write(byte(1));
lcd.write(byte(2));
lcd.setCursor(colunaX, 2); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(colunaX, 3); //Coluna, Linha
lcd.print(" ");
lcd.write(byte(3));
}
void pontilhado(){
//Pontos de separação entre Minutos e Segundos
lcd.setCursor(8, 1); //Coluna, Linha
lcd.write(byte(4));
lcd.setCursor(8, 2); //Coluna, Linha
lcd.write(byte(4));
}
void fim(){
//**F
lcd.setCursor(6, 0);
lcd.write(byte(1));
lcd.write(byte(1));
lcd.write(byte(1));
lcd.print(" ");
lcd.write(byte(3));
lcd.print(" ");
lcd.write(byte(1));
lcd.print(" ");
lcd.write(byte(1));
lcd.setCursor(6, 1);
lcd.write(byte(2));
lcd.write(byte(1));
lcd.print(" ");
lcd.write(byte(2));
lcd.print(" ");
lcd.write(byte(2));
lcd.write(byte(2));
lcd.write(byte(2));
lcd.setCursor(6, 2);
lcd.write(byte(2));
lcd.print(" ");
lcd.write(byte(2));
lcd.print(" ");
lcd.write(byte(2));
lcd.print(" ");
lcd.write(byte(2));
lcd.setCursor(6, 3);
lcd.write(byte(3));
lcd.print(" ");
lcd.write(byte(3));
lcd.print(" ");
lcd.write(byte(3));
lcd.print(" ");
lcd.write(byte(3));
}
// ****************************************************************
// ************ MONTAGEM DO SINHINHO TOCANDO LCD20*8 **************
byte s1[8] =
{
0b00000,
0b00000,
0b10000,
0b01000,
0b00100,
0b00010,
0b10001,
0b01000,
};
byte s2[8] =
{
0b00000,
0b00001,
0b00011,
0b00100,
0b01000,
0b01000,
0b01100,
0b01000,
};
byte s3[8] =
{
0b00000,
0b10000,
0b11000,
0b00100,
0b00010,
0b00010,
0b00110,
0b00010,
};
byte s4[8] =
{
0b00000,
0b00000,
0b00001,
0b00010,
0b00100,
0b01000,
0b10001,
0b00010,
};
byte s5[8] =
{
0b00110,
0b00001,
0b00110,
0b01000,
0b10001,
0b00010,
0b00100,
0b11000,
};
byte s6[8] =
{
0b01100,
0b01000,
0b10000,
0b10000,
0b11111,
0b00010,
0b00001,
0b00000,
};
byte s7[8] =
{
0b00110,
0b00010,
0b00001,
0b00001,
0b11111,
0b01000,
0b10000,
0b00000,
};
byte s8[8] =
{
0b101100,
0b10000,
0b01100,
0b00010,
0b10001,
0b01000,
0b00100,
0b00011,
};
void setup()
{
lcd.init(); // initialize the lcd
// Print a message to the LCD.
lcd.backlight();
//INPUT_PULLUP
pinMode(ledVermelho,OUTPUT);
pinMode(pinLuz,OUTPUT);
pinMode(pinMotor,OUTPUT);
pinMode(pinMagnetron,OUTPUT);
pinMode(buzzer,OUTPUT); // define os pinos de saída do arduino
pinMode(pinBotao, INPUT_PULLUP);
digitalWrite(ledVermelho, HIGH);
digitalWrite(pinMotor, LOW);
digitalWrite(pinLuz, LOW);
digitalWrite(pinMagnetron, LOW);
piscaTela.set(2000);
alertaBuzzer.set(15000);
alertaBuzerNo.set(400);
tempoSemUso.set(1000);
// Serial.begin(9600);
digitalWrite(buzzer, HIGH);
delay(50);
digitalWrite(buzzer, LOW);
delay(50);
digitalWrite(buzzer, HIGH);
delay(50);
digitalWrite(buzzer, LOW);
}
void loop()
{
lcd.createChar(1, d1);
lcd.createChar(2, d2);
lcd.createChar(3, d3);
lcd.createChar(4, ponto);
if(estadoInicial == 0){
piscaLcd_Barra();
}
//MONITORA A ABERTURA DA PORTA ACENDENDO A LUZ CASO SEJA ABERTA.
botaoPorta = digitalRead(pinBotao);
if(botaoPorta == 0){
digitalWrite(pinLuz, HIGH);
portaFechada = 1;
estadoInicial = 1;
//*****************************
if(limpaLCD <= 1){
lcd.clear();
lcd.display();
limpaLCD = 2;
}
lcd.setCursor(2,1); //Coluna, Linha
lcd.print(F("PREOCESSO PAUSADO"));
lcd.setCursor(2,2); //Coluna, Linha
lcd.print(F("PORTA ESTA ABERTA"));
//*****************************
}
if(botaoPorta == 1){
if(limpaLCD == 2){
limpaLCD = 0;
lcd.clear();
lcd.display();
}
if(portaFechada == 1){
digitalWrite(pinLuz, LOW);
if(digitado[0] == 0 ){
estadoInicial = 0;
pisca = 0;
}
if(digitado[0] != 0 ){
//--------------------------------
//conometroOled();
conometroOled_BARRA();
//---------------------------------
}
portaFechada = 0;
}
//Reset Automatico, Limpa o que foi digitado apos um tempo caso o forno não seja iniciado a contagem.
if(digitado[0] != 0 ){
if(tempoSemUso.repeat()){
autoReset++;
}
if(autoReset == tpReset){
fimTempo = 1;
estadoInicial = 0;
autoReset = 0;
for (int i=0; i<4; i++) {
digitado[i] = 0;
x = 0;
}
}
}//************************************
}
//---- FAZ A LEITURA DO TECLADO
digito = keypad.getKey();
if (digito != 0){
portaFechada = 0;
digitalWrite(buzzer, HIGH);// acionamento do buzzer ao apertar qualquer tecla
delay(tempoBuzz);
digitalWrite(buzzer, LOW);
limpaLCD = 0;
//-------- ARMAZENA OS DIGITOS PRESIONADO PELO TECLADO NO ARREY
if(digito != '*' && digito != '#' && digito != 'A' && digito != 'D'){
digitado[x] = digito;
x++;
estadoInicial = 1;
}
if (x == 4){ //RETORNA AO INICIO DO ARREY CASO SEJA DIGITADO MAIS DE 4 DIGITOS
x = 0;
}
//------ Caso seja digitado * Limpa o arrey "digitado"
if((digito == '*') && (digitado[0] != 0)){
for (int i=0; i<4; i++) {
digitado[i] = 0;
x = 0; //RETORNA AO INICIO DO ARREY "digitado" (usado pela função pra armazena os digitos do teclado)
estadoInicial = 0;
}
}
//------ SE FOI DIGITADO ALGUM TEMPO, INICIA O ESTADO DE LIGAÇAO DO FORNO E COMEÇA A CONTAGEM
if((digito == '#')&&(digitado[0] != 0)){
digitadoBiz[0] = digitado[0];
digitadoBiz[1] = digitado[1];
digitadoBiz[2] = digitado[2];
digitadoBiz[3] = digitado[3];
autoReset = 0;
contador();
contagemRegreciva ();
}
if((digito == 'D')&&(digitadoBiz[0] != 0)){
digitado[0] = digitadoBiz[0];
digitado[1] = digitadoBiz[1];
digitado[2] = digitadoBiz[2];
digitado[3] = digitadoBiz[3];
estadoInicial = 1;
}
//------ SE FOI DIGITADO Pipoca, Entra o tempo programado pra Pipoca
if(digito == 'A'){
digitado[0] = '3';
digitado[1] = '0';
digitado[2] = '6';
estadoInicial = 1;
}
// =================================
conometroOled_BARRA();
// =================================
}
} // FIM DO LOOP
// Organiza os dados digitados na ordem correta pra a conometragem do tempo
// e converte os valores dos caracteres do arrey para um valor inteiro nas variaveis "ms" e "ss"
// de forma que possamos usar o valor em uma contagem regreciva...
void contador(){
if(digitado[2] == 0){
segundos[0]= digitado[0];
segundos[1] = digitado[1];
ss = atoi(segundos);
conometro = ss;
}
if((digitado[3] == 0) && (digitado[2] != 0)){
minutos[0] = digitado[0];
ms = atoi(minutos);
segundos[0]= digitado[1];
segundos[1]= digitado[2];
ss = atoi(segundos);
conometro = (ms*60) + ss;
}
if(digitado[3] != 0){
minutos[0] = digitado[0];
minutos[1] = digitado[1];
ms = atoi(minutos);
segundos[0]= digitado[2];
segundos[1]= digitado[3];
ss = atoi(segundos);
conometro = (ms*60) + ss;
}
}
void contagemRegreciva (){
//***** INICIA O LIGAMENTO DO FORNO MICROONDAS
fimTempo = 0;
estadoLuz = HIGH;
estadoMotor = HIGH;
estadoMagnetron = HIGH;
digitalWrite(pinMotor, estadoMotor);
digitalWrite(pinLuz, estadoLuz);
digitalWrite(pinMagnetron, estadoMagnetron);
//*** ORGANIZA A POSICAO DOS VALORES MINUTOS E SEGUNDOS DE FORMA CORRETA NO OLED
while(conometro > -1){
unsigned long tempoAtual=millis();
if (tempoAtual-tempoAnterior>=intervalo){ //com o playStart.repeat não fez a contagem com perfeição (gera atrazos de 2seg por cada 1min)
tempoAnterior=tempoAtual;
autoReset++;
alertaPausa = !alertaPausa;
if(pausa == 0){
alertaPausa = 0;
}
if(alertaPausa == 0){
/* display.drawRoundRect(0, 10, 125, 50, 8, WHITE);// Retangulo (Coluna 0 á 125 / linha 10 á 50) com curva de angulo 8 nas bordas
display.drawRoundRect(1, 11, 123, 48, 8, WHITE);// Retangulo (Coluna 0 á 125 / linha 10 á 50) com curva de angulo 8 nas bordas
display.drawRoundRect(2, 12, 121, 46, 8, WHITE);// Retangulo (Coluna 0 á 125 / linha 10 á 50) com curva de angulo 8 nas bordas
// display.fillRect(60, 10, 3, 15, WHITE); // Coluna(inicio), Linha(inicio), Comprimento, Largura, Cor
//display.fillRect(60, 53, 3, 7, WHITE); // Coluna(inicio), Linha(inicio), Comprimento, Largura, Cor
*/
}
if(alertaPausa == 1 ){
/*display.drawRoundRect(0, 10, 125, 50, 8, BLACK);// Retangulo (Coluna 0 á 125 / linha 10 á 50) com curva de angulo 8 nas bordas
display.drawRoundRect(1, 11, 123, 48, 8, BLACK);// Retangulo (Coluna 0 á 125 / linha 10 á 50) com curva de angulo 8 nas bordas
display.drawRoundRect(2, 12, 121, 46, 8, BLACK);// Retangulo (Coluna 0 á 125 / linha 10 á 50) com curva de angulo 8 nas bordas
delay(100);
*/
}
if(ms > 9){ // de 10 pra cima
// display.print(ms);
// display.print(F(":"));
//LCD 16*4 NUMEROS GRANDES ___________________
pontilhado();
colunaX = 0; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = ms / 10; //Informa a posição da Case de arcordo com a contagem da unidade
numeral();
colunaX = 4; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = ms % 10; //Informa a posição da Case de arcordo com a contagem da dezena
numeral();
if(ss > 9){ // Segundos Acima de 10
// display.print(ss);
colunaX = 10; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = ss / 10; //Informa a posição da Case de arcordo com a contagem da dezena
numeral();
colunaX = 14; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = ss % 10; //Informa o valor Numerico Grande a Ser Exibido
numeral();
}
if((ss < 10) && (ss >= 0)){ // Segundos 0 a 9
// display.print(F("0"));
colunaX = 10; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = 0; //Informa a posição da Case de arcordo com a contagem da dezena
numeral();
colunaX = 4; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = ss; //Informa o valor Numerico Grande a Ser Exibido
numeral();
// display.print(ss);
}
}
if((ms >= 0) && (ms < 10)){ // Minutos 0 ate 9
// display.print(F("0"));
// display.print(ms);
// display.print(F(":"));
colunaX = 0; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = 0; //Informa a posição da Case de arcordo com a contagem da unidade
numeral();
colunaX = 4; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = ms; //Informa a posição da Case de arcordo com a contagem da dezena
numeral();
if(ss > 9){ // Segundos Acima de 10
// display.print(ss);
colunaX = 10; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = ss / 10; //Informa a posição da Case de arcordo com a contagem da unidade
numeral();
colunaX = 14; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = ss % 10; //Informa a posição da Case de arcordo com a contagem da dezena
numeral();
}
if((ss < 10) && (ss >= 0)){ // Segundos 0 a 9
// display.print(F("0"));
// display.print(ss);
colunaX = 10; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = 0; //Informa a posição da Case de arcordo com a contagem da unidade
numeral();
colunaX = 14; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = ss; //Informa a posição da Case de arcordo com a contagem da dezena
numeral();
}
}
//----------------------------------
if(ms <= 0){
if(ss > 9) { // acima de 10
// display.print(F("00:"));
// display.print(ss);
colunaX = 0; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = 0; //Informa a posição da Case de arcordo com a contagem da unidade
numeral();
colunaX = 4; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = 0; //Informa a posição da Case de arcordo com a contagem da dezena
numeral();
colunaX = 10; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = ss / 10; //Informa a posição da Case de arcordo com a contagem da unidade
numeral();
colunaX = 14; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = ss % 10; //Informa a posição da Case de arcordo com a contagem da dezena
numeral();
}
if(ss < 10){ // menor que 10
// display.print(F("00:0"));
// display.print(ss);
colunaX = 0; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = 0; //Informa a posição da Case de arcordo com a contagem da unidade
numeral();
colunaX = 4; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = 0; //Informa a posição da Case de arcordo com a contagem da dezena
numeral();
colunaX = 10; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = 0; //Informa a posição da Case de arcordo com a contagem da unidade
numeral();
colunaX = 14; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = ss; //Informa a posição da Case de arcordo com a contagem da dezena
numeral();
}
}
// display.display();
// -- CONTROLA A CONTAGEM REGRECIVA do TIMER
if(pausa == 0){
conometro--;
if(ss == 0){
ms--;
if(conometro > 60){
ss = 60;
}
}
if((ms == 0) && (conometro >= 59) && (ss < 61)){
ss = 60;
}
ss--;
}
}//**** Fim da contagem com Millis responsavel pelo tempo do Conometro
digito = keypad.getKey();
if(digito != 0){
digitalWrite(buzzer, HIGH);
delay(tempoBuzz);
digitalWrite(buzzer, LOW);
if(digito == '#'){ // AVALIA O ESTADO START OU PAUSA
inverter = !inverter; // Verificar se a contagem esta em pausa ou start e inverte a opção
if(inverter == 1){
pausa = 1;
digitalWrite(pinMotor, LOW);
digitalWrite(pinLuz, LOW);
digitalWrite(pinMagnetron, LOW);
}
if(inverter == 0){
pausa = 0;
digitalWrite(pinMotor, HIGH);
digitalWrite(pinLuz, HIGH);
digitalWrite(pinMagnetron, HIGH);
}
}
if(digito == '*'){ // Reseta o Forno pra estado inicial encerando o aquecimento
pausa = 0;
fimTempo = 1;
estadoInicial = 0;
break;
}
}
//-- Se ficar por um longo tempo em pausa Zera a programação e volta ao estado inicial
if(pausa == 1){
if(autoReset == tpReset){
pausa = 0;
fimTempo = 1;
estadoInicial = 0;
break;
}
}else{autoReset = 0;}
//****** MONITORA A ABERTURA DA PORTA E DURANTE O PRECESSO DE AQUECIMENTO ******
botaoPorta = digitalRead(pinBotao);
if (botaoPorta == 0){
digitalWrite(pinMotor, LOW);
digitalWrite(pinLuz, HIGH);
digitalWrite(pinMagnetron, LOW);
pausa = 1;
inverter = 1;
limpaLCD = 0;
while (botaoPorta == 0){
botaoPorta = digitalRead(pinBotao);
/* display.setTextSize(1); //Tamanho [1]Texto [0]Numeros
display.setFont(&FreeSerifBold12pt7b);
display.setTextColor(WHITE);
display.clearDisplay();
display.setCursor(15,30); //Coluna, Linha
display.print(F("PORTA"));
display.setCursor(10,50); //Coluna, Linha
display.print(F("ABERTA"));
display.display();
*/
}
digitalWrite(pinLuz, LOW);
}
} // ******* FIM do while "conometro > -1"
// ------ ZERA A CONTAGEM dos ARREYS DESLIGA O RELE E LIMPA O LCD
for (int i=0; i<4; i++) {
digitado[i] = 0;
segundos[i] = 0;
minutos[i] = 0;
inverter = 0;
ss = 0;
ms = 0;
x = 0;
tocar = 1;
}
digitalWrite(pinMagnetron, LOW);
digitalWrite(pinLuz, LOW);
digitalWrite(pinMotor, LOW);
lcd.clear();
//fim();
// ******** Mensagem de Aquecimento Concluido + Bips de Alertas de fim de tempo
while (fimTempo == 0){
if(alertaBuzzer.repeat()){
tocar = 1;
}
if(tocar > 0){
digitalWrite(buzzer, HIGH);
lcd.createChar(1, s1);
lcd.createChar(2, s2);
lcd.createChar(3, s3);
lcd.createChar(4, s4);
lcd.createChar(5, s5);
lcd.createChar(6, s6);
lcd.createChar(7, s7);
lcd.createChar(8, s8);
colunaX=4;
//Sino
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.write(byte(2));
lcd.write(byte(3));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.write(byte(6));
lcd.write(byte(7));
colunaX=13;
//Sino
lcd.setCursor(colunaX, 0); //Coluna, Linha
lcd.write(byte(2));
lcd.write(byte(3));
lcd.setCursor(colunaX, 1); //Coluna, Linha
lcd.write(byte(6));
lcd.write(byte(7));
colunaX = 3;
lcd.setCursor(colunaX - sinoX, 0); //Coluna, Linha
lcd.write(byte(1));
lcd.setCursor(colunaX - sinoX, 1); //Coluna, Linha
lcd.write(byte(5));
colunaX = 6;
lcd.setCursor(colunaX + sinoX, 0); //Coluna, Linha
lcd.write(byte(4));
lcd.setCursor(colunaX + sinoX, 1); //Coluna, Linha
lcd.write(byte(8));
colunaX = 12;
lcd.setCursor(colunaX - sinoX, 0); //Coluna, Linha
lcd.write(byte(1));
lcd.setCursor(colunaX - sinoX, 1); //Coluna, Linha
lcd.write(byte(5));
colunaX = 15;
lcd.setCursor(colunaX + sinoX, 0); //Coluna, Linha
lcd.write(byte(4));
lcd.setCursor(colunaX + sinoX, 1); //Coluna, Linha
lcd.write(byte(8));
delay(100);
digitalWrite(buzzer, LOW);
delay(100);
//*********************************
colunaX = 3;
lcd.setCursor(colunaX - sinoX, 0); //Coluna, Linha
lcd.print(" ");
lcd.setCursor(colunaX - sinoX, 1); //Coluna, Linha
lcd.print(" ");
colunaX = 6;
lcd.setCursor(colunaX + sinoX, 0); //Coluna, Linha
lcd.print(" ");
lcd.setCursor(colunaX + sinoX, 1); //Coluna, Linha
lcd.print(" ");
colunaX = 12;
lcd.setCursor(colunaX - sinoX, 0); //Coluna, Linha
lcd.print(" ");
lcd.setCursor(colunaX - sinoX, 1); //Coluna, Linha
lcd.print(" ");
colunaX = 15;
lcd.setCursor(colunaX + sinoX, 0); //Coluna, Linha
lcd.print(" ");
lcd.setCursor(colunaX + sinoX, 1); //Coluna, Linha
lcd.print(" ");
lcd.setCursor(1, 3);
lcd.print(F("--> CONCLUIDO! <--"));
sinoX++;
tocar++;
}
if(tocar == 4){
tocar = 0;
sinoX = 0;
}
//MONITORA A ABERTURA DA PORTA E EXECUTA UMA AÇÃO CASO SEJA ABERTA
botaoPorta = digitalRead(pinBotao);
digito = keypad.getKey();
if(botaoPorta == 0){ // ENCERRA O BUZZER E VOLTA AO ESTADO INICIAL caso a porta seja aberta
estadoInicial = 0;
fimTempo = 1;
inverter = 1;
}
if(digito == '*'){ // ENCERRA o BUZZER E VOLTA AO ESTADO INICIAL
digitalWrite(buzzer, HIGH);
delay(tempoBuzz);
digitalWrite(buzzer, LOW);
estadoInicial = 0;
fimTempo = 1;
}
} // ******** FINAL do "WHILE" Mensagem de Aquecimento Concluido + Bips de Alertas de fim de tempo
}
void piscaLcd_Barra(){
// .... PISCA A TELA AGUARDANDO O TEMPO SER DIGITADO E INICIADO PELO BOTÃO START
if (piscaTela.repeat()){
pisca = !pisca;
}
if (pisca == 0){
if(limpaLCD == 0){
lcd.clear();
lcd.display();
limpaLCD = 1;
}
lcd.setCursor(3,1);
lcd.print("DIGITE O TEMPO");
lcd.setCursor(3,2);
lcd.print("PRECIONE START");
}
if (pisca == 1){
if(limpaLCD == 1){
lcd.clear();
lcd.display();
limpaLCD = 0;
}
lcd.setCursor(2,1);
lcd.print("FORNO MICROONDAS");
lcd.setCursor(6,2);
lcd.print("DESLIGADO");
}
}
void conometroOled_BARRA2 (){
if(limpaLCD == 0){
lcd.clear();
lcd.display();
limpaLCD = 1;
}
if((digitado[3] == 0) && (digitado[2] == 0) && (digitado[1] == 0) && (digitado[0] != 0)){
lcd.setCursor(2,1);
lcd.print("00:0");
lcd.print(digitado[0]);
}
if((digitado[3] == 0) && (digitado[2] == 0) && (digitado[1] != 0)){
lcd.setCursor(2,1);
lcd.print("00:");
lcd.print(digitado[0]);
lcd.print(digitado[1]);
}
if((digitado[3] == 0) && (digitado[2] != 0)){
lcd.setCursor(2,1);
lcd.print("0");
lcd.print(digitado[0]);
lcd.print(":");
lcd.print(digitado[1]);
lcd.print(digitado[2]);
}
if((digitado[3] != 0)){
lcd.setCursor(2,1);
lcd.print(digitado[0]);
lcd.print(digitado[1]);
lcd.print(":");
lcd.print(digitado[2]);
lcd.print(digitado[3]);
}
lcd.display();
}
void conometroOled_BARRA (){
if(limpaLCD == 0){
lcd.clear();
lcd.display();
limpaLCD = 1;
}
if((digitado[3] == 0) && (digitado[2] == 0) && (digitado[1] == 0) && (digitado[0] != 0)){
//LCD 16*4 NUMEROS GRANDES ___________________
colunaX = 0; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = 0; //Informa a posição da Case de arcordo com a contagem da unidade
numeral();
colunaX = 4; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = 0; //Informa a posição da Case de arcordo com a contagem da dezena
numeral();
pontilhado();
colunaX = 10; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = 0; //Informa a posição da Case de arcordo com a contagem da dezena
numeral();
colunaX = 14; //Informa a Posição da Coluna onde sera exibido o Numeral
position [0] = digitado[0];
posicao = atoi(position); //Informa o valor Numerico Grande a Ser Exibido
numeral();
}
if((digitado[3] == 0) && (digitado[2] == 0) && (digitado[1] != 0)){
//LCD 16*4 NUMEROS GRANDES ___________________
colunaX = 0; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = 0; //Informa a posição da Case de arcordo com a contagem da unidade
numeral();
colunaX = 4; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = 0; //Informa a posição da Case de arcordo com a contagem da dezena
numeral();
pontilhado();
colunaX = 10; //Informa a Posição da Coluna onde sera exibido o Numeral
position [0] = digitado[0];
posicao = atoi(position); //Informa o valor Numerico Grande a Ser Exibido
numeral();
colunaX = 14; //Informa a Posição da Coluna onde sera exibido o Numeral
position [0] = digitado[1];
posicao = atoi(position); //Informa o valor Numerico Grande a Ser Exibido
numeral();
}
if((digitado[3] == 0) && (digitado[2] != 0)){
//LCD 16*4 NUMEROS GRANDES ___________________
colunaX = 0; //Informa a Posição da Coluna onde sera exibido o Numeral
posicao = 0; //Informa a posição da Case de arcordo com a contagem da unidade
numeral();
colunaX = 4; //Informa a Posição da Coluna onde sera exibido o Numeral
position [0] = digitado[0];
posicao = atoi(position); //Informa o valor Numerico Grande a Ser Exibido
numeral();
pontilhado();
colunaX = 10; //Informa a Posição da Coluna onde sera exibido o Numeral
position [0] = digitado[1];
posicao = atoi(position); //Informa o valor Numerico Grande a Ser Exibido
numeral();
colunaX = 14; //Informa a Posição da Coluna onde sera exibido o Numeral
position [0] = digitado[2];
posicao = atoi(position); //Informa o valor Numerico Grande a Ser Exibido
numeral();
}
if((digitado[3] != 0)){
//LCD 16*4 NUMEROS GRANDES ___________________
colunaX = 0; //Informa a Posição da Coluna onde sera exibido o Numeral
position [0] = digitado[0];
posicao = atoi(position); //Informa o valor Numerico Grande a Ser Exibido
numeral();;
colunaX = 4; //Informa a Posição da Coluna onde sera exibido o Numeral
position [0] = digitado[1];
posicao = atoi(position); //Informa o valor Numerico Grande a Ser Exibido
numeral();
pontilhado();
colunaX = 10; //Informa a Posição da Coluna onde sera exibido o Numeral
position [0] = digitado[2];
posicao = atoi(position); //Informa o valor Numerico Grande a Ser Exibido
numeral();
colunaX = 14; //Informa a Posição da Coluna onde sera exibido o Numeral
position [0] = digitado[3];
posicao = atoi(position); //Informa o valor Numerico Grande a Ser Exibido
numeral();
}
lcd.display();
}
void numeral() {
switch(posicao)
{
case 0: num_0(); break;
case 1: num_1(); break;
case 2: num_2(); break;
case 3: num_3(); break;
case 4: num_4(); break;
case 5: num_5(); break;
case 6: num_6(); break;
case 7: num_7(); break;
case 8: num_8(); break;
case 9: num_9(); break;
} //end switch
}