Zum einen stimme ich micheal_x zu, dass Wire.onRequest() im setup aufgerufen werden müsste, damit das funktionieren könnte.
Weshalb gibst Du dem I2C Master eine Adresse?
Wire.begin(4);
Wie kommst Du auf die Idee, dass Du 11 Bytes abfragen musst, damit 2 floats übertragen werden? 5.5 Bytes pro float oder wie soll das gehen:
Wire.requestFrom(5,11);
Ansonsten ist das I2C_Anything.h nur ein kurzes Header-File:
// Written by Nick Gammon
// May 2012
#include <Arduino.h>
#include <Wire.h>
template <typename T> int I2C_writeAnything (const T& value)
{
const byte * p = (const byte*) &value;
unsigned int i;
for (i = 0; i < sizeof value; i++)
Wire.write(*p++);
return i;
} // end of I2C_writeAnything
template <typename T> int I2C_readAnything(T& value)
{
byte * p = (byte*) &value;
unsigned int i;
for (i = 0; i < sizeof value; i++)
*p++ = Wire.read();
return i;
} // end of I2C_readAnything