OK. Não tinha noção disso. Penso que sendo assim, é melhor começar com algumas definições e a partir daí talvez de para perceber melhor o que tentei explicar (e o que perguntou o bubulindo).
ROM - Read Only Memory (memória só de leitura, portanto não consegue ser escrita, normalmente é escrita uma vez durante a produção do chip).
RAM - Ramdom Access Memory (memória de acesso aleatório - não sei bem qual é a origem das iniciais, mas penso que tenha sido "uma brincadeira" para ser parecida com ROM, mas esta é uma memória de escrita e leitura).
Outra diferença que existe entre as duas, é que, na RAM, quando a energia é desligada, os dados são perdidos.
As memória ROM, hoje em dia não têm grande utilização. Elas serviam principalmente para guardar os programas, mas por exemplo no Arduino, nós queremos poder apagar os programas e escrever outros, para fazer experiências etc. Sendo assim, a tecnologia foi evoluindo e foram criadas outro tipo de ROM's. Uma delas a EEPROM.
EEPROM - Electric Erasable "ROM" (isto é, é uma memória "só de leitura", mas que pode ser apagada!?)
Este "nonsense" pode ser explicado pelo facto de ser memória só de leitura numa óptica de os dados não serem perdidos quando a energia desaparece (ou seja, quando o equipamento é desligado). O programa que é descarregado para o Arduino é guardado numa memória deste tipo (que do ponto de vista tecnológico é diferente, por isso recebe outro nome: Flash Memory), mas do ponto de vista lógico funciona da mesma forma, isto é, é não volátil (os dados não desaparecem quando a energia desaparece) e pode ser apagada (e gravada) electricamente (não por processos mecânicos nem químicos, o que não dava muito jeito).
Portanto, para guardar os valores máximo e mínimo de sempre deve ser usado um tipo de memória em que não seja perdido o seu conteúdo quando a energia é perdida (pelo menos, não seria assim que eu faria, porque nesse caso, não seriam os valores "de sempre", mas os valores de sempre desde que o equipamento está ligado).
Daí a pergunta do bubulindo, que "trocando por miúdos" basicamente quer dizer: "Mas o que queres fazer? Podes perder os valores ou não?"
Uma coisa que eu ainda não disse acerca das memórias EEPROM é que elas normalmente têm um tempo limitado de vida. Apenas podem ser escritas/apagadas um determinado número de vezes (normalmente são valores muito altos, na casa das 100.000 ou 1.000.000), por isso se o programa estiver constantemente a escrever um novo valor naquele local da memória, essa zona da memória pode ficar danificada (e o resto em bom estado). Por isso, para coisas que possam variar muito, convém não usar EEPROM para armazenar esses valores.
Aqui chegamos à parte do RTC. O RTC tem os seus valores a variar constantemente (1 vez por segundo), estes valores são mantidos (e continuam a ser alterados) mesmo quando o equipamento é desligado. Isto acontece, porque estes valores são mantidos em memória RAM, mas o chip continua a ser alimentado por uma pilha de botão.
Sendo assim, o que eu tentei dizer no meu post é que se no projecto existe já este dispositivos disponível, ele é o candidato ideal a armazenar estes valores máximos e mínimos.
A questão dos 3000.0, tem uma explicação muito fácil. Antes de saber quais serão as primeiras temperaturas máximas e mínimas, é necessário garantir que o sistema começa a trabalhar. Como é que o sistema vai calcular (ou verificar) a temperatura máxima? Seguido o procedimento seguinte:
- mede a temperatura actual;
- a temperatura actual é maior que a temperatura máxima?
- se sim, a temperatura actual é a nova temperatura máxima.
portanto, antes de isto iniciar, tem que haver uma valor guardado na variável "temperatura máxima" que tem que ser suficientemente pequeno, para que a a primeira temperatura que seja medida passe a ser a temperatura máxima. Por isso o bubulindo fez:
max_temp_mes = 0.0;
para a temperatura mínima, é a mesma coisa, mas o processo inverso:
- mede a temperatura actual;
- a temperatura actual é MENOR que a temperatura MÍNIMA?
- se sim, a temperatura actual é a nova temperatura MÍNIMA.
portanto, o processo tem que começar com um valor suficientemente alto na temperatura mínima para que a primeira temperatura medida passe a ser a nova temperatura mínima. (neste caso o bubulindo escolheu 3000.0, assim como poderia ter escolhido, 60.0, por exemplo, uma vez que se for medida a temperatura ambiente, por muito calor que esteja, esta nunca chegará aos 60.0)