Calidad del agua (Arduino)

Hola, tengo un problema con el código, me parece que es en la librería de la LCD me podrían apoyar.
Estoy utilizando los sensores:
Sensor de temperatura (ds18b20)
Sensor de ph (SEN0161)
Sensor de turbidez (SEN0189)
La pantalla LCD con su adaptador

El error que me arroja es el siguiente:
exit status 1
'POSITIVE' was not declared in this scope

Ya intente instalar librerías de LiquidCrystal_I2C-1.1.1 si alguien tiene la librería correcta o bien si el código esta mal me podrían orientar se los agradecería mucho.

El código es el siguiente:

#include <OneWire.h> //Se importan las librerías
#include <DallasTemperature.h>
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <String.h>

#define Pin 2 //Se declara el pin donde se conectará la DATA

OneWire ourWire(Pin); //Se establece el pin declarado como bus para la comunicación OneWire

DallasTemperature sensors(&ourWire); //Se instancia la librería DallasTemperature
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
int ph_pin = A2; //This is the pin number connected to Po

void setup() {
  delay(1000);
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(0, 0);
  sensors.begin(); //Se inician los sensore
}



void loop() {
  sensors.requestTemperatures(); //Prepara el sensor para la lectura

  //Serial.print(sensors.getTempCByIndex(0)); //Se lee e imprime la temperatura en grados Celsius
  float x = sensors.getTempCByIndex(0);
  String  stringOne = "Temp(C):";
  String Three = stringOne  +  String(x);
  lcd.setCursor(0, 0);
  lcd.print("Temp(C):" + String(x));
 

  delay(1000); //Se provoca un lapso de 1 segundo antes de la próxima lectura
  int measure = analogRead(ph_pin);// desde aqui comiensa el codigo del sensor de ph
  double voltage = 5 / 1024.0 * measure; //classica comversion de analogica a digital
  float Po = 7 + ((2.5 - voltage) / 0.18);// variable donde se guarda el valor que arroja el sensor
 delay(1000);
  String  stringone = "PH:";// se crea una variable ph para luego hacer una cncatenacion 
 // String four = stringone  +  String(Po);
  lcd.setCursor(0, 1);
  lcd.print(String("PH:") + String(Po));//se imprime el valor del ph x el la pantalla lcd
  int sensorValue = analogRead(A0);// read the input on analog pin 0:  double voltage = sensorValue * (5.0 / 1024.0); // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
  double voltage2 = sensorValue * (5.0 / 1024.0);
  lcd.setCursor(9, 1);
  lcd.print(String("TV:") + String(voltage2));
  Serial.print(String("PH:") + String(Po));// se imprime el valor del ph x el serial
  Serial.print("Temp(C):" + String(x));
 Serial.println(String("TV:") + String(voltage2));
 
}

Por favor edita tu post y muestra el código de acuerdo a las Normas del foro.

Explica cuál es el problema porque "tengo un problema con el código" no nos es de mucha ayuda para poder orientarte.

Saludos

1 Like

¿Puedes editar tu post, seleccionar todo el código y pulsar </> en la barra del editor, por favor?

Tu error es que defines mal el display (creo que haz hecho una mezcla entre I2C y paralelo).

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

Está mal

Lo correcto es

LiquidCrystal_I2C lcd(0x27, columnas, filas);

Reemplaza columnas y filas por las que tiene tu display.
Por ejemplo para un 16x2 (o 1602), reemplaza por 16 y 2, respectivamente.

Saludos

1 Like

Y en el setup en lugar de

lcd.begin(16, 2);

Pon

lcd.init();

y borra los

#include <LCD.h> 
#include <LiquidCrystal.h>

Que no te sirven ya para nada.
Saludos.

1 Like

Hola.
0 @josemiguelg no está mal.
Quizás no estés usando la biblioteca correcta.

Correcta : GitHub - cyberang3l/NewLiquidCrystal: A fork of the NewLiquidCrystal library from bitbucket, because I want to use it a submodule on my project

Esta biblioteca acepta este formato de creación de instancias.
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

Me gusta y uso mucho esta biblioteca en mis proyectos.
Los números entre paréntesis "()" no son los pines arduino sino los pines de salida del chip PCF8574.

RV mineirin

1 Like

Ok, pero vos elegís la biblioteca en función de como ingresas los parámetros o ingresas los parámetros según los requiere la librería?

El usó LiquidCrystal_I2C y LiquidCrystal_I2C se inicializa con 3 a lo sumo 4 parámetros (porque el 4to. está definido por defecto).

Saludos

1 Like

Hola @gatul .
Tengo otros LCD com pines diferentes y, por lo tanto, necesito cambiar el orden de los pines de salida de PCF8574 a LCD, y esta biblioteca me permite esta modificación a través de un sketch.

RV mineirin

1 Like

Y el adatador es ESTE no conozco otro
Luego debe usar la libreria LiquidCrystal_I2C.h tal como dice @gatul y yo y olvidarse de los pines de la pantalla sin el modulo.
Saludos.

1 Like

Es que yo le entiendo su punto (y la librería que alude también soporta I2C), pero es como que alguien cuente que cargó diesel en X auto y ahora no le funciona, otro le diga que cargó el combustible equivocado porque ese auto usa nafta no diesel y aparezca un tercero que dice que está bien que haya cargado diesel y que lo que está equivocado es el auto que usa!
:crazy_face:

Es una broma @ruilviana no se me enoje.

Saludos

1 Like

Hola @gatul .
Mi edad me dio la gran ventaja de haber aprendido a no enojarme con nadie.

Como tengo diferentes tipos de LCD y diferentes módulos PCF4857,
Tengo la libertad de elegir qué combinación de pines y usar esta biblioteca cuando hago un nuevo proyecto con arrduino / ESPxxx.

Ah, un detalle de que mi coche funciona con alcohol.

RV mineirin

1 Like

Seguramente sos de Brasil.
El mío funciona a GNC.

Pero como no tiene nada que ver con el tema y antes que pase @Surbyte a poner orden, mejor lo dejamos aquí. :wink:

Saludos

1 Like

Hola @gatul
Bien, terminemos aquí, después de todo, como dicen mis nietos,
El abuelo siempre tiene razón. :laughing:
RV mineirin
:face_with_monocle: :sweat_smile: :sweat_smile: :sweat_smile:. :+1:

1 Like

Le voy a tener que decir a mi hijo y mi nuera que le pongan un poco más de onda al asunto de los nietos, sino no te puedo contradecir.
Jajaja

Saludos

1 Like

Es un placer hablar con el Sr.

saludos

RV mineirin

1 Like