Hi Fernando
I cleaned up the code and found the right adjustment for delays, delays after the "open channel" must be 50 to not make any mistakes.
Now the probes of PH and ORP is working perfectly with new stamps "EZO".
Thank you Fernando.
//------------------------------------- Leitura dos stamps
void parametros()
{
int i;
do{
Open_channel(ph1);
delay(50);
Serial3.print("T,");
Serial3.print(tempC);
Serial3.print('\r');
delay(500);
Serial.println("Debug pH 6:");
while(Serial3.available())
{
Serial.print(char(Serial3.read()));
}
Serial.println();
Serial3.print("R");
Serial3.print('\r');
delay(1000);
Serial.println("Debug pH 7:");
if(Serial3.available() > 3)
{
holding = Serial3.available();
for(i=1; i <= holding; i++)
{
sensorstring[i]= Serial3.read();
Serial.print(sensorstring[i]);
}
Serial.println();
if(holding ==6)
{
PHT = ((sensorstring[1]-48)*100 + (sensorstring[3]-48)*10 + (sensorstring[4]-48));
PHA = PHT/100;
}
else
{
PHT = ((sensorstring[1]-48)*1000 + (sensorstring[2]-48)*100 + (sensorstring[4]-48)*10 + (sensorstring[5]-48));
PHA = PHT/100;
}
PHT=0;
Serial3.flush();
break;
}
}
while (done==1);
done=0;
do{
Open_channel(ph2);
delay(50);
Serial3.print("T,");
Serial3.print(tempC);
Serial3.print('\r');
delay(500);
Serial.println("Debug pH 6:");
while(Serial3.available())
{
Serial.print(char(Serial3.read()));
}
Serial.println();
Serial3.print("R");
Serial3.print('\r');
delay(1000);
Serial.println("Debug pH 7:");
if(Serial3.available() > 3)
{
holding = Serial3.available();
for(i=1; i <= holding; i++)
{
sensorstring[i]= Serial3.read();
Serial.print(sensorstring[i]);
}
Serial.println();
if(holding ==6)
{
PHT = ((sensorstring[1]-48)*100 + (sensorstring[3]-48)*10 + (sensorstring[4]-48));
PHR = PHT/100;
}
else
{
PHT = ((sensorstring[1]-48)*1000 + (sensorstring[2]-48)*100 + (sensorstring[4]-48)*10 + (sensorstring[5]-48));
PHR = PHT/100;
}
PHT=0;
Serial3.flush();
break;
}
}
while (done==1);
done=0;
do{
Open_channel(orp);
delay(50);
Serial.println("Debug orp 6:");
while(Serial3.available())
{
Serial.print(char(Serial3.read()));
}
Serial.println();
Serial3.print("R");
Serial3.print('\r');
delay(1000);
Serial.println("Debug orp 7:");
if(Serial3.available() > 3)
{
holding = Serial3.available();
for(i=1; i <= holding; i++)
{
sensorstring[i]= Serial3.read();
Serial.print(sensorstring[i]);
}
ORPT = ((sensorstring[1]-48)*100 + (sensorstring[2]-48)*10 + (sensorstring[3]-48));
ORP = ORPT;
ORPT=0;
Serial3.flush();
break;
}
}
while (done==1);
done=0;
/*
do{
Open_channel(ec);
Serial3.print(tempC); //Para se obter um valor compensado pode-se enviar um valor de temperatura da água.
Serial3.print('\r');
delay(500);
if(Serial3.available() > 3)
{
Serial.print("Densidade:");
holding = Serial3.available();
for(i=1; i <= 15; i++)
{
sensorstring[i]= Serial3.read();
Serial.print(sensorstring[i]);
}
Serial.println();
Serial3.flush();
break;
}
}
while (done==1);
done=0;
*/
}
void iniciar_stamps()
{
Open_channel(ph1);
delay(50);
Serial3.flush();
Serial3.print("RESPONSE,0"); // Disable "RESPONSE" code
Serial3.print('\r');
delay(500);
Serial3.flush();
Serial3.print("C,0"); // Envia um comando para que o "stamp" pare de enviar as leituras.
Serial3.print('\r');
delay(500);
Serial3.print("L,1"); // Envia um comando para que o "stamp" apague o led de depuração.
Serial3.print('\r');
delay(500);
Open_channel(ph2);
delay(50);
Serial3.flush();
Serial3.print("RESPONSE,0"); // Disable "RESPONSE" code
Serial3.print('\r');
delay(500);
Serial3.print("C,0"); // Envia um comando para que o "stamp" pare de enviar as leituras.
Serial3.print('\r');
delay(500);
Serial3.print("L,1"); // Envia um comando para que o "stamp" apague o led de depuração.
Serial3.print('\r');
delay(500);
Open_channel(orp);
delay(50);
Serial3.print("C,0"); // Envia um comando para que o "stamp" pare de enviar as leituras.
Serial3.print('\r');
delay(500);
Serial3.print("L,1"); // Envia um comando para que o "stamp" apague o led de depuração.
Serial3.print('\r');
delay(500);
Serial3.print("RESPONSE,0"); // Disable "RESPONSE" code
Serial3.print('\r');
delay(500);
parametros(); // Verifica os "stamps".
}
void Open_channel(short channel)
{
switch (channel)
{
case 0:
//open channel Y0
//S0=0
//S1=0
digitalWrite(multiplexadorS0Pin, LOW);
digitalWrite(multiplexadorS1Pin, LOW);
break;
case 1:
//open channel Y1
//S0=1
//S1=0
digitalWrite(multiplexadorS0Pin, HIGH);
digitalWrite(multiplexadorS1Pin, LOW);
break;
case 2:
//open channel Y2
//S0=0
//S1=1
digitalWrite(multiplexadorS0Pin, LOW);
digitalWrite(multiplexadorS1Pin, HIGH);
break;
/* case 3:
//open channel Y3
//S0=1
//S1=1
digitalWrite(multiplexadorS0Pin, HIGH);
digitalWrite(multiplexadorS1Pin, HIGH);
break; */
}
Serial3.print('\r');
return;
}