/*
Forum: https://forum.arduino.cc/t/simultaneous-while-loops/1157056/15
Wokwi: https://wokwi.com/projects/372695449762438145
*/
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 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() {
pHVal = pHMath();
pressureVal = pressureMath();
temperatureVal = temperatureMath();
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);
}
}
float pHAverage() {
float pail;
float promedio;
for (int h = 1; h <= n; h++) {
pHReading[h] = analogRead(pHAnalogPin);
delay(12);
}
pail = 0;
for (int h = 1; h <= n; h++) {
pail = pail + pHReading[h];
}
promedio = pail / n;
return promedio;
}
float pressureAverage() {
float pail;
float promedio;
for (int p = 1; p <= n; p++) {
pressureReading[p] = analogRead(pressureAnalogPin);
delay(12);
}
pail = 0;
for (int p = 1; p <= n; p++) {
pail = pail + pressureReading[p];
}
promedio = pail / n;
return promedio;
}
float temperatureAverage() {
float pail;
float promedio;
for (int t = 1; t <= n; t++) {
temperatureReading[t] = analogRead(temperatureAnalogPin);
delay(12);
}
pail = 0;
for (int t = 1; t <= n; t++) {
pail = pail + temperatureReading[t];
}
promedio = pail / n;
return promedio;
}
float pHMath() {
float voltcommpH = pHAverage();
float convertpH = ((14. / 1023.) * voltcommpH);
float pHMathd = convertpH + pHCalibration;
return pHMathd;
}
float pressureMath() {
float voltcommPressure = pressureAverage();
float convertPressure = ((100. / 1023.) * voltcommPressure);
float pressureMathd = convertPressure + pressureCalibration;
return pressureMathd;
}
float temperatureMath() {
float voltcommTemperature = temperatureAverage();
double tempK = log(10000.0 * ((1024.0 / voltcommTemperature - 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);
}
}