Eu precisava ver o código completo pra ver como vc está chamando cada função e pra te ajudar a construir o contador de tempo de 30 segundos (ou ver se da pra aproveitar algum outro que já ta no código), mas com o que vc postou já da pra dar algumas sugestões.
O código da leitura do termômetro vc ta chamando continuamente, não é? Se vc colocou a função no atividade_led então ela ta sendo chamada continuamente por 1 segundo, e no outro segundo ela não é chamada.
É esse código que vc quer rodar a cada 30 segundos? Se sim, é bom fazer isso sim. Temperatura é algo que muda devagar então vc não precisa ficar lendo ela toda hora.
Aproveite e tire a última linha, a "dtostrf(celsius,4,0,texttemp);". Vc já tem a temperatura armazenada na variável celsius, essa linha do dtostrf vc usa só quando for exibir a temperatura no TID.
O código pra exibir na tela eu tirei umas linhas de exibição do texto "A/C" (vc usa multiplas linhas do jeito que tava quando vc tem um texto maior que 10 caracteres e precisa fazer scroll dele na tela, nesse caso o texto "A/C" da pra exibir numa tacada só). E coloquei o dtostrf aqui.
Código: Selecionar todos
void menu_Ac()
{
if (flagAc == 0)
{
calcula_intervalo();
if (intervaloMiliSecs < 100)
mydisplay.display_message(F("A/C"),255);
else if (intervaloSecs >= 4)
flagAc = 1;
}
else if (flagAc == 1)
{
calcula_intervalo();
if (intervaloMiliSecs >= 2000)
{
dtostrf(celsius,4,0,texttemp);
sprintf(textfinal, "Ti %s c", texttemp);
mydisplay.display_message(textfinal,254);
exibe_simbolo_colchete();
zera_intervalo();
}
}
}
A função para ligar e desligar o A/C vc tb colocou no atividade_led?
Se sim (o que eu acredito ser o caso) vc tb pode chamar ela uma vez a cada 30 segundos, cai na mesma situação que eu comentei aí em cima. Essa função aqui é interessante vc chamar ela logo depois de fazer a leitura de temperatura.
E o problema que eu desconfiei estar causando o EON acender com o carro ligado está aqui. Vc não pode acionar os símbolos toda hora, eles são as funções mais pesadas que tem no TID e acontece todo tipo de maluquice quando se faz isso.
Aqui eu vou sugerir também que vc procure as funções "exibe_simbolo_colchete" e "apaga_simbolo_colchete" e crie funções equivalentes para o símbolo 4, e o código de acionamento vai ficar assim:
Código: Selecionar todos
void re_ac()
{
//Aciona o rele
if ( celsius > 25 ){
//digitalWrite(8, HIGH);
exibe_simbolo_cr();
}
else if (celsius < 25) {
//Desliga o rele
//digitalWrite(8, LOW);
apaga_simbolo_cr();
}
}