Arduino, gravando e lendo eeprom, numero INT
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;
}
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
Postar um comentário