This mucking around with casts and arrays is far too complex.
See: Reading and Writing Data Structures to EEPROM
The library EEPROMAnything.h will accomplish this.
EEPROMAnything.h
The library just consists of this file. Save into your "libraries" folder under the folder name EEPROMAnything
.
#include <Arduino.h> // for type definitions
#include <EEPROM.h>
template <typename T> unsigned int EEPROM_writeAnything (int ee, const T& value)
{
const byte* p = (const byte*)&value;
unsigned int i;
for (i = 0; i < sizeof(value); i++)
EEPROM.write(ee++, *p++);
return i;
}
template <typename T> unsigned int EEPROM_readAnything (int ee, T& value)
{
byte* p = (byte*)&value;
unsigned int i;
for (i = 0; i < sizeof(value); i++)
*p++ = EEPROM.read(ee++);
return i;
}
Example code
#include <EEPROM.h>
#include <EEPROMAnything.h>
void setup ()
{
Serial.begin (115200);
Serial.println ();
float foo = 56060066;
EEPROM_writeAnything (0, foo);
float bar;
EEPROM_readAnything (0, bar);
Serial.println (bar);
} // end of setup
void loop ()
{
} // end of loop
Output from above
56060064.00
Note you don't get exactly the same number back. This is because of the precision of 4-bytes floats.
After re-reading the question I see you are using I2C EEPROM. That changes the answer a bit, but you can see an adaptation of that library for I2C here. The general idea is the same though.
i2c_eeprom_write_byte(0x57, addr, myFloat.bytes[i]); // Write byte to EEPROM
Your code seems to be writing all of the bytes to the same address, I don't know how that could work.