
O microcontrolador na placas baseadas em Arduino e Genuino AVR tem EEPROM: memória cujos valores são mantidos quando a placa é desligada (como um pequeno disco rígido). Esta biblioteca permite ler e gravar esses bytes.
Os micro-controladores suportados nas várias placas Arduino e Genuino têm diferentes quantidades de EEPROM:
- 1024 bytes no ATmega328P,
- 512 bytes no ATmega168 e ATmega8,
- 4 KB (4096 bytes) no ATmega1280 e ATmega2560.
- As placas Arduino e Genuino 101 têm um espaço EEPROM emulado de 1024 bytes.
Atenção: as memórias EEPROM permitem aproximadamente 100.000 gravações antes de apresentarem problemas. Assim, devemos usar com cuidado.
Tamanho das variáveis:
Lembrando: 1 byte = 8 bits
- int, unsigned int - 2 bytes - de -32,768 a 32,767
- bool - 1 byte - 1 ou 0
- char - 1 byte
- string - indefinido número de bytes (matrix de char)
- float, long, unsigned long, double - 4 bytes
Biblioteca:
É necessário sempre incluir a biblioteca EEPROM.h
#include <EEPROM.h>
Comandos:
- write - escreve
i = dato a ser escrito
0 = endereço inicial da memória
- read - lê
address = endereço inicial da memória
- clear - limpa as memórias
EEPROM.write(i, 0);
}
Trabalhando com valores da entrada analógica:
Como uma variável INT ocupa 2 bytes, e se queremos utilizar somente um byte para ler uma entrada analógica, devemos então dividir o valor por 4.
1 byte = valores até 255
Entrada analógica = de 0 a 1023 (1024 valores)
Então: 1024 / 4 = 255
Não podemos esquecer de multiplicar o valor por 4 quando fizermos a leitura.
Video:
Exemplo de escrita:
int addr = 0;
void setup() {
}
void loop() {
int val = analogRead(0) / 4; // divide por 4 para utilizar somente 1 byte
EEPROM.write(addr, val);
delay(1000);}
Exemplo de leitura:
int address = 0;
byte value;
void setup() {
Serial.begin(9600);
}
void loop() {
value = EEPROM.read(address);
Serial.print(address);
Serial.print(" valor = ");
Serial.println(value*4, DEC); // multiplicar por 4 se for o caso
delay(500);
}
Exercícios:
}
void loop() {
value = EEPROM.read(address);
Serial.print(address);
Serial.print(" valor = ");
Serial.println(value*4, DEC); // multiplicar por 4 se for o caso
delay(500);
}
Exercícios:
- Crie um programa que armazena no byte 0 da EEPROM o valor 45 e no 10 o valor 500.
- Crie um novo programa que soma os valores dos endereços da EEPROM 0 e 10 e envia pela serial o resultado.