problema al visualizar valor en tft

hola a todos, estoy construyendome un una pantalla personalizada para un coche.
el material que estoy usando es:

-tft kmr-1.8 spi
-sensor bmp 180
-sensor de presion MPX4250AP MAP
-arduino uno
-librerias:
Adafruit_GFX.h
Adafruit_ST7735.h
Adafruit_TFTLCD.h
SPI.h
SPI.h
SFE_BMP180.h
Wire.h

el codigo que estoy usando funciona casi perfecto,mi problema es que el valor que visualizo es presion o vacio, y al mostrar vacio, se convierte a negativo.hasta aqui bien, para mostrar el valor negativo se desplaza a la derecha, y al volver a positivo recupera su posicion inicial, pero con un decimal mas,osea 2 decimales.yo tengo escrito que solo saque un decimal,y asi lo hacia en el comienzo del proyecto en lcd, pero al pasar a tft me he encontrado con este cambio que me gustaria solucionar.
os muestro el codigo que actualmente tengo funcionando, muchas gracias de antemano

#include <Adafruit_GFX.h>    
#include <Adafruit_ST7735.h> 
#include <Adafruit_TFTLCD.h> // Hardware-specific library
#include <SPI.h>
#include <SPI.h>
#include <SFE_BMP180.h>
#include <Wire.h>
//Se declara una instancia de la librería
SFE_BMP180 pressure;
//Se declaran las variables. Es necesario tomar en cuenta una presión inicial
//esta será la presión que se tome en cuenta en el cálculo de la diferencia de altura
double PresionBase;
//Leeremos presión y temperatura. Calcularemos la diferencia de altura
double Presion = 0;
double Altura = 0;
double Temperatura = 0;
char status;
int SensorPort = 0; // Set MAP sensor input on Analog port 0
double SensorValue = 0; //Save Sensor input Voltage
float Resultpsi = 0; // Save Result in psi
float ResultBar = 0; // Save Result in Bar

#define TFT_CS     10
#define TFT_RST    8  
#define TFT_DC     9

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS,  TFT_DC, TFT_RST);

 

void setup(void) {
  tft.initR(INITR_BLACKTAB);  // You will need to do this in every sketch
  tft.fillScreen(ST7735_WHITE); 
  tft.setRotation(1);

  //tft print function!
  tft.setTextColor(ST7735_BLACK);
  tft.setTextSize(1);
  tft.setCursor(5,25);
  tft.println("PRES. TURBO"); 
  tft.setTextColor(ST7735_BLACK);
  tft.setCursor(120,25);
  tft.println("bar");  
  delay(1000);


  
  delay(1000);
   //Se inicia el sensor y se hace una lectura inicial
  SensorStart();

  
}

void loop() {
    
     
     //Se hace lectura del sensor
ReadSensor();

delay(200);

}
void SensorStart() {
//Secuencia de inicio del sensor
if (pressure.begin())
Serial.println("BMP180 init success");
else
{
Serial.println("BMP180 init fail (disconnected?)\n\n");
while (1);
}
//Se inicia la lectura de temperatura
status = pressure.startTemperature();
if (status != 0)  {
delay(status);
//Se lee una temperatura inicial
status = pressure.getTemperature(Temperatura);
if (status != 0)    {
//Se inicia la lectura de presiones
status = pressure.startPressure(3);
if (status != 0)     
{
delay(status);
//Se lee la presión inicial incidente sobre el sensor en la primera ejecución
status = pressure.getPressure(PresionBase, Temperatura);
}
}
}
}
void ReadSensor() {
//En este método se hacen las lecturas de presión y temperatura y se calcula la altura
//Se inicia la lectura de temperatura
status = pressure.startTemperature();
if (status != 0)
{
delay(status);
//Se realiza la lectura de temperatura
status = pressure.getTemperature(Temperatura);
if (status != 0)
{
//Se inicia la lectura de presión
status = pressure.startPressure(3);
if (status != 0)
{
delay(status);
//Se lleva a cabo la lectura de presión,</span>
//considerando la temperatura que afecta el desempeño del sensor</span>
status = pressure.getPressure(Presion, Temperatura);
if (status != 0)


    SensorValue = analogRead(SensorPort);
    Resultpsi = (((SensorValue/1023+0.04)/.004)*.145);
    ResultBar = (Resultpsi*0.0689476) -((Presion)/1000) ;


  tft.setTextColor(ST7735_BLACK,ST7735_WHITE);
  tft.setTextSize(1);
  tft.setCursor(90,25);
  tft.print(ResultBar,1); 
  
  

   
    
     
    
 
  
  
 
  
  
 
  
{
}
}
}
}
  
  }

Estudia la funcion sprintf y resolverá tus problemas. Si estas usando un ESP8266 no tendras problema usando printf pero con Arduino debes convertir los float a string. siendo cuidadoso podrás resolver el problema.

No te dejes llevar por todo lo que hace sprintf con microcontroladores que no tienen limitaciones. Arduino las tiene con los valores float y double.

surbyte:
Estudia la funcion sprintf y resolverá tus problemas. Si estas usando un ESP8266 no tendras problema usando printf pero con Arduino debes convertir los float a string. siendo cuidadoso podrás resolver el problema.

No te dejes llevar por todo lo que hace sprintf con microcontroladores que no tienen limitaciones. Arduino las tiene con los valores float y double.

hola, gracias por tu respuesta, voy a probar lo que me comentas.he encontrado esto en el foro,crees que puede servirme?. un saludo y muchas gracias

// pruebaFloat.ino

String floatToString( float,int=8,int=2,boolean=true);

void setup() {

  float n = 0.5;

  Serial.begin(115200);
  Serial.println( floatToString(n,6) );

}

void loop() {

}

// Convierte un float en una cadena.
// n -> número a convertir.
// l -> longitud total de la cadena, por defecto 8.
// d -> decimales, por defecto 2.
// z -> si se desea rellenar con ceros a la izquierda, por defecto true.
String floatToString( float n, int l, int d, boolean z){
	char c[l+1];
	String s;

	dtostrf(n,l,d,c);
	s=String(c);

	if(z){
		s.replace(" ","0");
	}

	return s;
}

Lo que debes usar es esto

Solución final a la conversión de números a cadenas en Arduino

Ejemplo

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);
}