UPDATED: See end of thread for finished, working code.
I am working on a project that reads pH, pressure, and temperature inputs through analog pins. If those inputs go too low or too high, a while loop is triggered that lights an LED and sustains the light for as long as the threshold continues to be tripped. My problem is once the threshold is tripped and the while loop is entered, none of the other thresholds can be tripped until the while loop ceases to be true. How do I write a code that can trip multiple thresholds based on three different analog inputs?
My code is below:
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();
while(pHVal<5){
digitalWrite(pHLowPin,HIGH);
pHVal=pHMath();
pressureVal=pressureMath();
temperatureVal=temperatureMath();
imprimir();
}
while(pHVal>9){
digitalWrite(pHHighPin,HIGH);
pHVal=pHMath();
pressureVal=pressureMath();
temperatureVal=temperatureMath();
imprimir();
}
while(pressureVal<30){
digitalWrite(pressureLowPin,HIGH);
pHVal=pHMath();
pressureVal=pressureMath();
temperatureVal=temperatureMath();
imprimir();
}
while(pressureVal>70){
digitalWrite(pressureHighPin,HIGH);
pHVal=pHMath();
pressureVal=pressureMath();
temperatureVal=temperatureMath();
imprimir();
}
while(temperatureVal<100){
digitalWrite(temperatureLowPin,HIGH);
pHVal=pHMath();
pressureVal=pressureMath();
temperatureVal=temperatureMath();
imprimir();
}
while(temperatureVal>150){
digitalWrite(temperatureHighPin,HIGH);
pHVal=pHMath();
pressureVal=pressureMath();
temperatureVal=temperatureMath();
imprimir();
}
digitalWrite(pHLowPin,LOW);
digitalWrite(pHHighPin,LOW);
digitalWrite(pressureLowPin,LOW);
digitalWrite(pressureHighPin,LOW);
digitalWrite(temperatureLowPin,LOW);
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(){
Serial.print("pH = ");
Serial.print(pHVal);
Serial.print(". Pressure = ");
Serial.print(pressureVal);
Serial.print(". Temperature = ");
Serial.println(temperatureVal);
delay(250);
}