Forum Software Ferduino code Full code for EZO stamps.

Full code for EZO stamps.


Post Number:#1 Post Mon Dec 15, 2014 2:55 pm
Posts: 1699
Topics: 38
Images: 301
Solve rating: 233
Joined: Mon Mar 03, 2014 5:59 pm
Topics: 38
Age: 39
Location: São Paulo
Gender: Male
National Flag:
Brazil

Atlas Scientific have changed the default baud rate for new stamps so, is need change it using code for test.
In first time change on setup of test code to:
Serial3.begin(9600);


Then, only send SERIAL,38400

Don't forget to change the serial monitor to finish command with carriage return.

Image


Warning: The code below isn't needed for latest Ferduino available on Github.

Replace all content of "Stamps.ino" with:

//------------------------------------- Leitura dos stamps
void check_parametro_ph_aquario()
{
  boolean done = false;
  byte holding;
  char sensorstring[15];

  do{
    Open_channel(ph1);
    delay(50);

    while(Serial3.available())
    {
      char c = Serial3.read();
    }

    Serial3.print("T,");
    Serial3.print(tempC);
    Serial3.print('\r');
    delay(1000);

    Serial3.print("R"); // Envia um comando.
    Serial3.print('\r');
    delay(1000);

    if(Serial3.available() > 3)
    {
      holding = Serial3.available();
      for(byte i=1; i <= holding; i++)
      {
        sensorstring[i]= Serial3.read();
      }

      if(holding == 6)
      {
        PHA = ((sensorstring[1]-48)*100 + (sensorstring[3]-48)*10 + (sensorstring[4]-48));
        PHA /= 100;
      }
      else
      {
        PHA = ((sensorstring[1]-48)*1000 + (sensorstring[2]-48)*100 + (sensorstring[4]-48)*10 + (sensorstring[5]-48));
        PHA /= 100;
      }
      Serial3.flush();
      break;
    }
  }
  while (done == true);
}

void check_parametro_ph_reator()
{
  boolean done = false;
  byte holding;
  char sensorstring[15];

  do{
    Open_channel(ph2);
    delay(50);

    while(Serial3.available())
    {
      char c = Serial3.read();
    }

    Serial3.print("T,");
    Serial3.print(tempC);
    Serial3.print('\r');
    delay(1000);

    Serial3.print("R"); // Envia um comando.
    Serial3.print('\r');
    delay(1000);

    if(Serial3.available() > 3)
    {
      holding = Serial3.available();
      for(byte i=1; i <= holding; i++)
      {
        sensorstring[i]= Serial3.read();
      }

      if(holding == 6)
      {
        PHR = ((sensorstring[1]-48)*100 + (sensorstring[3]-48)*10 + (sensorstring[4]-48));
        PHR /= 100;
      }
      else
      {
        PHR = ((sensorstring[1]-48)*1000 + (sensorstring[2]-48)*100 + (sensorstring[4]-48)*10 + (sensorstring[5]-48));
        PHR /= 100;
      }
      Serial3.flush();
      break;
    }
  }
  while (done == true);
}

void check_parametro_orp()
{
  boolean done = false;
  byte holding;
  char sensorstring[15];

  do{
    Open_channel(orp);
    delay(50);
   
    while(Serial3.available())
    {
      char c = Serial3.read();
    }
   
    Serial3.print("R"),
    Serial3.print('\r');
    delay(1000);

    if(Serial3.available() > 3)
    {
      holding = Serial3.available();
      for(byte i = 1; i <= holding; i++)
      {
        sensorstring[i]= Serial3.read();
      }
      if(holding == 5)
      {
        ORP = ((sensorstring[1]-48)*10 + (sensorstring[2]-48));
      }
      else
      {
        ORP = ((sensorstring[1]-48)*100 + (sensorstring[2]-48)*10 + (sensorstring[3]-48));
      }
      Serial3.flush();     
      break;
    }
  }
  while (done == true);
}

