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