#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
#define TEMP_PIN 1 // ESP32 pin GPIO 1 connected to DS18B20 sensor's DATA pin
#define PH_PIN 4
#define SALINITAS_PIN 5
#define DO_PIN 6
#define SERVO_ADD_WATER_PIN 14
//#define SERVO_RED_WATER_PIN 35
LiquidCrystal_I2C lcd(0x27,20,4);
Servo servoAddWater;
OneWire oneWire(TEMP_PIN);
DallasTemperature DS18B20(&oneWire);
float tempC;
float Ph;
float salinitas;
float DO;
float tempUpp=32;
float tempLow=27;
float floatMap(float x, float in_min, float in_max, float out_min, float out_max) {
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
void setup() {
Wire.begin(15,8);
lcd.init();
lcd.backlight();
Serial.begin(9600); // initialize serial
DS18B20.begin(); // initialize the DS18B20 sensor
//Serial.println("Temperature ~ Ph ~ Salinitas ~ DO");
servoAddWater.attach(SERVO_ADD_WATER_PIN);
servoAddWater.write(0);
}
void loop() {
DS18B20.requestTemperatures(); // send the command to get temperatures
tempC = DS18B20.getTempCByIndex(0); // read temperature in °C
//tempF = tempC * 9 / 5 + 32; // convert °C to °F
int analogPh = analogRead(PH_PIN);
int analogSalinitas = analogRead(SALINITAS_PIN);
int analogDO = analogRead(DO_PIN);
Ph = floatMap (analogPh, 0, 4095, 0, 14);
salinitas = floatMap (analogSalinitas, 0, 4095, 0, 50);
DO = floatMap (analogDO, 0, 4095, 0, 40);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("t:");
lcd.print(tempC,2);
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("pH:");
lcd.print(Ph);
lcd.setCursor(0,2);
lcd.print("salt.:");
lcd.print(salinitas,2);
lcd.print(" ppt");
lcd.setCursor(0,3);
lcd.print("DO:");
lcd.print(DO,2);
lcd.print(" mg/L");
if(tempC>tempUpp){
servoAddWater.write(90);
};
delay(500);
}