Problemas com relé

ontem observei que o relogio também entra em pane mas com muito menos frequencia, vai a 45 horas :stuck_out_tongue: e desliga a luz.... da uma piscada apenas.....
segue todo o código,
#include <OneWire.h>
#include <LiquidCrystal.h>
#include "Wire.h"
#define DS1307_ADDRESS 0x68
#define Luz_Fundo 6

#define ledbranco 10
#define ledazul 9
const char estados[2][10] = {"ON ", "OFF"};

byte zero = 0x00;
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius;

byte decToBcd(byte val){
return ( (val/10*16) + (val%10) ); // Converter decimal para código binário
}

byte bcdToDec(byte val) {
return ( (val/16*10) + (val%16) ); // Converter código binário para decimal
}

byte sinal[8] = { //símbolo de graus celsius
0b01000,
0b10100,
0b01000,
0b00011,
0b00100,
0b00100,
0b00011,
0b00000
};

byte temperatura[8] = { //símbolo de graus celsius
0b01110,
0b01010,
0b01110,
0b01110,
0b01110,
0b11111,
0b11111,
0b01110,
};

byte relogio[8] = { //símbolo de graus celsius
0b00000,
0b11111,
0b10101,
0b10101,
0b10101,
0b10011,
0b10001,
0b11111,
};

byte minimo[8] = {
B01110,
B01010,
B01010,
B01010,
B10001,
B10001,
B10001,
B01110
};

byte maximo[8] = {
B01110,
B01110,
B01110,
B01110,
B11111,
B11111,
B11111,
B01110
};

byte rsimb[8] = {
B00000,
B01010,
B00100,
B10101,
B01110,
B10101,
B00100,
B01010
};

byte asimb[8] = {
B01001,
B01001,
B10010,
B11011,
B01001,
B10010,
B10010,
B00000
};

struct data_hora {
unsigned char minuto;
unsigned char hora;
unsigned char dia;
unsigned char mes;
unsigned int ano;
} agora;

float tempMax;
float tempMin;
int seg = 0;

int pbranco = 0;
int Pbranco = 250;
int pazul = 0;
int Pazul = 150;
int statusHeater = 0;
int statusFan = 0;
int aquecedor = A0;
int resfriador = A2;
int temperatura_controle = 27.5;
int vt = 0.5;
int luz_desligamento = 24;
int fp = 6; //fotoperíodo
OneWire ds(A15);

LiquidCrystal lcd(8, 7, 5, 4, 3, 2);

void setup(void) {
Serial.begin(19200);
pinMode(ledbranco, OUTPUT);
pinMode(aquecedor,OUTPUT); //define o pino do aquecedor como saída
pinMode(resfriador,OUTPUT); //define o pino do resfriador como saída
pinMode(Luz_Fundo,OUTPUT); //define o pino como saída
lcd.begin(16, 2); //inicia o lcd com 2 linhas e 16 colunas
digitalWrite(Luz_Fundo,HIGH); // Liga a luz do display.
Wire.begin();
tempMax = 0;
tempMin = 100;
digitalWrite(aquecedor, HIGH);
digitalWrite(resfriador, HIGH);
//pinMode(fadePin, OUTPUT); //retirarrrrrrrrrrrrrr
//pinMode(fadePinn, OUTPUT); //retirarrrrrrrrrrr
}

void loop(void) {
if ( !ds.search(addr)) {
while (!ds.search(addr)) { //enquanto não encontrar o sensor.
ds.reset_search();
delay(250);
digitalWrite(aquecedor, HIGH);
digitalWrite(resfriador, HIGH);
lcd.clear();
lcd.setCursor(1,0);
lcd.print("ERRO NO SENSOR");
}}
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println("CRC não é válido!");
return;
}
else {
printTemp();
updateTime(&agora);
printLCD();
statusHeater = digitalRead(aquecedor);
statusFan = digitalRead(resfriador);
pbranco = (Pbranco * 100 / 250);
pazul = (Pazul * 100 / 250);

}}

