Hi Fernando
My probe don't work with FerduinoMega, but it's work with test code.
The leds of multiplexer move only at startup.
boolean Stamps = false;
boolean Stamps = true;
const int multiplexadorS0Pin = 16; // S0
const int multiplexadorS1Pin = 17; // S1
String inputstring = "";
String sensorstring = "";
boolean input_stringcomplete = false;
boolean sensor_stringcomplete = false;
int index = 0;
char inData[2];
void setup()
{
Serial.begin(38400);
Serial3.begin(38400);
inputstring.reserve(5);
sensorstring.reserve(30);
pinMode(multiplexadorS0Pin, OUTPUT);
pinMode(multiplexadorS1Pin, OUTPUT);
Serial.println("To communication with the stamp of PH of the tank enter: y0");
Serial.println("To communication with the stamp of PH of the reactor enter: y1");
Serial.println("To communication with the stamp of ORP enter: y2");
Serial.println("To communication with the stamp of EC enter: y3");
Serial.println("To clear the channel opened enter: 00");
}
void serialEvent()
{
char inchar = (char)Serial.read();
inputstring += inchar;
inData[index] = inchar;
index++;
if((inData[0] == 'y') && (inData[1] == '0'))
{
digitalWrite(multiplexadorS0Pin, LOW);
digitalWrite(multiplexadorS1Pin, LOW);
Serial.println("Channel for PH of the tank is opened.");
inData[0] = '9';
inData[1] = '9';
}
if((inData[0] == 'y') && (inData[1] == '1'))
{
digitalWrite(multiplexadorS0Pin, HIGH);
digitalWrite(multiplexadorS1Pin, LOW);
Serial.println("Channel for PH of the reactor is opened.");
inData[0] = '9';
inData[1] = '9';
}
if((inData[0] == 'y') && (inData[1] == '2'))
{
digitalWrite(multiplexadorS0Pin, LOW);
digitalWrite(multiplexadorS1Pin, HIGH);
Serial.println("Channel for ORP is opened.");
inData[0] = '9';
inData[1] = '9';
}
if((inData[0] == 'y') && (inData[1] == '3'))
{
digitalWrite(multiplexadorS0Pin, HIGH);
digitalWrite(multiplexadorS1Pin, HIGH);
Serial.println("Channel for EC is opened.");
inData[0] = '9';
inData[1] = '9';
}
if((inData[0] == '0') && (inData[1] == '0'))
{
Serial3.flush();
Serial.println("Clean.");
inData[0] = '9';
inData[1] = '9';
}
if(inchar == '\r')
{
input_stringcomplete = true;
}
}
void loop()
{
if (input_stringcomplete)
{
Serial3.print(inputstring);
inputstring = "";
input_stringcomplete = false;
index = 0;
}
while (Serial3.available())
{
char inchar = (char)Serial3.read();
sensorstring += inchar;
if (inchar == '\r')
{
sensor_stringcomplete = true;
}
}
if (sensor_stringcomplete)
{
Serial.print(sensorstring);
sensorstring = "";
sensor_stringcomplete = false;
Serial.println("");
}
}
Open_channel(ph1);
Serial3.print(tempC); //Para se obter um valor compensado pode-se enviar um valor de temperatura da água.
Serial3.print('\r');
delay(500);
Serial3.print("r");
Serial3.print('\r');
delay(500);
void parametros()
{
int i;
do{
Open_channel(ph1);
Serial3.print("T,"); //Para se obter um valor compensado pode-se enviar um valor de temperatura da água.
Serial3.print(tempC);
Serial3.print('\r');
delay(500);
Serial3.print("R\r");
delay(500);
if(Serial3.available() > 3)
{
holding = Serial3.available();
for(i=1; i <= holding; i++)
{
sensorstring[i]= Serial3.read();
}
if(holding ==5)
{
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);
Serial3.print("T,"); //Para se obter um valor compensado pode-se enviar um valor de temperatura da água.
Serial3.print(tempC);
Serial3.print('\r');
delay(500);
Serial3.print("R\r");
delay(500);
if(Serial3.available() > 3)
{
holding = Serial3.available();
for(i=1; i <= holding; i++)
{
sensorstring[i]= Serial3.read();
}
if(holding ==5)
{
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);
Serial3.print("R\r");
delay(500);
if(Serial3.available() > 3)
{
holding = Serial3.available();
for(i=1; i <= holding; i++)
{
sensorstring[i]= Serial3.read();
}
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.print("C,0"); // Envia um comando para que o "stamp" pare de enviar as leituras.
Serial3.print('\r');
delay(1000);
Serial3.flush();
Serial3.print("L,0"); // Envia um comando para que o "stamp" apague o led de depuração.
Serial3.print('\r');
delay(1000);
Open_channel(ph2);
delay(50);
Serial3.print("C,0"); // Envia um comando para que o "stamp" pare de enviar as leituras.
Serial3.print('\r');
delay(1000);
Serial3.flush();
Serial3.print("L,0"); // Envia um comando para que o "stamp" apague o led de depuração.
Serial3.print('\r');
delay(1000);
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(1000);
Serial3.flush();
Serial3.print("L,0"); // Envia um comando para que o "stamp" apague o led de depuração.
Serial3.print('\r');
delay(1000);
/*Open_channel(ec);
delay(50);
Serial3.print("e"); // Envia um comando para que o "stamp" pare de enviar as leituras.
Serial3.print('\r');
delay(1000);
Serial3.flush();
Serial3.print("L,0"); // Envia um comando para que o "stamp" apague o led de depuração.
Serial3.print('\r');
delay(1000); */
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;
}
Serial3.print('\r');
delay(1000);
Serial3.print(RESPONSE,0); // Disable response code
Serial3.print('\r');
delay(1000);
for(i=1; i <= holding; i++)
{
sensorstring[i]= Serial3.read();
}
for(i=1; i <= holding; i++)
{
sensorstring[i]= Serial3.read();
Serial.print(sensorstring[i]);
}
Serial.println();
delay(500);
delay(1000);
void parametros()
{
int i;
do{
Open_channel(ph1);
Serial3.print("T,"); //Para se obter um valor compensado pode-se enviar um valor de temperatura da água.
Serial3.print(tempC);
Serial3.print('\r');
delay(1000);
Serial3.print("R\r");
delay(1000);
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 ==5)
{
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);
Serial3.print("T,"); //Para se obter um valor compensado pode-se enviar um valor de temperatura da água.
Serial3.print(tempC);
Serial3.print('\r');
delay(1000);
Serial3.print("R\r");
delay(1000);
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 ==5)
{
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);
Serial3.print("R\r");
delay(1000);
if(Serial3.available() > 3)
{
holding = Serial3.available();
for(i=1; i <= holding; i++)
{
sensorstring[i]= Serial3.read();
Serial.print(sensorstring[i]);
}
Serial.println();
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(1000);
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.print("C,0"); // Envia um comando para que o "stamp" pare de enviar as leituras.
Serial3.print('\r');
delay(1000);
Serial3.flush();
Serial3.print("L,0"); // Envia um comando para que o "stamp" apague o led de depuração.
Serial3.print('\r');
delay(1000);
Serial3.print("RESPONSE,0"); // Disable "RESPONSE" code
Serial3.print('\r');
delay(1000);
Open_channel(ph2);
delay(50);
Serial3.print("C,0"); // Envia um comando para que o "stamp" pare de enviar as leituras.
Serial3.print('\r');
delay(1000);
Serial3.flush();
Serial3.print("L,0"); // Envia um comando para que o "stamp" apague o led de depuração.
Serial3.print('\r');
delay(1000);
Serial3.print("RESPONSE,0"); // Disable "RESPONSE" code
Serial3.print('\r');
delay(1000);
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(1000);
Serial3.flush();
Serial3.print("L,0"); // Envia um comando para que o "stamp" apague o led de depuração.
Serial3.print('\r');
delay(1000);
Serial3.print("RESPONSE,0"); // Disable "RESPONSE" code
Serial3.print('\r');
delay(1000);
/*Open_channel(ec);
delay(50);
Serial3.print("e"); // Envia um comando para que o "stamp" pare de enviar as leituras.
Serial3.print('\r');
delay(1000);
Serial3.flush();
Serial3.print("L,0"); // Envia um comando para que o "stamp" apague o led de depuração.
Serial3.print('\r');
delay(1000); */
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;
}
Serial3.print("R\r");
Serial3.print("R");
Serial3.print('\r');
Open_channel(ph2);
Serial.println("Debug pH 1:");
while(Serial3.available())
{
Serial.print(Serial3.read());
}
Serial.println();
Serial.print(char(Serial3.read()));
Serial.print(Serial3.read());
Serial3.print("RESPONSE,0"); // Disable "RESPONSE" code
Serial3.print('\r');
delay(1000);
delay(50);
Open_channel(ph1);
delay(50);
Serial3.print("RESPONSE,0"); // Disable "RESPONSE" code
Serial3.print('\r');
delay(1000);
Serial3.print("C,0"); // Envia um comando para que o "stamp" pare de enviar as leituras.
Serial3.print('\r');
delay(1000);
Serial3.print("L,1"); // Envia um comando para que o "stamp" apague o led de depuração.
Serial3.print('\r');
delay(1000);
Serial.println("Debug pH 1:");
while(Serial3.available())
{
Serial.print(char(Serial3.read()));
}
Serial.println();
Users viewing this topic: No registered users and 7 guests