[SOLUCIONADO]como puedo mostrar número float en un display con libreria u8g2lib

buenas tardes a todos

lo primero enhorabuena por mantener este foro tan activo y que de tanta ayuda nos sirve a los que empezamos.
rogaria si me pudierais ayudar con un tema:

tengo un sensor de temperatura DS18B20 y un voltimetro FZ0430 para un proyecto y quiero mostrar sus mediciones en un display, utilizo la libreria u8g2lib porque es la unica que encontre que soportaba el driver y las medidas (128x128)

se que las variables que dan los sensores se muestran en float y hace falta convertirlo a caracter. sigo los pasos que creia que eran adecuados pero no soy capaz de que salgan los valores, simplemente las letras.
utilizo el u8g2.setCursor y el u8g2.print(value) y no hay manera

os posteos aqui el codigo para que me ayudeis a subsanar el error:

#include <U8g2lib.h>

#include <OneWire.h>

#include <DallasTemperature.h>

U8G2_SSD1327_MIDAS_128X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);

OneWire ourWire(6);

DallasTemperature sensor(&ourWire);

int sensorPin = A0;   
int sensorValue = 0;
float value;
float calibracion=0.024;

void setup(void) {
  u8g2.begin();
  Serial.begin(9600);
    sensor.begin(); 
}

/* draw something on the display with the `firstPage()`/`nextPage()` loop*/
void loop(void) {

  
  u8g2.firstPage();
  do {
    u8g2.setFont(u8g2_font_ncenB12_tr);
    u8g2.drawStr(0,25,"T.motor:");
    u8g2.drawStr(0,70,"T.amb:");
    u8g2.drawStr(0,110,"Bateria:");
  } 
while ( u8g2.nextPage() );
  delay(1000);
  
  sensor.requestTemperatures();   //Se envía el comando para leer la temperatura
float temp= sensor.getTempCByIndex(0); //Se obtiene la temperatura en ºC

u8g2.setFont(u8g2_font_ncenB12_tr);
u8g2.setCursor(80,80);
u8g2.print (temp);
delay(1000);                     

sensorValue = analogRead(sensorPin);          // realizar la lectura
float value= fmap(sensorValue, 0, 1023, 0.0, 25.0);   // cambiar escala a 0.0 - 25.0

u8g2.setFont(u8g2_font_ncenB12_tr);
u8g2.setCursor(110,110);
u8g2.print (value);                  
delay(1000);
}
 
// cambio de escala entre floats
float fmap(float x, float in_min, float in_max, float out_min, float out_max)
{
   return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

gracias de antemano por la ayuda porque de aqui solo se puede salir aprendiendo y arduino esta empezando a llamarme mucho la atencion pero tengo mucho que leer aun.
un saludo

Esta es la forma de convertir float a una cadena de caracteres

char* dtostrf(float number, int tamanyo, int decimales, char* buffer);
/*                    |         |             |               \_ buffer donde almacenaremos la cadena
                      |         |             \_ Precisión (nº decimales)
                      |         \_Tamaño del número en carácteres
                      \_ Número a convertir
*/

Un ejemplo usándolo

#include <avr/dtostrf.h>

float i=0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);  //Iniciamos la salida serie
  Serial.println("Iniciando ejemplo");
}

void loop() {
  char* buffn="";  //Cadena donde almacenaremos el número convertido
  dtostrf(i,10,2,buffn); //Llamada a la función
  char buffer[80]=" "; //Buffer de la cadena donde se devuelve todo, número formateado y cadena concatenada
  char* formato="Bucle %s"; //Cadena con la mascara a convertir
  sprintf(buffer, formato, buffn);
  i+=1.01;
  Serial.println(buffer);
  delay(1000);
}

Gracias surbyte

voy a probarlo a ver si lo consigo, un saludo

me ha funcionado perfectamente, muchas gracias de nuevo