void printTemp(){
ds.reset();
ds.select(addr);
ds.write(0x44,1);
delay(1000);
present = ds.reset();
ds.select(addr);
ds.write(0xBE);
for ( i = 0; i < 9; i++) {
data = ds.read();

  • }*

  • unsigned int raw = (data[1] << 8) | data[0];*

  • if (type_s) {*

  • raw = raw << 3;*

  • if (data[7] == 0x10) {*

  • raw = (raw & 0xFFF0) + 12 - data[6];*

  • }}*

  • else {*

  • byte cfg = (data[4] & 0x60);*

  • if (cfg == 0x00) raw = raw << 3; *

  • else if (cfg == 0x20) raw = raw << 2;*

  • else if (cfg == 0x40) raw = raw << 1;*

  • }*

  • lcd.createChar(1,sinal);*

  • lcd.createChar(2,temperatura);*

  • lcd.createChar(3,relogio);*

  • lcd.createChar(4,maximo);*

  • lcd.createChar(5,minimo);*

  • lcd.createChar(6,asimb);*

  • lcd.createChar(7,rsimb);*

  • celsius = (float)raw / 16.0;*

  • if (celsius <= 27.0)digitalWrite(aquecedor, LOW);*

  • if (celsius >= 27.5)digitalWrite(aquecedor, HIGH);*

  • if (celsius >= 28.0)digitalWrite(resfriador, LOW);*

  • if (celsius <= 27.5)digitalWrite(resfriador, HIGH);*

  • if (celsius > tempMax) tempMax = celsius;*

  • if (celsius < tempMin) tempMin = celsius;*

  • }*

void updateTime(struct data_hora *dt){

  • Wire.beginTransmission(DS1307_ADDRESS);*

  • Wire.write(zero);*

  • Wire.endTransmission();*

  • Wire.requestFrom(DS1307_ADDRESS, 7);*

  • int dummy = (unsigned char)bcdToDec(Wire.read());*

  • dt->minuto = bcdToDec(Wire.read());*

  • dt->hora = (unsigned char)bcdToDec(Wire.read() & 0b111111);*

  • dummy = bcdToDec(Wire.read());*

  • dt->dia = (unsigned char)bcdToDec(Wire.read());*

  • dt->mes = (unsigned char)bcdToDec(Wire.read());*

  • dt->ano = bcdToDec(Wire.read());*

  • if (agora.hora >= luz_desligamento - fp + 1 && agora.hora < luz_desligamento - 1) analogWrite(ledbranco, Pbranco);*

  • if (agora.hora >= 0 && agora.hora < luz_desligamento - fp) analogWrite(ledbranco, 0);*

  • if (agora.hora >= luz_desligamento - fp && agora.hora < luz_desligamento) analogWrite(ledazul, Pazul);*

  • if (agora.hora >= 0 && agora.hora < luz_desligamento - fp) analogWrite(ledazul, 0);*
    }
    void printLCD(){

  • if (seg >= 0 && seg <=20) {*

  • lcd.clear();*

  • lcd.setCursor(0,0);*

  • lcd.write(2);*

  • lcd.print(celsius);*

  • lcd.write(1);*

  • lcd.setCursor(0,1);*

  • lcd.write(3);*

  • if (agora.hora <10) lcd.print("0");*

  • lcd.print(agora.hora);*

  • lcd.print(":");*

  • if (agora.minuto <10) lcd.print("0");*

  • lcd.print(agora.minuto);*

  • lcd.setCursor(12,0);*

  • lcd.write(6);*

  • lcd.print(estados[statusHeater]);*

  • lcd.setCursor(12,1);*

  • lcd.write(7);*

  • lcd.print(estados[statusFan]);*

  • seg++;*

  • }*

  • if (seg >=21 && seg <=26){*

  • lcd.clear();*

  • lcd.setCursor(0,0);*

  • lcd.write(4);*

  • lcd.print(tempMax);*

  • lcd.write(1);*

  • lcd.setCursor(0,1);*

  • lcd.write(5);*

  • lcd.print(tempMin);*

  • lcd.write(1);*

  • lcd.setCursor(11,1);*

  • lcd.print("B ");*

  • lcd.print(pbranco);*

  • lcd.setCursor(11,0);*

  • lcd.print("A ");*

  • lcd.print(pazul);*

  • seg++; *

  • }*

  • if (seg >= 27){*

  • seg =0;*

  • }*
    }