ontem observei que o relogio também entra em pane mas com muito menos frequencia, vai a 45 horas 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;*
-
}*
}