Hi,
All has been working as expected since I setup my RA except for the ATO.
Using 1 floatswitch, SingleATOLow, code generated by the wizard on port 6 I got what seemed to be logically working.
Manually triggering by pushing on it confirmed all worked well and respected the time out (or so it seemed).
I've been constantly getting time outs at default 60 secs, I raised it to 80 and further more until I got to 300 and messed by having excess top off dumped in the sump.
I'm using a standard aqualift pump and very moderate length of tubing. What I find extremely odd is that most of the time, if the ATO timeout happened recently and I happen to be close to the tank when I reset it, I clear the ATO timeout flag, red light goes off and the pump doesn't turn back on which is perfectly fine as the water level is actually in the right place! If that's the case then why did the timeout happen ?
The issue seems mechanical (switch unable to float back in realtime, takes a while to pop back up and timeout is triggered) but I don't see or feel any resistance when moving it around.
I tried swapping the switch wit the other included one but it looks like that one is inverted (open closed backward) and don't want to needlessly chop it off.
ATO Timeout issue (SingleATOlow)
Re: ATO Timeout issue (SingleATOlow)
Could possibly be a bad switch, if it's moving as it's supposed to.
On the other switch, you can take off the retaining ring and flip the float over to change the polarity.
--Colin
On the other switch, you can take off the retaining ring and flip the float over to change the polarity.
--Colin
Re: ATO Timeout issue (SingleATOlow)
Inverted? You can swap the polarity (if that is an issue); you can use a pin/xacto knife or any other narrow item to gently push down on the lead in the connector (visible from the top of the connector). The leads will slide right out with almost no resistance (if there is resistance, don't pull).
Can you post the code you're using for the ATO function?
Edit: had no idea you could simply swap the drum!
Can you post the code you're using for the ATO function?
Edit: had no idea you could simply swap the drum!
Last edited by madweazl on Fri Jun 24, 2016 6:03 am, edited 1 time in total.
Re: ATO Timeout issue (SingleATOlow)
Switches don't have polarity.
What he means is one float switch is off in the up position, and the other one is on in the up position. Solved by turning the float over.
What he means is one float switch is off in the up position, and the other one is on in the up position. Solved by turning the float over.
Re: ATO Timeout issue (SingleATOlow)
So I could have both switches mounted in the down position and just flip the drum (float)? That would make my OCD happy LOL.cosmith71 wrote:Switches don't have polarity.
What he means is one float switch is off in the up position, and the other one is on in the up position. Solved by turning the float over.
Re: ATO Timeout issue (SingleATOlow)
Yup. There is a magnet on one end of the inside of the float. Flipping it over changes the switch from normally open to normally closed.
-
- Posts: 99
- Joined: Fri Apr 01, 2011 10:53 am
Re: ATO Timeout issue (SingleATOlow)
Wow thanks for the quick reply guys! I'll swap the drum and let you know if changing the switch did the trick! It seems there are 2 possible levels for the retaining ring. Any idea if lower or higher is better ?
As for the code, since I'm using the Wizard and internal memory, it doesn't look like much (any way I can get the memory portion of the code ?):
#include <ReefAngel_Features.h>
#include <Globals.h>
#include <RA_Wifi.h>
#include <Wire.h>
#include <OneWire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <InternalEEPROM.h>
#include <RA_NokiaLCD.h>
#include <RA_ATO.h>
#include <RA_Joystick.h>
#include <LED.h>
#include <RA_TempSensor.h>
#include <Relay.h>
#include <RA_PWM.h>
#include <Timer.h>
#include <Memory.h>
#include <InternalEEPROM.h>
#include <RA_Colors.h>
#include <RA_CustomColors.h>
#include <Salinity.h>
#include <RF.h>
#include <IO.h>
#include <ORP.h>
#include <AI.h>
#include <PH.h>
#include <WaterLevel.h>
#include <Humidity.h>
#include <DCPump.h>
#include <PAR.h>
#include <ReefAngel.h>
////// Place global variable code below here
////// Place global variable code above here
void setup()
{
// This must be the first line
ReefAngel.Init(); //Initialize controller
ReefAngel.Use2014Screen(); // Let's use 2014 Screen
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = Port1Bit | Port3Bit | Port4Bit | Port5Bit | Port6Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port1Bit | Port2Bit | Port3Bit | Port4Bit | Port5Bit | Port6Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = Port7Bit;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port2Bit | Port7Bit;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Ports that are always on
ReefAngel.Relay.On( Port1 );
ReefAngel.Relay.On( Port4 );
ReefAngel.Relay.On( Port5 );
////// Place additional initialization code below here
////// Place additional initialization code above here
}
void loop()
{
ReefAngel.StandardHeater( Port2 );
ReefAngel.Relay.DelayedOn( Port3 );
ReefAngel.SingleATOLow( Port6 );
ReefAngel.DayLights( Port7 );
ReefAngel.ActinicLights( Port8 );
ReefAngel.PWM.DaylightPWMParabola();
ReefAngel.PWM.ActinicPWMParabola();
////// Place your custom code below here
//if (!ReefAngel.HighATO.IsActive) ReefAngel.Relay.Off(Port1);
////// Place your custom code above here
// This should always be the last line
ReefAngel.Portal( "XXXXXXX" );
ReefAngel.DDNS( "XXXXX" ); // Your DDNS is XXXXXX.myreefangel.com
ReefAngel.ShowInterface();
}
As for the code, since I'm using the Wizard and internal memory, it doesn't look like much (any way I can get the memory portion of the code ?):
#include <ReefAngel_Features.h>
#include <Globals.h>
#include <RA_Wifi.h>
#include <Wire.h>
#include <OneWire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <InternalEEPROM.h>
#include <RA_NokiaLCD.h>
#include <RA_ATO.h>
#include <RA_Joystick.h>
#include <LED.h>
#include <RA_TempSensor.h>
#include <Relay.h>
#include <RA_PWM.h>
#include <Timer.h>
#include <Memory.h>
#include <InternalEEPROM.h>
#include <RA_Colors.h>
#include <RA_CustomColors.h>
#include <Salinity.h>
#include <RF.h>
#include <IO.h>
#include <ORP.h>
#include <AI.h>
#include <PH.h>
#include <WaterLevel.h>
#include <Humidity.h>
#include <DCPump.h>
#include <PAR.h>
#include <ReefAngel.h>
////// Place global variable code below here
////// Place global variable code above here
void setup()
{
// This must be the first line
ReefAngel.Init(); //Initialize controller
ReefAngel.Use2014Screen(); // Let's use 2014 Screen
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = Port1Bit | Port3Bit | Port4Bit | Port5Bit | Port6Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port1Bit | Port2Bit | Port3Bit | Port4Bit | Port5Bit | Port6Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = Port7Bit;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port2Bit | Port7Bit;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Ports that are always on
ReefAngel.Relay.On( Port1 );
ReefAngel.Relay.On( Port4 );
ReefAngel.Relay.On( Port5 );
////// Place additional initialization code below here
////// Place additional initialization code above here
}
void loop()
{
ReefAngel.StandardHeater( Port2 );
ReefAngel.Relay.DelayedOn( Port3 );
ReefAngel.SingleATOLow( Port6 );
ReefAngel.DayLights( Port7 );
ReefAngel.ActinicLights( Port8 );
ReefAngel.PWM.DaylightPWMParabola();
ReefAngel.PWM.ActinicPWMParabola();
////// Place your custom code below here
//if (!ReefAngel.HighATO.IsActive) ReefAngel.Relay.Off(Port1);
////// Place your custom code above here
// This should always be the last line
ReefAngel.Portal( "XXXXXXX" );
ReefAngel.DDNS( "XXXXX" ); // Your DDNS is XXXXXX.myreefangel.com
ReefAngel.ShowInterface();
}