Aunque lo de float no se muy bien lo que es, pero lo importanre es que funciona, dejo como a quedado el skech por si a alquien le interesa junto con los esquemas.
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // libreria para que funcione el display 20X4
LiquidCrystal_I2C lcd (0x27, 16, 2); // encuentran conectados RS, E, D4, D5, D6, D7
#include <OneWire.h>
OneWire ds(10);
int ibut = 11 ; // ibut PIN10 de entrada para el control del botón
int tiempo = 1000 ; // Tiempo para dar tiempo a retirar el dedo del botón hasta hacer otra lectura
int estadoboton = 0 ; // Variable para guardar el estado del boton LOW (bajo = 0) o HIGH (alto = 1)
int vista = 1 ; // Primera vez controla lo que se hace únicamente en el primer bucle, luego se le cambia de valor
int SENSOR; // variable almacena valor leido de entrada analogica A0
float PRESION; // valor de presion en en decimales
float SUMA; // valor de la suma de las 5 lecturas de presion
void setup(void) { // encender el LDC 16x2
Serial.begin(9600);
Wire.begin();
lcd.begin (16,2) ;
lcd.backlight(); // terminar con luz de fondo encendida
lcd.clear();
lcd.setCursor(8, 1);
lcd.print("C");
lcd.setCursor(9,1);
lcd.print((char)223);
lcd.setCursor(0, 1);
lcd.print("ACEITE");
lcd.setCursor(10, 1);
lcd.print(":");
pinMode(ibut, INPUT); // En el PIN 10 entra la medida del circuito del buton abrimos como lNPUT
delayMicroseconds(50);
}
void loop() {
switch (vista) {
case 1:
SUMA = 0; // valor inicial de SUMA en cero
for (int i=0; i < 5; i++){ // bucle que repite 5 veces
SENSOR = analogRead(A0); // lectura de entrada analogica A0
PRESION = map(SENSOR, 102, 921, 0, 20.7); // Funcion map () entre 0.5 a 4.5V con 0 a 20.7 psi (lectura de entrada analogica A0)
SUMA = PRESION + SUMA; // suma de cada lectura de presion
delay(200); // demora de medio seg. entre lecturas
}
lcd.setCursor(7, 0); // cursor en primer fila y primer columna
lcd.print("BAR: "); // escribe Pres:
lcd.print(SUMA/5.0, 1); // escribe valor promedio de 5 lecturas con un decimal
lcd.setCursor(0, 0); // cursor en primer fila y primer columna
lcd.print("ACEITE"); // imprime psi
if ( digitalRead(ibut) == HIGH ) {
lcd.clear();
vista = 1;
delay(200);
}
break;
}
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
if(!ds.search(addr)){
ds.reset_search();
delay(250);
return;
}
if(OneWire::crc8(addr, 7) != addr[7]) {
return;
}
switch(addr[0]){
case 0x10:
type_s = 1;
break;
case 0x28:
type_s = 0;
break;
case 0x22:
type_s = 0;
break;
default:
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1);
delay(1000);
present = ds.reset();
ds.select(addr);
ds.write(0xBE);
for( i = 0; i < 9; i++){
data[i] = ds.read();
}
int16_t raw = (data[1] << 8) | data[0];
if(type_s){
raw = raw << 3;
if(data[7] == 0x10) {
raw = (raw & 0xFFF0) + 12 - data[6];
}
}else{
byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw & ~7;
else if (cfg == 0x20) raw = raw & ~3;
else if (cfg == 0x40) raw = raw & ~1;
}
celsius = (float)raw / 16.0;
Serial.println(celsius,1);
lcd.setCursor(12, 1);
lcd.print(celsius,1);
}

