boa noitegalera, estou tendo um problema com a eeprom externa, estou salvando um valor de uma varial tipo float, mais quando vou ler o valor nao consigo ler as casa depois do ponto, por exemplo 27.5 so consigo ler 27.
Sera que é por causa do valor do endereço??, se for, como poderia fazer para ler o primeiro endereço e o segundo, e depois posso apenas fazer uma soma dos 2 valores?
Valeu
Esqueci de mencionar que estou usando o codigo do cookbook da biblioteca Wire.h com algumas modificaçoes para realizar o que eu preciso
sem ver o código é impossível de ajudar.
variavel
double temp_float ;
leirura
temp_float = I2CEEPROM_Read(temperatura);
endereço
const byte temperatura = 0x51;
função para ler da eeprom
byte I2CEEPROM_Read(unsigned int address ){
byte data;
Wire.beginTransmission(EEPROM_ID);
Wire.send((int)highByte(address) );
Wire.send((int)lowByte(address) );
Wire.endTransmission();
Wire.requestFrom(EEPROM_ID,(byte)1);
while(Wire.available() == 0) // wait for data
;
data = Wire.receive();
return data;
}
função para escrever
void I2CEEPROM_Write( unsigned int address, byte data ){
Wire.beginTransmission(EEPROM_ID);
Wire.send((int)highByte(address) );
Wire.send((int)lowByte(address) );
Wire.send(data);
Wire.endTransmission();
delay(5); // wait for the I2C EEPROM to complete the write cycle
}
escrevendo na eeprom
I2CEEPROM_Write( temperatura, temp_float );
a função i2ceeprom_read retorna um byte... daí não ter a vírgula.
no entanto, a função de write, faz o mesmo.
tens de decompor a variavel double em 4 bytes, para fazer o que queres.
e como posso fazer para decompor??
dá uma vista de olhos aqui:
http://arduino.cc/forum/index.php/topic,41497.0.html
Tem lá isto:
void EEPROM_writeDouble(int ee, double value)
{
byte* p = (byte*)(void*)&value;
for (int i = 0; i < sizeof(value); i++)
EEPROM.write(ee++, *p++);
}
double EEPROM_readDouble(int ee)
{
double value = 0.0;
byte* p = (byte*)(void*)&value;
for (int i = 0; i < sizeof(value); i++)
*p++ = EEPROM.read(ee++);
return value;
}