Page 1 of 1

Emergency Water Level Routine

Posted: Fri Feb 07, 2014 1:50 pm
by Smotz
All,

Got some flawed code here I was hoping I can get some insight on.

Code: Select all

// EMERGENCY SUMP WATER LEVEL BELOW 20%
    if ( ReefAngel.WaterLevel.GetLevel(1) <= 20 )
    {
    ReefAngel.Relay.Off(Return);
    ReefAngel.Relay.Off(Skimmer);
    ReefAngel.Relay.Off(UVlight);
    ReefAngel.Relay.Off(Feeder);
    ReefAngel.Relay.On(Fugelight);
    }
This code works by design but what happens is the return turns off and the sump fills up making the condition not true anymore - restarting the system. Is there a flag I can set that says "Stay Off" ?

Re: Emergency Water Level Routine

Posted: Fri Feb 07, 2014 2:26 pm
by rimai
declare a new variable above setup()

Code: Select all

boolean LowSump=false;
then, in loop, check for wl<20 and assign true to LowSump and then check is LowSump is true to turn off stuf

Code: Select all

if ( ReefAngel.WaterLevel.GetLevel(1) <= 20 ) LowSump=true;
if (LowSump)
{
    ReefAngel.Relay.Off(Return);
    ReefAngel.Relay.Off(Skimmer);
    ReefAngel.Relay.Off(UVlight);
    ReefAngel.Relay.Off(Feeder);
    ReefAngel.Relay.On(Fugelight);
}
You will need to come up with a solution to put LowSump back to false or reboot the controller.

One other way to do it is to mask the ports off, instead of turning them off.

Code: Select all

  // EMERGENCY SUMP WATER LEVEL BELOW 20%
    if ( ReefAngel.WaterLevel.GetLevel(1) <= 20 )
    {
    ReefAngel.Relay.Override(Return,0);
    ReefAngel.Relay.Override(Skimmer,0);
    ReefAngel.Relay.Override(UVlight,0);
    ReefAngel.Relay.Override(Feeder,0);
    ReefAngel.Relay.Override(Fugelight,1);
    }

Re: Emergency Water Level Routine

Posted: Fri Feb 07, 2014 2:29 pm
by Smotz
rimai wrote:declare a new variable above setup()

Code: Select all

boolean LowSump=false;
then, in loop, check for wl<20 and assign true to LowSump and then check is LowSump is true to turn off stuf

Code: Select all

if ( ReefAngel.WaterLevel.GetLevel(1) <= 20 ) LowSump=true;
if (LowSump)
{
    ReefAngel.Relay.Off(Return);
    ReefAngel.Relay.Off(Skimmer);
    ReefAngel.Relay.Off(UVlight);
    ReefAngel.Relay.Off(Feeder);
    ReefAngel.Relay.On(Fugelight);
}
You will need to come up with a solution to put LowSump back to false or reboot the controller.

One other way to do it is to mask the ports off, instead of turning them off.

Code: Select all

  // EMERGENCY SUMP WATER LEVEL BELOW 20%
    if ( ReefAngel.WaterLevel.GetLevel(1) <= 20 )
    {
    ReefAngel.Relay.Override(Return,0);
    ReefAngel.Relay.Override(Skimmer,0);
    ReefAngel.Relay.Override(UVlight,0);
    ReefAngel.Relay.Override(Feeder,0);
    ReefAngel.Relay.Override(Fugelight,1);
    }

Thanks dude. I think I like the override method.

Re: Emergency Water Level Routine

Posted: Fri Feb 07, 2014 4:19 pm
by lnevo
The nice thing about the override instead of off is that the boolean can return to false (or as in robertos example, eliminated) when the pump shuts off but the pumps stay off until you can intervene.

Re: Emergency Water Level Routine

Posted: Fri Mar 07, 2014 7:05 am
by Smotz
Looks like the override is happening when I do a water change and the level gets low. Can someone help me skip this routine in water change mode?

Code: Select all

// EMERGENCY SUMP WATER LEVEL BELOW 20%
    if ( ReefAngel.WaterLevel.GetLevel(1) <= 20 )
    {
    ReefAngel.Relay.Override(Return,0);
    ReefAngel.Relay.Override(Skimmer,0);
    ReefAngel.Relay.Override(UVlight,0);
    ReefAngel.Relay.Override(Feeder,0);
    ReefAngel.Relay.Override(Fugelight,1);
    }

Re: Emergency Water Level Routine

Posted: Fri Mar 07, 2014 8:31 am
by lnevo
and this as a condition to your if statement

Code: Select all

ReefAngel.DisplayedMenu!=WATERCHANGE_MODE

Re: Emergency Water Level Routine

Posted: Fri Mar 07, 2014 8:00 pm
by Smotz
Sorry dude. Can you explain like I'm 5? What do you mean add a condition? am I doing && or something like that?

Re: Emergency Water Level Routine

Posted: Fri Mar 07, 2014 9:24 pm
by lnevo
Yep

Code: Select all

    if ( ReefAngel.WaterLevel.GetLevel(1) <= 20 && ReefAngel.DisplayedMenu!=WATERCHANGE_MODE)

Re: Emergency Water Level Routine

Posted: Sat Mar 08, 2014 10:30 am
by Smotz
lnevo wrote:Yep

Code: Select all

    if ( ReefAngel.WaterLevel.GetLevel(1) <= 20 && ReefAngel.DisplayedMenu!=WATERCHANGE_MODE)
You rock, as always - thanks!

Re: Emergency Water Level Routine

Posted: Sun Mar 09, 2014 1:30 pm
by Smotz
lnevo wrote:Yep

Code: Select all

    if ( ReefAngel.WaterLevel.GetLevel(1) <= 20 && ReefAngel.DisplayedMenu!=WATERCHANGE_MODE)
A follow up - After this code, I noticed that these port go in to override when the RA reboots. I think I know why - I read on another post that when booting the water level sensor is set to 0 for a split second.

I adjusted the code like this - what do you think?

Code: Select all

// EMERGENCY SUMP WATER LEVEL BELOW 20% AND WATERCHANGE MODE IS NOT ON AND WAIT FOR CONTROLLER TO BE ON FOR 1 SECOND
    if ( ReefAngel.WaterLevel.GetLevel(1) <= 20 && ReefAngel.DisplayedMenu!=WATERCHANGE_MODE && millis() > 1000)
    {
    ReefAngel.Relay.Override(Return,0);
    ReefAngel.Relay.Override(Skimmer,0);
    ReefAngel.Relay.Override(UVlight,0);
    ReefAngel.Relay.Override(Feeder,0);
    ReefAngel.Relay.Override(Fugelight,1);
    ReefAngel.Relay.Override (Vacation_Topoff,0);
    }
// END EMERGENCY WATER LEVEL ROUTINE

Re: Emergency Water Level Routine

Posted: Sun Mar 09, 2014 2:48 pm
by lnevo
That's fine. You could still get it if the sensor blinks at all though. This way you're running it a little less frequently and so the chances are greatly reduced...

Re: Emergency Water Level Routine

Posted: Mon Mar 10, 2014 8:15 am
by rimai
That's what I was going to recommend, but looks like you got it :)