As placas Arduino têm vários tipos de memória. Primeiro, é a RAM estática (memória de acesso aleatório), que é usada para armazenar variáveis durante a execução do programa. Em segundo lugar, é a memória flash que armazena os esboços que você escreveu. E em terceiro lugar, é uma EEPROM que pode ser usada para armazenar informações permanentemente. O primeiro tipo de memória é volátil, perde todas as informações após reiniciar o Arduino. Os dois segundos tipos de memória armazenam informações até que sejam substituídas por uma nova, mesmo depois que a alimentação for desligada. O último tipo de memória - EEPROM - permite que os dados sejam gravados, armazenados e lidos conforme necessário. Vamos considerar essa memória agora.
Necessário
- - Arduino;
- - computador.
Instruções
Passo 1
EEPROM significa Electrically Erasable Programmable Read-Only Memory, ou seja, memória somente leitura apagável eletricamente. Os dados nesta memória podem ser armazenados por dezenas de anos após a alimentação ser desligada. O número de ciclos de reescrita é da ordem de vários milhões de vezes.
A quantidade de memória EEPROM no Arduino é bastante limitada: para placas baseadas no microcontrolador ATmega328 (por exemplo, Arduino UNO e Nano), a quantidade de memória é de 1 KB, para placas ATmega168 e ATmega8 - 512 bytes, para ATmega2560 e ATmega1280 - 4 KB.
Passo 2
Para trabalhar com a EEPROM para Arduino, uma biblioteca especial foi escrita, que é incluída no IDE do Arduino por padrão. A biblioteca contém os seguintes recursos.
ler (endereço) - lê 1 byte da EEPROM; endereço - o endereço de onde os dados são lidos (célula a partir de 0);
escrever (endereço, valor) - escreve o valor do valor (1 byte, número de 0 a 255) na memória no endereço do endereço;
atualizar (endereço, valor) - substitui o valor no endereço se seu conteúdo antigo for diferente do novo;
get (address, data) - lê dados do tipo especificado da memória no endereço;
put (endereço, dados) - grava dados do tipo especificado na memória no endereço;
EEPROM [endereço] - permite que você use o identificador "EEPROM" como uma matriz para gravar dados e ler da memória.
Para usar a biblioteca no esboço, nós a incluímos com a diretiva #include EEPROM.h.
etapa 3
Vamos escrever dois inteiros na EEPROM e, em seguida, lê-los da EEPROM e enviá-los para a porta serial.
Não há problemas com números de 0 a 255, eles ocupam apenas 1 byte de memória e são gravados no local desejado usando a função EEPROM.write ().
Se o número for maior que 255, usando os operadores highByte () e lowByte (), ele deve ser dividido por bytes e cada byte deve ser escrito em sua própria célula. O número máximo neste caso é 65536 (ou 2 ^ 16).
Veja, o monitor da porta serial na célula 0 simplesmente exibe um número menor que 255. Nas células 1 e 2, um grande número 789 é armazenado. Neste caso, a célula 1 armazena o fator de estouro 3 e a célula 2 armazena o número 21 ausente (ou seja, 789 = 3 * 256 + 21). Para remontar um grande número, analisado em bytes, existe a função word (): int val = word (hi, low), onde hi e low são os valores dos bytes alto e baixo.
Em todas as outras células que nunca anotamos, os números 255 são armazenados.
Passo 4
Para escrever números de ponto flutuante e strings, use o método EEPROM.put (), e para ler, use EEPROM.get ().
No procedimento setup (), primeiro escrevemos o número de ponto flutuante f. Em seguida, movemos pelo número de células de memória que o tipo float ocupa e escrevemos uma string char com capacidade para 20 células.
No procedimento loop (), leremos todas as células de memória e tentaremos descriptografá-las primeiro como do tipo "float" e, em seguida, como do tipo "char", e enviar o resultado para a porta serial.
Você pode ver que o valor nas células de 0 a 3 foi definido corretamente como um número de ponto flutuante e começando do 4º - como uma string.
Os valores resultantes ovf (estouro) e nan (não um número) indicam que o número não pode ser convertido corretamente em um número de ponto flutuante. Se você souber exatamente que tipo de dados as células de memória estão ocupando, não terá problemas.
Etapa 5
Um recurso muito conveniente é referir-se às células de memória como elementos de um array EEPROM. Neste esboço, no procedimento setup (), primeiro escreveremos os dados nos primeiros 4 bytes e, no procedimento loop (), a cada minuto leremos os dados de todas as células e os enviaremos para a porta serial.