Manipulação de EEPROM

Todos os modelos Arduíno (pelo menos os que eu conheço) possuem uma EEPROM (Electrically Erasable Programmable Read-Only Memory).  O modelo UNO possui uma memória de 1k Byte EEPROM que pode ser usada pelos programadores em aplicações onde valores aferidos por sensores ou outros dispositivos precisam ficar armazenadas de maneira não volátil e por longos períodos de tempo. Para facilitar a vida do programador, a  biblioteca EEPROM.h que oferece as seguintes funções como:

    - EEPROM.write()
    - EEPROM.read()
    - EEPROM.update()
    - EEPROM.length()
    - EEPROM.clear

EEPROM.write escreve um byte para um determinado endereço da EEPROM cuja a sintaxe é dada por:

EEPROM.write (endereço, valor);

onde:
      endereço:  local para onde escrever, a partir de 0 ( int )
      valor: o valor a escrever, de 0 a 255 ( byte )

Exemplo:

// neste exemplo iremos gravar os números de 0 a 255 nos endereços de 0 a 255.

#include <EEPROM.h>

void setup()
{
  for (int i = 0; i < 255; i++)
    EEPROM.write(i, i)
}

void loop()
{
}

Observe que a gravação dos dados foi realizada na função setup. Isso foi feito propositalmente pois a memória EEPROM tem uma vida útil especificada de aproximadamente 100.000 ciclos de gravação / exclusão, portanto, talvez seja necessário ter cuidado com a frequência com que você escreve nela, logo evite gravar e apagar a EEPROM dentro da função loop sem uma lógica que controle essas operações.

EEPROM.read  é responsável por ler um byte para um determinado endereço da EEPROM cuja a sintaxe é dada por:

EEPROM.read (endereço);

onde:
      endereço:  local para onde ler, os endereços começam em 0 ( int )


Exemplo:

/* exemplo tirado do site arduino.cc onde os valores de 0 a 512 serão lidos e apresentados na serial */
#include <EEPROM.h>

int a = 0;
int value;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  value = EEPROM.read(a);

  Serial.print(a);
  Serial.print("\t");
  Serial.print(value);
  Serial.println();

  a = a + 1;

  if (a == 512)
    a = 0;

  delay(500);
}

EEPROM.update escreve um byte para a EEPROM. O valor é escrito apenas se diferir do que já foi salvo no mesmo endereço. A sintaxe do update é dada por:

EEPROM.update(endereço, valor);

onde:
      endereço:  local para onde escrever, a partir de 0 ( int )
      valor: o valor a escrever, de 0 a 255 ( byte )

Exemplo:

//exemplo retirado de Arduino.cc
#include <EEPROM.h>

void setup()
{
  for (int i = 0; i < 255; i++) {
    // this performs as EEPROM.write(i, i)
    EEPROM.update(i, i);
  }
  for (int i = 0; i < 255; i++) {
    // write value "12" to cell 3 only the first time
    // will not write the cell the remaining 254 times
    EEPROM.update(3, 12);
  }
}

void loop()
{
}


EEPROM.length esta função devolve um valor contendo o número de células na EEPROM. Nem todos os dispositivos têm o mesmo tamanho de EEPROM, isso pode ser útil para escrever códigos portáveis ​​para diferentes Arduinos. Como não há passagem de paraetros, a sintaxe do comando é dada por:

EEPROM.length();

Exemplo:

/* exemplo tirado do site arduino.cc onde os valores de 0 a o final da memória não importando o tamanho da memória. Os valores lidos são mostrados apresentados na serial */

#include <EEPROM.h>

int a = 0;
int value;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  value = EEPROM.read(a);

  Serial.print(a);
  Serial.print("\t");
  Serial.print(value);
  Serial.println();

  a = a + 1;

  if (a == EEPROM.length())
    a = 0;

  delay(10);
}


Pratique:

Exercício 1 - Faça um programa que se comunique com o usuário através da USB e pergunte se ele quer gravar ou ler uma informação na EEPROM. Quando a opção for ler um dado, o usuário deve digitar o endereço da informação. Quando a opção for gravar um dado, o Arduino deve saber qual é a primeira posição livre da memória para realizar a gravação.

Exercício 2 - Como descrito na teoria acima, um endereço de memória possui só 1 byte que corresponde no máximo ao valor 255 em decimal. Faça um programa onde seja possível gravar e ler um valor maior que 255 na memória da EEPROM.


Para acessar um conteúdo extra sob gravação e leitura de EEPROM clique aqui.

Não esqueça do like do vídeo e de curtir nossa pagina no facebook no link abaixo:

Nenhum comentário:

Postar um comentário