Olá pll,
mais uma vez recorro aqui ao forum para uma ajudinha, (aí o que seria de mim sem o forum ).
Tenho um sensor de temperatura que me indica a temperatura Máxima do dia e a temperatura Mínima do dia, e como também tenho um modulo RTC queria "registar" a hora em que é atingida a temperatura máxima e o mesmo com a mínima.
As varias partes do código são:
Declaração de variaveis:
float tempSala;
float tempAqua;
float max_temp_aquario_dia = -100.0;
float max_temp_aquario_ever = -100.0;
float min_temp_aquario_dia = 100.0;
float min_temp_aquario_ever = 100.0;
float max_temp_sala_dia = -100.0;
float min_temp_sala_dia = 100.0;
unsigned char flag_temp = 0;
int menuEcra = 0;
int horaTempMaxAqua;
int minutoTempMaxAqua;
int horaTempMinAqua;
int minutoTempMinAqua;
int horaTempMaxSala;
int minutoTempMaxSala;
int horaTempMinSala;
int minutoTempMinSala;
boolean passaInfoTempMaxMin = false;
boolean temperaturasActuais = false;
boolean temperaturasMaximas = false;
boolean temperaturasMinimas =false;
boolean temperaturasMaxMinHorasAquario = false;
unsigned long tempoInfo = 0;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress aquaThermometer = { 0x28, 0xF8, 0x62, 0x47, 0x05, 0x00, 0x00, 0x0C };
DeviceAddress salaThermometer = { 0x28, 0x3E, 0x08, 0x5C, 0x05, 0x00, 0x00, 0x21 };
FUNÇÃO TEMPERATURA:
void printTemperature(DeviceAddress deviceAddress)
{ //float tempC = sensors.getTempC(deviceAddress);
float tempSala= sensors.getTempC(salaThermometer);
float tempAqua= sensors.getTempC(aquaThermometer);
if (tempSala == -127.00)
{Serial.print("Erro ao ler temperatura !");
lcd.clear();
MostraInfo(TARGET, 0, 0, "Erro temperatura");}
else
{Serial.print("Temperatura: ");
//lcd.setCursor(8,1);
//lcd.print(" ");
lcd.setCursor(10, 1);
lcd.print(tempAqua);
lcd.setCursor(15, 1);
lcd.print("C");
Serial.print(tempAqua);
Serial.print("C");
Serial.print(" / ");
Serial.print(DallasTemperature::toFahrenheit(tempAqua));
Serial.print("F");
Serial.println();
if (tempAqua > max_temp_aquario_dia) max_temp_aquario_dia = tempAqua;
if (tempAqua < min_temp_aquario_dia) min_temp_aquario_dia = tempAqua;
if (tempSala > max_temp_sala_dia) max_temp_sala_dia = tempSala;
if (tempSala < min_temp_sala_dia) min_temp_sala_dia = tempSala;
if (tempAqua > max_temp_aquario_ever) max_temp_aquario_ever = tempAqua;
if (tempAqua < min_temp_aquario_ever) min_temp_aquario_ever = tempAqua;
if (hora == 0 && flag_temp == 0) //novo mes que inicia...
{max_temp_aquario_dia = 0.0;
min_temp_aquario_dia = 3000.0;
max_temp_sala_dia = 0.0;
min_temp_sala_dia = 3000.0;
flag_temp = 1;}
}
if(max_temp_aquario_dia != max_temp_aquario_dia)
{horaTempMaxAqua = hora;
minutoTempMaxAqua = minuto;}
if(min_temp_aquario_dia!=min_temp_aquario_dia)
{horaTempMinAqua = hora;
minutoTempMinAqua = minuto;}
}
PARTE DA FUNÇÃO QUE PRODUZ O OUTPUT DESEJADO:
else if (estado==true && Key==NO_KEY && temperaturasMaxMinHorasAquario== true)
{if (millis() - tempoInfo > 1500)
{menuEcra++;
if (menuEcra >= 3)
{menuEcra = 1;}
tempoInfo = millis();
switch (menuEcra)
{case 1:
lcd.clear();
MostraInfo(TARGET, 0, 0, "Temp. Max do dia");
MostraInfo(TARGET, 0, 1, "Aquario as:");
lcd.setCursor(11, 1);
lcd.print(horaTempMaxAqua);
MostraInfo(TARGET, 13, 1, ":");
lcd.setCursor(14, 1);
lcd.print(minutoTempMaxAqua);
break;
case 2:
lcd.clear();
MostraInfo(TARGET, 0, 0, "Temp. Min do dia");
MostraInfo(TARGET, 0, 1, "Aquario as:");
lcd.setCursor(11, 1);
lcd.print(horaTempMinAqua);
MostraInfo(TARGET, 13, 1, ":");
lcd.setCursor(14,1);
lcd.print(minutoTempMinAqua);
break;
}
}
}
A questão é que as variaveis:
- horaTempMaxAqua;
- minutoTempMaxAqua;
- horaTempMinAqua;
- minutoTempMinAqua
estão-me a devolver o valor "0.00".
Mas ao fazer isto:
if(max_temp_aquario_dia != max_temp_aquario_dia)
{horaTempMaxAqua = hora;
minutoTempMaxAqua = minuto;}
elas não deveriam assumir o valor da hora e minuto quando uma nova temperatura máxima é registada?
Segue também link para o código completo.
https://googledrive.com/host/0B-Pv876wR5B1OVFDdF9rYjZ6UFk
Agradeço toda a ajudar que me poderem dar.
Obg
NJPinheiro