Go Down

Topic: error al leer datos a traves de lcd [SOLUCIONADO] (Read 507 times) previous topic - next topic

bikford

Jan 18, 2017, 11:58 am Last Edit: Jan 19, 2017, 03:21 pm by surbyte Reason: Código sin tags.
Hola y gracias de antemano, soy bastante novato y lo que me pasa es que e conectado un sensor de humedad de suelo al arduino todo perfecto cuando leo el valor analogico a traves de monitor serie va perfecto pero el problema me viene al pasarlo al lcd conectado a traves de i2c si el valor es 1024 lo lee perfecto pero si el valor a leer es por ejemplo 463 me pone 46325 como si me añadiese mas numeros en cambio por monitor serie lo lee correctamente.
paso codigo, va tambien con un sensor de humedad y temperatura de ambiente.

Code: [Select]

#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x03f,16,2);  



//sensor humitat

//Constants
#define DHTPIN 9     // what pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302)
DHT dht(DHTPIN, DHTTYPE); //// Initialize DHT sensor for normal 16mhz Arduino


//Variables
int chk;
float hum;  //Stores humidity value
float temp; //Stores temperature value

void setup()
{
   Serial.begin(9600);
   lcd.init();
   lcd.backlight();
   dht.begin();



}

void loop()
{
   //Read data and store it to variables hum and temp
   hum = dht.readHumidity();
   temp= dht.readTemperature();
   //Print temp and humidity values to serial monitor
   lcd.setCursor(0,0);
   lcd.print("H: ");
   lcd.print(hum);
   lcd.print("%");
   lcd.setCursor(8,0);
   lcd.print("T: ");
   lcd.print(temp);
   lcd.print(" C");
   delay(2000);
  
   Serial.print("hm");
   Serial.println(hum);
   Serial.print("temp");
   Serial.println(temp);
  
   int humedadSuelo = analogRead(A3);
   lcd.setCursor(12,1);
   lcd.print(humedadSuelo);
   Serial.println(humedadSuelo);  
}



surbyte

Simplemente no limpias el lcd y solo muestra el valor anterior.

cuando imprimes esto
Code: [Select]
   lcd.setCursor(12,1);
   lcd.print(humedadSuelo);
   Serial.println(humedadSuelo);

puedes usar previamente lcd.clear(); pero puede provocar que la pantalla parpadee.
o usas esto
Code: [Select]
   lcd.setCursor(12,1);
   lcd.print("                "); // 16 espacios
   lcd.print(humedadSuelo);
   Serial.println(humedadSuelo);


Otro recurso mas simple sería

Code: [Select]
void loop()
{
   //Read data and store it to variables hum and temp
   hum = dht.readHumidity();
   temp= dht.readTemperature();

   //Print temp and humidity values to serial monitor   lcd.clear();
   lcd.print("H: ");
   lcd.print(hum);
   lcd.print("%");
   lcd.setCursor(8,0);
   lcd.print("T: ");
   lcd.print(temp);
   lcd.print(" C");
   delay(2000);

... y sigue

bikford


Go Up