Um INT (inteiro) no Arduino Uno e em outras placas baseadas no ATMega, é um número entre -32.768 e 32.767, que ocupa 2 bytes (16 bits) de memória.
Uma das maneiras de gravar um número inteiro na EEPROM é separar esse número em duas partes, e gravar cada uma separadamente.
Digo "uma das maneiras", porque você pode utilizar as próprias funções da biblioteca para gravar dados na EEPROM, usando os comandos abaixo :
void eeprom_write_word (uint16_t *__p, uint16_t __value)
void eeprom_write_float (float *__p, float __value)
void eeprom_write_block (const void *__src, void *__dst, size_t __n)
A primeira opção, por exemplo, utiliza o uint16_t, que é um unsigned int de 16 bits, cujo valor vai de 0 a 65.535.
No meu método mais arcaico, eu armazeno o INT dividindo-o em duas partes : primeiro divido o número que desejo armazenar por 256, obtendo a primeira parte, e depois uso a função % (modulo), para obter a segunda parte. Posteriormente, coloco cada uma delas em um endereço de memória diferente.
Eu faço isso no programa abaixo, gravando o número 23767 na memória separando-o assim:
Primeira parte : 23767 / 256 = 92 (apenas a parte inteira do número)
Segunda parte : 23767 % 256 = 215 (resto da divisão)
Depois de ler o valor em memória, preciso montar novamente o valor original, juntando as 2 partes. Para isso uso :
Valor original = (parte1 * 256) + parte2
Isso quer dizer que a partir de agora você pode gravar todos os dados na memória EEPROM do Arduino ? Infelizmente não.
Segundo o
datasheet do ATMega328P , temos um limite de ciclos de leitura e escrita na memória EEPROM. Esse número é de aproximadamente 100.000 ciclos.
Apesar de ser um número relativamente grande, procure usar um intervalo maior para gravação, ou utilize-o apenas para valores essenciais, como por exemplo os valores máximo e mínimo de um sensor de temperatura.