void check_parametro_densidade()
{
  boolean done = false;
  byte holding;
  char sensorstring[15];

  do{
    Open_channel(ec);
    delay(50);

    while(Serial3.available())
    {
      char c = Serial3.read();
    }

    Serial3.print("T,");
    Serial3.print(tempC);
    Serial3.print('\r');
    delay(1000);

    Serial3.print("R"); // Envia um comando.
    Serial3.print('\r');
    delay(1000);

    if(Serial3.available() > 3)
    {
      holding = Serial3.available();
      for(byte i=1; i <= holding; i++)
      {
        sensorstring[i]= Serial3.read();
      }

      if(holding == 6)
      {
        DEN = ((sensorstring[1]-48)*1000 + (sensorstring[3]-48)*100 + ((sensorstring[4]-48)*10) + (sensorstring[5]-48));
      }

      Serial3.flush();
      break;
    }
  }
  while (done == true);
}

void iniciar_stamp_ph_aquario()
{
  Open_channel(ph1); // Open channel for tank pH
  delay(50);
  Serial3.print("R"); // To get a value
  Serial3.print('\r');
  delay(1000);

  Serial3.print("C,0"); // To stop continuous reading
  Serial3.print('\r');
  delay(1000);

  Serial3.print("L,0"); // To turn off the LEDs of debug
  Serial3.print('\r');
  delay(1000);

  Serial3.print("RESPONSE,0"); // To disable response code
  Serial3.print('\r');
  delay(1000);
  check_parametro_ph_aquario();
}

void iniciar_stamp_ph_reator()
{
  Open_channel(ph2);
  delay(50);
  Serial3.print("R"); // To get a value
  Serial3.print('\r');
  delay(1000);

  Serial3.print("C,0"); // To stop continuous reading
  Serial3.print('\r');
  delay(1000);

  Serial3.print("L,0"); // To turn off the LEDs of debug
  Serial3.print('\r');
  delay(1000);

  Serial3.print("RESPONSE,0"); // To disable response code
  Serial3.print('\r');
  delay(1000);
  check_parametro_ph_reator();
}

void iniciar_stamp_orp()
{
  Open_channel(orp);
  Serial3.print("R"); // To get a value
  Serial3.print('\r');
  delay(1000);

  Serial3.print("C,0"); // To stop continuous reading
  Serial3.print('\r');
  delay(1000);

  Serial3.print("L,0"); // To turn off the LEDs of debug
  Serial3.print('\r');
  delay(1000);

  Serial3.print("RESPONSE,0"); // To disable response code
  Serial3.print('\r');
  delay(1000);
  check_parametro_orp();
}

void iniciar_stamp_densidade()
{
  Open_channel(ec); // To open channel for salinity
  delay(50);
  Serial3.print("R"); // To get a value
  Serial3.print('\r');
  delay(1000);

  Serial3.print("C,0"); // To stop continuous reading
  Serial3.print('\r');
  delay(1000);

  Serial3.print("L,0"); // To turn OFF the  LEDs of debug
  Serial3.print('\r');
  delay(1000);

  Serial3.print("RESPONSE,0"); // To disable response code
  Serial3.print('\r');
  delay(1000);


  Serial3.print("O,EC"); // Disable EC reading.
  Serial3.print('\r');
  delay(1000);

  Serial3.print("O,TDS"); // Disable TDS reading.
  Serial3.print('\r');
  delay(1000);

  Serial3.print("O,S"); // Disable salinity reading
  Serial3.print('\r');
  delay(1000);
  check_parametro_densidade();
}

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;
}


On setup find:

    iniciar_stamp_ph_reator();    // Lê o pH do reator
    iniciar_stamp_orp();          // Lê a ORP
    // iniciar_stamp_densidade();    // Lê a densidade
    iniciar_stamp_ph_aquario();   // Lê o pH do aquário


Comment or uncomment the functions according to your requirements.

On loop find:

      check_parametro_ph_reator(); // Verifica os "stamps".
      check_parametro_orp();
      //      check_parametro_densidade();
      check_parametro_ph_aquario();


Comment or uncomment the functions according to your requirements.
Post your doubts on forum because it can help another user too. Just PM me for support if it's absolutely necessary.



  • Similar Topics
    Replies
    Views
    Last post

Return to Ferduino code





Who is online

Users viewing this topic: No registered users and 0 guests