// 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 <Adafruit_SH1106.h> // https://github.com/wonho-maker/Adafruit_SH1106
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET 20 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//********************************************
#include <Fonts/FreeSansBold12pt7b.h> // Numeros
#include <Fonts/FreeSerifBold9pt7b.h> // Texto
#include <Fonts/FreeSerifBold12pt7b.h> //Texto "Porta Aberta"
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 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;
/**
* Made with Marlin Bitmap Converter
* https://marlinfw.org/tools/u8glib/converter.html
*
* This bitmap from the file 'FornoM128x64.bmp'
*/
const unsigned char PROGMEM sininho [] = { //48x48
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00,
0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x18, 0x00,
0x0F, 0xF0, 0x00, 0x18, 0x38, 0x00, 0x3F, 0xFC, 0x00, 0x1C, 0x31, 0x00, 0x78, 0x3E,
0x00, 0x8C, 0x71, 0x80, 0xE0, 0x07, 0x01, 0x8E, 0x63, 0x81, 0xC0, 0x03, 0x81, 0xC6,
0x63, 0x03, 0x80, 0x01, 0x80, 0xC6, 0x63, 0x03, 0x80, 0x01, 0xC0, 0xC6, 0xE7, 0x03,
0x00, 0x00, 0xC0, 0xE7, 0xC6, 0x03, 0x00, 0x00, 0xE0, 0x63, 0xC6, 0x06, 0x00, 0x00,
0xC0, 0x63, 0xC6, 0x07, 0x00, 0x00, 0x60, 0x63, 0xC6, 0x06, 0x00, 0x00, 0xE0, 0x63,
0xC6, 0x07, 0x00, 0x00, 0x60, 0x63, 0xC6, 0x06, 0x00, 0x00, 0xE0, 0x63, 0xC6, 0x07,
0x00, 0x00, 0x60, 0x63, 0xC6, 0x06, 0x00, 0x00, 0xE0, 0x67, 0xE7, 0x07, 0x00, 0x00,
0x60, 0xE7, 0x63, 0x06, 0x00, 0x00, 0x60, 0xC6, 0x63, 0x87, 0x00, 0x00, 0xE1, 0xC6,
0x71, 0x86, 0x00, 0x00, 0x61, 0x8E, 0x31, 0x06, 0x00, 0x00, 0x60, 0x8C, 0x38, 0x0E,
0x00, 0x00, 0x70, 0x1C, 0x18, 0x0C, 0x00, 0x00, 0x30, 0x18, 0x00, 0x1C, 0x00, 0x00,
0x30, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1C, 0x00,
0x00, 0x3F, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00,
0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x70,
0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const unsigned char fornoM[] PROGMEM = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,
0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,
0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,
0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xE0,
0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xE0,
0x03,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x3C,0x3F,0xFF,0xF8,0xE0,
0x03,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x3C,0x3F,0xFF,0xF8,0xE0,
0x03,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x3C,0x3F,0xFF,0xF8,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0x3C,0x3C,0x00,0x78,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0x3C,0x3C,0x00,0x78,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0x3C,0x3C,0x00,0x78,0xE0,
0x03,0xC7,0x0F,0xFE,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x00,0x78,0xE0,
0x03,0xC7,0x0F,0xFE,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x00,0x78,0xE0,
0x03,0xC7,0x0F,0xFE,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x00,0x78,0xE0,
0x03,0xC7,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xF8,0x3C,0x3C,0x00,0x78,0xE0,
0x03,0xC7,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFC,0x3C,0x3C,0x00,0x78,0xE0,
0x03,0xC7,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x3E,0x3C,0x3C,0x00,0x78,0xE0,
0x03,0xC7,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x3C,0x00,0x78,0xE0,
0x03,0xC7,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x3C,0x00,0x78,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x3F,0xFF,0xF8,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x3F,0xFF,0xF8,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x3F,0xFF,0xF8,0xE0,
0x03,0xC7,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x00,0x00,0x00,0xE0,
0x03,0xC7,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x00,0x00,0x00,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x3C,0x78,0x78,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x3C,0x78,0x78,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x3C,0x78,0x78,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x00,0x00,0x00,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x00,0x00,0x00,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x00,0x00,0x00,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x3C,0x78,0x78,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x3C,0x78,0x78,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x3C,0x78,0x78,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x00,0x00,0x00,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x00,0x00,0x00,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x3C,0x78,0x78,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x3C,0x78,0x78,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x3C,0x78,0x78,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x00,0x00,0x00,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x1E,0x3C,0x00,0xFC,0x00,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFE,0x3C,0x03,0xFF,0x80,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFC,0x3C,0x0F,0xFF,0xC0,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF0,0x3C,0x1F,0x87,0xE0,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x3E,0x01,0xF0,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x00,0xF0,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x00,0xF0,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0x3C,0x3C,0x00,0xF0,0xE0,
0x03,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0x3C,0x3C,0x00,0xF0,0xE0,
0x03,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x3C,0x3E,0x03,0xF0,0xE0,
0x03,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x3C,0x1F,0x87,0xE0,0xE0,
0x03,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x3C,0x0F,0xFF,0xC0,0xE0,
0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x03,0xFF,0x00,0xE0,
0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x78,0x00,0xE0,
0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xE0,
0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,
0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,
0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/***************************************************************************** */
void setup()
{
// ****** INICIA O LCD ******
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // needed for SH1106 display
display.clearDisplay(); // Limpa o Display OLED
//display.setFont(&FreeSans9pt7b);
display.display(); // Carrega as informações no Display OLED
//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()
{
if(estadoInicial == 0){
piscaLcd();
}
//MONITORA A ABERTURA DA PORTA ACENDENDO A LUZ CASO SEJA ABERTA.
botaoPorta = digitalRead(pinBotao);
if(botaoPorta == 0){
digitalWrite(pinLuz, HIGH);
portaFechada = 1;
estadoInicial = 1;
display.setTextSize(1); //Tamanho para Texto [1] para os Numeros [0]
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();
}
if(botaoPorta == 1){
if(portaFechada == 1){
digitalWrite(pinLuz, LOW);
if(digitado[0] == 0 ){
estadoInicial = 0;
pisca = 0;
}
if(digitado[0] != 0 ){
//--------------------------------
conometroOled();
//---------------------------------
}
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);
display.clearDisplay(); //LIMPA O DISPLAY OLED
display.setTextColor(WHITE); // DEFINE A COR DO TEXTO no OLED
display.setTextSize(2); //Tamanho para Texto (1) para os Numeros (2)
display.setFont(&FreeSansBold12pt7b); //Fonte para Texto [1] para os Numeros [0]
display.setCursor(0,50); //Coluna, Linha
//-------- 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 ();
// =================================
}
} // 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;
display.setTextColor(WHITE); // DEFINE A COR DO TEXTO no OLED
display.setTextSize(2);
display.setFont(&FreeSansBold12pt7b);
display.setCursor(3,50); //Coluna, Linha (NUMEROS)
display.clearDisplay();
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(":"));
if(ss > 9){ // Segundos Acima de 10
display.print(ss);
}
if((ss < 10) && (ss >= 0)){ // Segundos 0 a 9
display.print(F("0"));
display.print(ss);
}
}
if((ms >= 0) && (ms < 10)){ // Minutos 0 ate 9
display.print(F("0"));
display.print(ms);
display.print(F(":"));
if(ss > 9){ // Segundos Acima de 10
display.print(ss);
}
if((ss < 10) && (ss >= 0)){ // Segundos 0 a 9
display.print(F("0"));
display.print(ss);
}
}
//----------------------------------
if(ms <= 0){
if(ss > 9) { // acima de 10
display.print(F("00:"));
display.print(ss);
}
if(ss < 10){ // menor que 10
display.print(F("00:0"));
display.print(ss);
}
}
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;
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);
// ******** Mensagem de Aquecimento Concluido + Bips de Alertas de fim de tempo
while (fimTempo == 0){
display.clearDisplay();
display.drawBitmap(40, 0,sininho,48,48, 1);
display.setTextSize(1);
display.setFont(&FreeSerifBold9pt7b);
display.setCursor(5,60); //Coluna, Linha (NUMEROS)
display.print(F("CONCLUIDO!"));
display.display();
if(alertaBuzzer.repeat()){
tocar = 1;
}
if(tocar > 0){
digitalWrite(buzzer, HIGH);
//display.clearDisplay();
display.drawBitmap(40, 0,sininho,48,48, 0);
display.setTextSize(1);
display.setFont(&FreeSerifBold9pt7b);
display.setCursor(5,60); //Coluna, Linha (NUMEROS)
display.print(F("CONCLUIDO!"));
display.display();
delay(100);
digitalWrite(buzzer, LOW);
display.clearDisplay();
display.drawBitmap(40, 0,sininho,48,48, 1);
display.setTextSize(1);
display.setFont(&FreeSerifBold9pt7b);
display.setCursor(5,60); //Coluna, Linha (NUMEROS)
display.print(F("CONCLUIDO!"));
display.display();
display.display();
delay(100);
tocar++;
}
if(tocar == 4){
tocar = 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(){
// .... PISCA A TELA AGUARDANDO O TEMPO SER DIGITADO E INICIADO PELO BOTÃO START
if (piscaTela.repeat()){
pisca = !pisca;
}
if (pisca == 0){
display.clearDisplay();
display.setTextSize(1);
display.setFont(&FreeSerifBold9pt7b);
display.setTextColor(WHITE);
display.setCursor(25,20); //Coluna, Linha
display.print(F("DIGITE"));
display.setCursor(17,40); //Coluna, Linha
display.print(F("O TEMPO"));
display.setCursor(17,60); //Coluna, Linha
display.print(F("Press Start"));
display.display();
}
if (pisca == 1){
display.clearDisplay(); //limpa o display OLED
display.drawBitmap(0, 0, fornoM, 128, 64, WHITE);
display.display();
}
}
void conometroOled (){
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2);
display.setFont(&FreeSansBold12pt7b);
display.setCursor(3,50);
if((digitado[3] == 0) && (digitado[2] == 0) && (digitado[1] == 0) && (digitado[0] != 0)){
display.print(F("00:0"));
display.print(digitado[0]);
}
if((digitado[3] == 0) && (digitado[2] == 0) && (digitado[1] != 0)){
display.print(F("00:"));
display.print(digitado[0]);
display.print(digitado[1]);
}
if((digitado[3] == 0) && (digitado[2] != 0)){
display.print(F("0"));
display.print(digitado[0]);
display.print(F(":"));
display.print(digitado[1]);
display.print(digitado[2]);
}
if((digitado[3] != 0)){
display.print(digitado[0]);
display.print(digitado[1]);
display.print(F(":"));
display.print(digitado[2]);
display.print(digitado[3]);
}
display.display();
}