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