Antes de falar e descrever um pouco o código que tenho planeado até agora, vou fazer umas breves considerações em relação à forma como ficam organizados os dados na eeprom. O código será deixado para o post seguinte.

O problema que surgia era como gravar números negativos, assim sendo, antes de gravar os valores é feita uma verificação se são positivos ou negativos. No caso de serem negativos é feita uma multiplicação por -1 e gravados no endereço mais baixo dos 3 necessários. Os restantes são ocupados com o valor zero.
No caso de ser positivo, o endereço mais baixo fica com o valor zero, os dois seguintes com parte do valor (a soma resulta no valor correcto de temperatura).
Importante também é gravar o número do ultimo endereço na eeprom (para o caso de a bateria falhar), para que aquando da extracção dos dados, apenas saírem os válidos e não todos os 16mil.

Em suma os primeiros 25 endereços são para guardar o número de ciclos (3 em 3) onde ficou o último valor de temperatura válido e daí para cima serão distribuídos em arranjos de 3, onde o primeiro aloja a temperatura negativa e os dois seguintes a temperatura positiva.


Por exemplo:

* Foi lida do sensor a temperatura 20,5ºC.
Este valor é multiplicado por 10, obtendo 205.
Como é um valor positivo, procedi da seguinte forma:
205/2=102,5   sai apenas o valor inteiro, 102
205-102= 103
No endereço 25 será colocado zero, no endereço 26 será colocado 102 e no endereço 27 será colocado 103.
Ocorreu um ciclo, então o endereço zero passa a conter o valor 1.

* Foi lida do sensor a temperatura -7ºC.
Este valor é multiplicado por 10, obtendo -70.
Como é um valor negativo, é multiplicado por -1 (obter o simétrico).
No endereço 25 será colocado 70, no endereço 26 será colocado zero e no endereço 27 será colocado zero.
Ocorreu um ciclo, então o endereço zero passa a conter o valor 1.


Para os dois casos, para obter o valor da temperatura basta:
([endereço26]+[endereço27]-[endereço25])/10


0 Responses so far.

Enviar um comentário