Buenas noches, soy un poco novato en esto de Arduino, hice un circuito para leer 4 variables pero al mostrarlas en el LCD 20x4 y se me borran unos caracteres de forma alternada en la linea 1 y 3 pero aparecen de nuevo como si parpadearan, ya probé con otro LCD, también conectándolo vía I2C y sale lo mismo así que asumo es mi código el que está mal o por desconocimiento estoy obviando algo, como cosa rara en el simulador Proteus no presenta ese problema, de antemano gracias por su ayuda.
ANDRES ALEGRIA
Mi codigo
// ************Programa de control para invernadero **************
#include <LiquidCrystal.h> // includes the LiquidCrystal Library
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7)
const int LuzPin = A0; // seleccionar la entrada para el sensor
int Ilumina; // variable que almacena el valor raw (0 a 100%)
const int HumPin = A1; // seleccionar la entrada para el sensor
int Humed; // variable que almacena el valor raw (0 a 100%)
const int TemPin = A2; // seleccionar la entrada para el sensor
int Tempe; // variable que almacena el valor raw (10 a 80 Grados)
const int TanPin = A3; // seleccionar la entrada para el sensor
int Tanque; // variable que almacena el valor raw (0 a 100%)
int setTanque = 80; // variable que almacena el valor raw (0 a 100%)
int Tempe1;
int Tempe2;
int Tempe3;
int Tempe4;
int Tempe5;
void setup() {
// Inicializar el LCD con el número de columnas y filas del LCD
// Inicializar el LCD
pinMode(10,OUTPUT); // Salida para mover la polisombra
pinMode(11,OUTPUT); // Salida para electrovalvula de riego
pinMode(12,OUTPUT); // Salida para Extractor de aire
pinMode(13,OUTPUT); // Salida para electrovalvula de llenado
lcd.begin(20,4); // Escribimos el Mensaje en el LCD
lcd.clear(); //Borra el LCD
delay(1000);
lcd.print(" UNAD");
lcd.setCursor(0,1);
lcd.print("ADQUISICION DE DATOS");
lcd.setCursor(0,2);
lcd.print(" PASO FINAL ");
lcd.setCursor(0,3);
lcd.print(" Grupo # 203050_6 ");
delay(3000);
lcd.clear(); //Borra el LCD
delay(1000);
//************************************************************
}
void loop() {
Ilumina = analogRead(LuzPin); // realizar la lectura de luz
Ilumina = (Ilumina/10.24); //Ajustamos para solo leer valores entre 0 y 100
lcd.setCursor(0,0);
lcd.print("Ilumin="+String(Ilumina)+"%");
if (Ilumina > 50)
{ digitalWrite(10, HIGH);
lcd.setCursor(12,0);
lcd.print("Poli=On ");
}
else
{ digitalWrite(10, LOW);
lcd.setCursor(12,0);
lcd.print("Poli=Off ");
}
//************************************************************
Humed = analogRead(HumPin); // realizar la lectura de humedad
Humed = (Humed/10.24); //Ajustamos para solo leer valores entre 0 y 100
lcd.setCursor(0,1);
lcd.print("Humeda="+String(Humed)+"%");
if (Humed > 30)
{ digitalWrite(11, HIGH);
lcd.setCursor(12,2);
lcd.print("Riego=On ");
}
else
{ digitalWrite(11, LOW);
lcd.setCursor(12,2);
lcd.print("Riego=Off");
}
//************************************************************
Tempe = analogRead(TemPin); // realizar la lectura de temperatura 1
Tempe1 = Tempe;
delay(100);
Tempe = analogRead(TemPin); // realizar la lectura de temperatura 2
Tempe2 = Tempe;
delay(100);
Tempe = analogRead(TemPin); // realizar la lectura de temperatura 3
Tempe3 = Tempe;
delay(100);
Tempe = analogRead(TemPin); // realizar la lectura de temperatura 4
Tempe4 = Tempe;
delay(100);
Tempe = analogRead(TemPin); // realizar la lectura de temperatura 5
Tempe5 = Tempe;
delay(100);
Tempe = (Tempe1 + Tempe2 + Tempe3 + Tempe4 + Tempe5)/5; //promediar las lecturas
Tempe = (Tempe * 5 * 100.0 / 1024.0); //Ajustamos para obtener valor en grados centigrados.
lcd.setCursor(0,2);
lcd.print("Temper="+String(Tempe)+"%");
if (Tempe > 30)
{ digitalWrite(12, HIGH);
lcd.setCursor(12,1);
lcd.print("Extr=On ");
}
else
{ digitalWrite(12, LOW);
lcd.setCursor(12,1);
lcd.print("Extr=Off ");
}
//************************************************************
Tanque = analogRead(TanPin); // realizar la lectura de llenado del tanque
Tanque = (Tanque/10.24);//Ajustamos para solo leer valores entre 0 y 100
lcd.setCursor(0,3);
lcd.print("tanque="+String(Tanque)+"%");
if (Tanque > setTanque)
{ digitalWrite(13, LOW);
lcd.setCursor(12,3);
lcd.print("Llena=Off ");
setTanque = 80;
}
else
{ digitalWrite(13, HIGH);
lcd.setCursor(12,3);
lcd.print("Llena=On ");
setTanque = 90;
}
delay(500);
}