Convertire float in bit per i2c

Ciao a tutti,

Non riesco a trovare un esempio abbastanza semplice perché lo possa utilizzare…

ho bisogno di convertire una variabile float chiamata “temperature” in bit per poter spedirla dallo slave al master, e nel master riconvertire da bit a float.

Qualcuno potrebbe gentilmente aiutarmi? Sono due giorni che provo ma non combino niente :frowning:

Posto qui sotto il mio sketch ma non funziona perché la “temperature” è float e non posso mandare float via i2c…

#include <OneWire.h> 
#include <Wire.h>

int DS18B20_Pin = 4;          //DS18B20 Signal pin on digital 4

                              //Temperature chip i/o
OneWire ds(DS18B20_Pin);      // on digital pin 4

float temperature = getTemp();

void setup(void) {
 Serial.begin(9600); 
 Wire.begin();                //join i2c bus
}

void loop(void) {

  Wire.beginTransmission(1);  //transmit to device #1
  Wire.write(temperature);
  Wire.endTransmission();
  
 Serial.print("temperature ");
 Serial.print(temperature);
 Serial.println(" c");
 
 delay(1000);                 //just here to slow down the output so it is easier to read
 
}



float getTemp(){
 //returns the temperature from one DS18S20 in DEG Celsius

 byte data[12];
 byte addr[8];

 if ( !ds.search(addr)) {
   //no more sensors on chain, reset search
   ds.reset_search();
   return -10;
 }

 if ( OneWire::crc8( addr, 7) != addr[7]) {
   Serial.println("CRC is not valid!");
   return -100;
 }

 if ( addr[0] != 0x10 && addr[0] != 0x28) {
   Serial.print("Device is not recognized");
   return -1000;
 }

 ds.reset();
 ds.select(addr);
 ds.write(0x44,1); // start conversion, with parasite power on at the end

 byte present = ds.reset();
 ds.select(addr);  
 ds.write(0xBE); // Read Scratchpad

 
 for (int i = 0; i < 9; i++) { // we need 9 bytes
  data[i] = ds.read();
 }
 
 ds.reset_search();
 
 byte MSB = data[1];
 byte LSB = data[0];

 float tempRead = ((MSB << 8) | LSB); //using two's compliment
 float TemperatureSum = tempRead / 16;
 
 return TemperatureSum;
 
}

Imposti MSB e LSB come variabili globali, le spedisci via I2C MSB e LSB e fai la conversione il float sul master.

Altrimenti ti crei due variabili ByteH e ByteL, scindi il float, lo spedisci e lo riassembli dall'altra parte. Per scindere il float puoi usare una union.

Grazie Paolo, Purtroppo sono allo stesso punto di prima perché avevo capito cosa usare per farlo, ma non ho capito come farlo :(

Non sono molto pratico della programmazione