Eu faria uma coisa deste género:
void loop() {
word len = ether.packetReceive();
word pos = ether.packetLoop(len);
if (timeStatus() == timeNotSet) {
if (requestSent && ether.ntpProcessAnswer(&timeStamp, srcPort)) {
setActualTime(timeStamp + 3600 * TIME_ZONE);
requestSent = false;
}
unsigned long time = millis();
if (time - lastTime > INTERVAL) {
lastTime = time;
ether.ntpRequest(ntpServer, srcPort);
requestSent = true;
}
}
if (timeStatus() == timeSet) {
getTemp();
controlFans();
controlHeater();
controlLights();
timer();
unsigned long Lcdtime = millis();
if (Lcdtime - LcdlastTime > LcdInterval) {
LcdlastTime = Lcdtime;
refreshLcd();
checkBkLgt(); //ADICIONAR ESTA LINHA
}
unsigned long postTime = millis();
if (postTime - postLastTime > postInterval) {
postLastTime = postTime;
sendTemperature();
}
checkResponse();
if (pos) { // check if valid tcp data is received
char* webReturn = (char *)Ethernet::buffer + pos;
callPages(webReturn);
}
}
}
Estou a aproveitar a altura em que é feito o refresh do LCD para ver se é necessário desligar a luz de fundo ou não. Para fazer esta verificação (e pegando no código que já tinha sido postado), eu faria uma coisa como a seguinte:
void checkBkLgt() {
int horaActual = hour()*60+minute();
if(horaActual > 480) // (8 * 60) + 0 = 480
{
lcd.backlight();
}
else if(horaActual >= 0 && horaActual <= 480) // (8 * 60) + 0 = 480
{
lcd.noBacklight();
}
}
É calculado o tempo actual (penso que não é necessária nenhuma função para isto, porque apenas será chamada uma vez), depois, se a hora actual foi maior que as 8h00m, então é ligada a luz de fundo, se não, verifica se a hora está entre as 0h00m e as 8h00m (esta verificação não era necessária, por razões óbvias) e caso seja assim, desliga a luz de fundo do LCD.
Em relação à questão de:
Outra coisa que não tem haver com o lcd mas sim com o horário exibido.
Hj ele apresenta a hora com 1 hora a mais, se eu tirar esses +3600 deve funcionar né?
Deveria mudar de TIME_ZONE
. Apenas é necessário na linha onde é definido:
//Define Clock
#define SECONDS_IN_DAY 86400
#define START_YEAR 1900
#define TIME_ZONE -2
static int days_in_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
alterar esse valor para outro.