/*
Forum: https://forum.arduino.cc/t/simultaneous-while-loops/1157056/15
Wokwi: https://wokwi.com/projects/372695498851525633
*/
int pHLowPin = 2;
int pHHighPin = 3;
int pressureLowPin = 4;
int pressureHighPin = 5;
int temperatureLowPin = 6;
int temperatureHighPin = 7;
int pHAnalogPin = A0;
int pressureAnalogPin = A1;
int temperatureAnalogPin = A2;
float pHVal;
float pressureVal;
float temperatureVal;
float pHAverage;
float pressureAverage;
float temperatureAverage;
float pHCalibration = 0.112;
float pressureCalibration = 0.00;
float temperatureCalibration = 0.00;
char n = 15;
float h;
float p;
float t;
float pHReading[15];
float pressureReading[15];
float temperatureReading[15];
void setup() {
Serial.begin(9600);
pinMode(pHAnalogPin, INPUT);
pinMode(pressureAnalogPin, INPUT);
pinMode(temperatureAnalogPin, INPUT);
pinMode(pHLowPin, OUTPUT);
pinMode(pHHighPin, OUTPUT);
pinMode(pressureLowPin, OUTPUT);
pinMode(pressureHighPin, OUTPUT);
pinMode(temperatureLowPin, OUTPUT);
pinMode(temperatureHighPin, OUTPUT);
}
void loop() {
doMeasurements();
imprimir();
if (pHVal < 5) {
digitalWrite(pHLowPin, HIGH);
} else {
digitalWrite(pHLowPin, LOW);
}
if (pHVal > 9) {
digitalWrite(pHHighPin, HIGH);
} else {
digitalWrite(pHHighPin, LOW);
}
if (pressureVal < 30) {
digitalWrite(pressureLowPin, HIGH);
} else {
digitalWrite(pressureLowPin, LOW);
}
if (pressureVal > 70) {
digitalWrite(pressureHighPin, HIGH);
} else {
digitalWrite(pressureHighPin, LOW);
}
if (temperatureVal < 100) {
digitalWrite(temperatureLowPin, HIGH);
} else {
digitalWrite(temperatureLowPin, LOW);
}
if (temperatureVal > 150) {
digitalWrite(temperatureHighPin, HIGH);
} else {
digitalWrite(temperatureHighPin, LOW);
}
}
void doMeasurements() {
float pail;
float promedio;
for (int h = 1; h <= n; h++) {
pHReading[h] = analogRead(pHAnalogPin);
pressureReading[h] = analogRead(pressureAnalogPin);
temperatureReading[h] = analogRead(temperatureAnalogPin);
delay(12);
}
float pailpH = 0;
float pailPr = 0;
float pailTmp = 0;
for (int h = 1; h <= n; h++) {
pailpH = pailpH + pHReading[h];
pailPr = pailPr + pressureReading[h];
pailTmp = pailTmp + temperatureReading[h];
}
pHAverage = pailpH / n;
pressureAverage = pailPr / n;
temperatureAverage = pailTmp / n;
pHVal = pHMath();
pressureVal = pressureMath();
temperatureVal = temperatureMath();
}
float pHMath() {
float convertpH = ((14. / 1023.) * pHAverage);
float pHMathd = convertpH + pHCalibration;
return pHMathd;
}
float pressureMath() {
float convertPressure = ((100. / 1023.) * pressureAverage);
float pressureMathd = convertPressure + pressureCalibration;
return pressureMathd;
}
float temperatureMath() {
double tempK = log(10000.0 * ((1024.0 / temperatureAverage - 1)));
tempK = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * tempK * tempK ))
* tempK );
float tempC = tempK - 273.15;
float tempF = (tempC * 9.0) / 5.0 + 32.0;
float convertTemperature = tempF;
float temperatureMathd = convertTemperature + temperatureCalibration;
return temperatureMathd;
}
void imprimir() {
static unsigned long lastPrintTime = 0;
if (millis() - lastPrintTime >= 250) {
lastPrintTime = millis();
Serial.print("pH = ");
Serial.print(pHVal);
Serial.print(". Pressure = ");
Serial.print(pressureVal);
Serial.print(". Temperature = ");
Serial.println(temperatureVal);
}
}