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()
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()
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
