Hola,
He encontrado en el foro italiano otra forma de convertir float o int a byte y viceversa: lo hace utilizando el tipo de dato union del lenguaje C
Para un float se define una union que contiene dos elementos, un float y un array de 4 bytes. Al contenido de esa union (que son 4 bytes) se puede acceder como si se tratara de una variable float, o como si se tratara de un array de 4 bytes. En el ejemplo de abajo se escribe un float en la EEPROM interna, y luego un int. Y se reconstruye el valor de las variables leyendo de la EEPROM.
#include <EEPROM.h>
union Float_Byte
{
float datoF;
byte datoB[4];
} unionFB;
union Integer_Byte
{
int datoI;
byte datoB[2];
} unionIB;
void setup()
{
Serial.begin(9600);
}
void loop()
{
unionFB.datoF = -12.13 ;
Serial.print("\nFloat 1: ") ;
Serial.println(unionFB.datoF);
Serial.print("\nbyte1: "); Serial.print(unionFB.datoB[0], DEC) ; // 123
Serial.print("\nbyte2: "); Serial.print(unionFB.datoB[1], DEC) ; // 20
Serial.print("\nbyte3: "); Serial.print(unionFB.datoB[2], DEC) ; // 66
Serial.print("\nbyte4: "); Serial.print(unionFB.datoB[3], DEC) ; // 193
// guardar un float en la EEPROM en las posiciones 0-3
EEPROM.write(0, unionFB.datoB[0]);
EEPROM.write(1, unionFB.datoB[1]);
EEPROM.write(2, unionFB.datoB[2]);
EEPROM.write(3, unionFB.datoB[3]);
// reconstuir el float leyendo la EEPROM
unionFB.datoF = 0.0 ;
unionFB.datoB[0] = EEPROM.read(0);
unionFB.datoB[1] = EEPROM.read(1);
unionFB.datoB[2] = EEPROM.read(2);
unionFB.datoB[3] = EEPROM.read(3);
Serial.print("\n\nFloat 2: ");
Serial.println(unionFB.datoF);
// guardar un int en las posiciones 4-5 de la EEPROM
unionIB.datoI = -12 ;
Serial.print("\nInt 1: ") ;
Serial.println(unionIB.datoI);
Serial.print("\nbyte1: "); Serial.print(unionIB.datoB[0], DEC) ; // 244
Serial.print("\nbyte2: "); Serial.print(unionIB.datoB[1], DEC) ; // 255
EEPROM.write(4, unionIB.datoB[0]);
EEPROM.write(5, unionIB.datoB[1]);
// reconstuir el int leyendo la EEPROM
unionIB.datoI = 0 ;
unionIB.datoB[0] = EEPROM.read(4);
unionIB.datoB[1] = EEPROM.read(5);
Serial.print("\n\nInt 2: ");
Serial.println(unionIB.datoI);
delay(5555); // para no desperdiciar ciclos
}