Arduino, gravando e lendo eeprom, numero INT


Galera!

procurei na net e demorei a encontrar, quando encontrei modifiquei conforme precisava e consegui satisfazer as minhas necessidades.

Então, eu precisava gravar um numero inteiro na EEPROM do arduino porém a eeprom grava apenas números de 0 a 255 ou seja um numero inteiro com valor de 12345 por exemplo, não cabe em apenas um endereço portanto devemos quebrar o numero em dois e salvar cada parte em um endereço.

GRAVAÇÃO

1º - vamos quebrar a primeira parte do numero dividindo-o por 256.

int numero = 12345;
int parte1 = numero / 256;  //parte1 um vai receber apenas a parte inteira, ou seja, 48

2º - vamos pegar a segunda parte do numero (ou o resto) com o operador % (mod)

int parte2 = numero % 256;  //parte2 vai receber apenas o resto da divisão, ou seja, 57

3º - agora podemos gravar cada parte em um endereço pois são menores que 255

// EEPROM.write(endereço,valor)
EEPROM.write(0,parte1);  
EEPROM.write(1,parte2);  

LEITURA

A leitura é bem mais simples, consiste em pegar as duas partes da eeprom e juntar.

//EEPROM.read(endereço)
int parte1 = EEPROM.read(0);   // joga o que esta no endereço 0 da eeprom para parte1
int parte2 = EEPROM.read(1);   // joga o que esta no endereço 1 da eeprom para parte2

int valorOriginal = ((parte1 * 256) + parte2);


EXEMPLO DE PROGRAMA

/*
Neste programa foi criado duas funçoes, uma para escrever e outra para ler a eeprom

void escreveEEPROM(valor, endereço1 , endereço2);
int leituraEEPROM(endereço1,endereço2);
*/

#include"EEPROM.h"

unsigned int valorEscrito = 12345;
unsigned int valorLido = 0;

void setup(){
  Serial.begin(9600);
  Serial.print("Inicio");

  escreveEEPROM(valorEscrito,0,1);
  valorLido = leituraEEPROM(0,1);
}

void loop(){
}

void escreveEEPROM(unsigned int numero,int end1,int end2){

  unsigned int parte1 = (numero/256); 
  unsigned int parte2 = (numero%256);

  Serial.print("Parte1: ");
  Serial.println(parte1);
  Serial.print("Parte2: ");
  Serial.println(parte2);

  EEPROM.write(end1,parte1);
  EEPROM.write(end2,parte2);  
}

int leituraEEPROM(int end1,int end2){

  unsigned int parte1 = EEPROM.read(end1);
  unsigned int parte2 = EEPROM.read(end2);

  unsigned int valorOriginal = (parte1 * 256) + parte2;

  Serial.print("Valor Original: ");
  Serial.println(valorOriginal);

  return valorOriginal; 
}


Comentários

Postagens mais visitadas deste blog