Lectura de un sensor analogico

Hola amigos, soy nuevo, y durante estos últimos meses me he involucrado es este mundo de arduino, he realizado un proyecto que describo a continuación: se trata de la lectura de un sensor analogico (presion) de 0.5 a 4.5V y su rango maximo varia de 0 a 300psi. ademas incluyo un pulsador sin retencion que cambia la unidad de medicion de 0 a 300psi pasando a 0 a 20.7 bar. El boceto que presento compila y sube correctamente; pero al mostrasrse en un display 20x4 no actua correctamente mostrando la lectura intercalandose intermitente una con la otra (titila ambas lecturas)
Acudo a su experiancia para que puedan echarle un vistazo. saludos cordiales

#include <Wire.h>
#include <LiquidCrystal_I2C.h> // libreria para que funcione el display 20X4
LiquidCrystal_I2C lcd (0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // encuentran conectados RS, E, D4, D5, D6, D7

int ibut = 10 ;     // 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() {                                // encender el LDC 20x4
   Wire.begin();
   lcd.begin (20,4) ;
   lcd.backlight();                    // terminar con luz de fondo encendida    
   lcd.clear();
   pinMode(ibut, INPUT);  // En el PIN 10 entra la medida del circuito del buton abrimos como lNPUT
   delayMicroseconds(50);
}

void loop() {
   if(leerBoton(ibut)== 1){
   if(vista == 1){
     vista++;
     lcd.clear();
     }
     else if (vista == 2){
       vista--;}
       lcd.clear();
   }

 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, 300);                           // Funcion map () entre 0.5 a 4.5V con 0 a 300 psi (lectura de entrada analogica A0) 
 SUMA = PRESION + SUMA;      // suma de cada lectura de presion
 delay(100);         // demora de medio seg. entre lecturas
 }
 lcd.setCursor(0, 0);        // cursor en primer fila y primer columna
 lcd.print("Pres: ");        // escribe Pres:
 lcd.print(SUMA/5.0, 1);     // escribe valor promedio de 5 lecturas con un decimal
 lcd.setCursor(13, 0);        // cursor en primer fila y primer columna
 lcd.print(" psi ");        // imprime psi
 break; 

case 2:
  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(0, 0);        // cursor en primer fila y primer columna
 lcd.print("Pres: ");        // escribe Pres:
 lcd.print(SUMA/5.0, 1);     // escribe valor promedio de 5 lecturas con un decimal
 lcd.setCursor(13, 0);        // cursor en primer fila y primer columna
 lcd.print(" bar ");        // imprime psi
 default :
 break;
   }
}
int leerBoton(int boton){
 boton = digitalRead(ibut);
 delay(200);
 return boton;
 }

Adjunto esquema y datasheet del sensor

Hola, como sugerencia, debes de postear tu código de manera correcta, así como en esta respuesta (a mi no me incomoda pero son las normas del foro).

El detalle lo tienes en el if donde intercambias el valor de la variable vista.

Generalmente cuando uso menús, para que se mantenga en el menú que deseo y solo cambie cuando presione un botón, lo hago dentro de cada caso, aquí las modificaciones:

#include <Wire.h>
#include <LiquidCrystal_I2C.h> // libreria para que funcione el display 20X4
LiquidCrystal_I2C lcd (0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // encuentran conectados RS, E, D4, D5, D6, D7

int ibut = 10 ;     // 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() {                                // encender el LDC 20x4
    Wire.begin();
    lcd.begin (20,4) ;
    lcd.backlight();                    // terminar con luz de fondo encendida   
    lcd.clear();
    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, 300);                           // Funcion map () entre 0.5 a 4.5V con 0 a 300 psi (lectura de entrada analogica A0)
  SUMA = PRESION + SUMA;      // suma de cada lectura de presion
  delay(100);         // demora de medio seg. entre lecturas
  }
  lcd.setCursor(0, 0);        // cursor en primer fila y primer columna
  lcd.print("Pres: ");        // escribe Pres:
  lcd.print(SUMA/5.0, 1);     // escribe valor promedio de 5 lecturas con un decimal
  lcd.setCursor(13, 0);        // cursor en primer fila y primer columna
  lcd.print(" psi ");        // imprime psi

  if ( digitalRead(ibut) == HIGH ) {
            lcd.clear();
            vista = 2;
            delay(200);      
 
          }

  break;
 
 case 2:
   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(0, 0);        // cursor en primer fila y primer columna
  lcd.print("Pres: ");        // escribe Pres:
  lcd.print(SUMA/5.0, 1);     // escribe valor promedio de 5 lecturas con un decimal
  lcd.setCursor(13, 0);        // cursor en primer fila y primer columna
  lcd.print(" bar ");        // imprime psi

  if ( digitalRead(ibut) == HIGH ) {
            lcd.clear();
            vista = 1;
            delay(200);      
 
          }

  break;
    }

}

Doble posteo, hilo cerrado.

Sigue acá problema con Lectura de un sensor analógico