I/O expansion added to wizard.

Requests for new functions or software apps

Posts: 33
Joined: Mon May 20, 2013 7:49 am
PostPosted: Sat May 03, 2014 10:29 am
Just ordered the Multi-Channel Water Level Expansion will use that to monitor the levels of my Cal - Alk - vinegar - vodka.
I already have the single Water Level Expansion on my ato.

Would still like a float switch on my skimmer cup and be able to shut it off and send a email when its full.
Image

Posts: 12201
Joined: Fri Mar 18, 2011 6:47 pm
PostPosted: Sat May 03, 2014 11:40 am
Open the enclosure. It will be written in the pcb.
Roberto.

Posts: 12201
Joined: Fri Mar 18, 2011 6:47 pm
PostPosted: Sat May 03, 2014 11:42 am
For your skimmer cup, use this:
Code: Select all
ReefAngel.Relay.Set(Port1,ReefAngel.IO.GetChannel(0)); // Set port 1 according to I/O channel 0
Roberto.

Posts: 33
Joined: Mon May 20, 2013 7:49 am
PostPosted: Mon May 05, 2014 11:35 am
rimai wrote:Open the enclosure. It will be written in the pcb.

It says reef angel plus main unit 2.1
Image

Posts: 12201
Joined: Fri Mar 18, 2011 6:47 pm
PostPosted: Mon May 05, 2014 11:36 am
I meant the I/O module.
Roberto.

Posts: 33
Joined: Mon May 20, 2013 7:49 am
PostPosted: Mon May 05, 2014 2:02 pm
ok its I/O Expansion 2.0
Image

Posts: 12201
Joined: Fri Mar 18, 2011 6:47 pm
PostPosted: Mon May 05, 2014 2:25 pm
Yes, starting on 2.0 version, you can easily use any port as output too. You just need to code it so the module knows you are using as output.
You need to add this to the end of your code:
Code: Select all
void SetIOChannel(byte channel, byte value)
{
    Wire.beginTransmission(I2CIO_PCF8574);
    Wire.write(value<<channel);
    Wire.endTransmission();
}

Then, in your code, you can set any channel on the I/O module like this:
Code: Select all
SetIOChannel(0,1); // Set channel 0 to on
Roberto.

Posts: 5
Joined: Sat Mar 01, 2014 7:45 pm
Location: Singapore
PostPosted: Fri May 16, 2014 4:17 pm
Hi Roberto

My IO Expansion module rev is 2.2

I have added the following coding

void SetIOChannel(byte channel, byte value)
{
Wire.beginTransmission(I2CIO_PCF8574);
Wire.write(value<<channel);
Wire.endTransmission();
}


in the setup I called the following codes

// init IO port 1 to 3
// Testing phase

SetIOChannel(0,1); // Set channel 0 to on
SetIOChannel(1,1); // Set channel 1 to on
SetIOChannel(2,1); // Set channel 2 to on
SetIOChannel(3,0); // Set channel 3 to off
SetIOChannel(4,0); // Set channel 4 to off
SetIOChannel(5,0); // Set channel 5 to off


and in the loop



if (hour()>=0 && hour()< 17 )
{
unsigned long currentMillis = millis();

if ( currentMillis - previousMillis >= intervaltimer )
{
if (FanOffStatus == false)
{
FanOffStatus = true; // variable set to off the fan
previousMillis = currentMillis;
intervaltimer = 30000 ;
SetIOChannel(4,1); // Set channel 4 to on
SetIOChannel(5,0); // Set channel 5 to on

}
else
{
FanOffStatus = false; // variable set to on the fan
previousMillis = currentMillis ;
intervaltimer = 5000 ;
SetIOChannel(4,0); // Set channel 4 to on
SetIOChannel(5,1); // Set channel 5 to on

}


if (FanOffStatus == false)
{
ReefAngel.Relay.Off( Port3 );
}
else
{
ReefAngel.Relay.On( Port3 );
}

}

}



I'm just wanted to test the IO module to in port 4 and 5 to toggle between ON and OFF stage. and I noticed that all my port are at +5V including port 4 an 5. There is no toggling in voltage in port and 4 and 5. Looks like the RA is not IO module is set to OUTPOT module. Please advise

Posts: 12201
Joined: Fri Mar 18, 2011 6:47 pm
PostPosted: Fri May 16, 2014 5:43 pm
I'll have to check when I get to the office.

Sent from my SM-G900P using Tapatalk
Roberto.

Posts: 12201
Joined: Fri Mar 18, 2011 6:47 pm
PostPosted: Fri May 23, 2014 10:40 pm
I'm not so sure why it is not working for you.
This is what I tested:
Code: Select all
  if (millis()%2000<1000)
    SetIOChannel(0,1);
  else
    SetIOChannel(0,0);

Channel 0 goes high and low every second.
Roberto.
Previous

Return to Requests

Who is online

Users browsing this forum: No registered users and 3 guests

cron