Bom dia, gostaria de saber se alguem pode me ajudar a diminuir esse codigo para caber em um arduino pro Atmega 168P. se precisar explico o funcionamento do codigo.
//Programa: Arduino e DHT11 controle de rele por temperatura
//Autor: Arduino e Cia
#include "U8glib.h"
#include <DHT.h>
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
int posicao = 0;
int temp_min = 25; // TEMPERATURA MINIMA PARA DESLIGAR
int temp_max = 28; // TEMPERATURA MAXIMA PARA LIGAR
int ahoras = 0; //VARIAVEL PARA MOSTRAR HORAS NO LCD
int aminutos = 0; //VARIAVEL PARA MOSTRAR MINUTOS NO LCD
int asegundos = 0; //VARIAVEL PARA MOSTRAR SEGUNDOS NO LCD
int segundostotal = 0; //Tempo total
int msg = 0; //BARREIRA PARA MENSAGEM DE BEM VINDO
int empieza = 1024; // VARIAVEL PARA BOTAO DE START FUNCIONAR
int varbuth = 0; //VARIAVEL PARA MUDAR VALOR DE HORAS
int varbutm = 0; //VARIAVEL PARA MUDAR VALOR DE MINUTOS
int varbuts = 0; //VARIAVEL PARA MUDAR VALOR DE SEGUNDOS
// CONFIGURACOES DE PINOS PARA O CIRCUITO
int buzzer = 13; // PINO DIGITAL PARA RELE TIMER
int start = A2; //PINO ANALOGICO PARA BOTAO DE START
int buth = A5; //PINO ANALOGICO BOTAO HORAS
int butm = A4; //PINO ANALOGICO BOTAO MINUTOS
int buts = A3; //PINO ANALOGICO BOTAO SEGUNDOS
#define pino_DHT A0 // PINO ANALOGICO SENSOR DE TEMPERATURA DHT11
#define pino_aumenta 5 // PINO DIGITAL PARA BOTAO AUMENTA TEMPERATURA MAXIMA
#define pino_diminui 4 // PINO DIGITAL PARA BOTAO DIMINUI TEMPERATURA MAXIMA
#define pino_rele 7 // PINO DIGITAL RELE TEMPERATURA
#define DHTTYPE DHT11 // TIPO SENSOR DE TEMPERATURA
DHT dht(pino_DHT, DHTTYPE);
int temperatura;
int aumenta, diminui;
unsigned long previousMillis = 0;
//Intervalo de medicao temperatura
const long interval = 2000;
void draw()
{
//Retangulo temperatura atual
u8g.drawRFrame(0, 17, 84, 46, 2);
u8g.setFont(u8g_font_fub20);
//Atualiza a temperatura no display
u8g.setPrintPos(13, 50);
u8g.print(temperatura);
//Circulo grau
u8g.drawCircle(51, 33, 3);
u8g.drawStr( 56, 50, "C");
//Box superior amarelo
u8g.setFont(u8g_font_8x13B);
u8g.drawRBox(0, 0, 127, 16, 2);
u8g.setColorIndex(0);
//box temperatura maxima
u8g.drawRFrame(86, 17, 42, 46, 2);
u8g.drawRBox(86, 17, 42, 22, 2);
u8g.setColorIndex(0);
u8g.drawStr(96, 33, "MIN");
u8g.setColorIndex(1);
//Se a temperatura estiver abaixo da variavel (temp_min), desarma o rele
if (temp_min <= temperatura)
{
digitalWrite(pino_rele, LOW);
}
//Se a temperatura estiver acima da variavel (temp_max), aciona o rele
if (temperatura >= temp_max)
{
digitalWrite(pino_rele, HIGH);
//Atualiza na tela o valor da temp. maxima
u8g.setPrintPos(100, 55);
u8g.print(temp_min);
u8g.drawCircle(120, 47, 2);
u8g.setColorIndex(1);
}
//Atualiza na tela o valor da temp. maxima
u8g.setPrintPos(100, 55);
u8g.print(temp_min);
u8g.drawCircle(120, 47, 2);
u8g.setColorIndex(1);
}
void setup(void)
{
pinMode(buzzer, OUTPUT); //PINO DE ALARM ---> SAIDA
pinMode(buth, INPUT); //PINO BOTAO HORAS --> Entrada
pinMode(butm, INPUT); //PINO BOTAO MINUTOS --> Entrada
pinMode(buts, INPUT); //PINO BOTAO SEGUNDOS --> Entrada
pinMode(start, INPUT); //PINO BOTAO START --> Entrada
digitalWrite(buzzer, HIGH);
msg = 0; //BARREIRA MENSAGEM BEM VINDO
empieza = 1024; //BARREIRA START
varbuth = 1; //BARREIRA DE HORAS
varbutm = 1; //BARREIRA DE MINUTOS
varbuts = 1; //BARREIRA DE SEGUNDOS
Serial.begin(9600);
pinMode(pino_rele, OUTPUT);
pinMode(pino_aumenta, INPUT);
pinMode(pino_diminui, INPUT);
dht.begin();
}
void loop(void)
{
do
{
varbuth = analogRead(buth); //LEITURA BOTAO HORAS
varbutm = analogRead(butm); //LEITURA BOTAO MINUTOS
varbuts = analogRead(buts); //LEITURA BOTAO SEGUNDOS
if (varbuth == 0) //SE PRESSIONAR O BOTAO AUMENTA UMA HORA
{
ahoras = ahoras + 1 ;
delay(250);
}
if (varbutm == 0) //SE PRESSIONAR O BOTAO AUMENTA UM MINUTO
{
aminutos = aminutos + 1;
delay(250);
}
if (varbuts == 0) //SE PRESSIONAR O BOTAO AUMENTA UM SEGUNDO
{
asegundos = asegundos + 1;
delay(250);
}
u8g.setPrintPos(21, 13);
u8g.setColorIndex(1);
if (ahoras < 10) u8g.print("0"); // SE AS HORAS FOREM MENOR QUE "10" É COLOCADO UM "0" NA FRENTE
u8g.print(ahoras); // SEM ESSE CODIGO SE MOSTARIA ASSIM: H:M:S (1:M:S)
u8g.print(":");
if (aminutos < 10) u8g.print("0"); // SE OS MINUTOS FOREM MENOR QUE "10" É COLOCADO UM "0" NA FRENTE
u8g.print(aminutos); // SEM ESSE CODIGO SE MOSTARIA ASSIM: H:M:S (H:1:S)
u8g.print(":");
if (asegundos < 10) u8g.print("0"); // SE OS SEGUNDOS FOREM MENOR QUE "10" É COLOCADO UM "0" NA FRENTE
u8g.print(asegundos); // SEM ESSE CODIGO SE MOSTARIA ASSIM: H:M:S (H:M:1)
empieza = analogRead(start); //LEITURA DO BOTAO DE START
if (empieza == 0) //Si el boton de arranque, fue pulsado...
{
segundostotal = asegundos + (aminutos * 60) + (ahoras * 60 * 60); // CONVERTE TEMPO TOTAL EM SEGUNDOS
}
} while (empieza != 0); // VOLTA AO MENU DE AJUSTE PARA APENAS APERTAR O BOTAO START
while (segundostotal > 0)
{
delay (1000); //DESCONTADO 1 SEGUNDO DO TIMER
segundostotal--;
ahoras = ((segundostotal / 60) / 60); //CONVERTE OS SEGUNDOS TOTAIS EM HORAS
aminutos = (segundostotal / 60) % 60; //CONVERTE OS SEGUNDOS TOTAIS EM MINUTOS
asegundos = segundostotal % 60; //CONVERTE OS SEGUNDOS TOTAIS EM SEGUNDOS
u8g.setPrintPos(21, 13);
u8g.setColorIndex(1);
if (ahoras < 10) u8g.print("0"); // SE AS HORAS FOREM MENOR QUE "10" É COLOCADO UM "0" NA FRENTE
u8g.print(ahoras); // SEM ESSE CODIGO SE MOSTARIA ASSIM: H:M:S (1:M:S)
u8g.print(":");
if (aminutos < 10) u8g.print("0"); // SE OS MINUTOS FOREM MENOR QUE "10" É COLOCADO UM "0" NA FRENTE
u8g.print(aminutos); // SEM ESSE CODIGO SE MOSTARIA ASSIM: H:M:S (H:1:S)
u8g.print(":");
if (asegundos < 10) u8g.print("0"); // SE OS SEGUNDOS FOREM MENOR QUE "10" É COLOCADO UM "0" NA FRENTE
u8g.print(asegundos); // SEM ESSE CODIGO SE MOSTARIA ASSIM: H:M:S (H:M:1)
if (segundostotal == 0) //FINALIZA O TEMPO DO TIMER
{
while (1) //FINALIZA O TEMPO E DESARMA O RELE
{
digitalWrite(buzzer, LOW);
delay(200);
}
}
}
unsigned long currentMillis = millis();
//Timer para ler o valor da temperatura
if (currentMillis - previousMillis >= interval)
{
temperatura = dht.readTemperature();
previousMillis = currentMillis;
}
//Testa botao aumenta temperatura
aumenta = digitalRead(pino_aumenta);
if (aumenta == 1)
{
temp_min++;
}
while (digitalRead(pino_aumenta) == 1)
{
delay(10);
}
//testa botao diminui temperatura
diminui = digitalRead(pino_diminui);
if (diminui == 1)
{
temp_min--;
}
while (digitalRead(pino_diminui) == 1)
{
delay(10);
}
u8g.firstPage();
// Chama a rotina de desenho na tela
do
{
draw();
}
while ( u8g.nextPage() );
delay(50);
}