Page 1 of 1

Water Level ATO Delay

Posted: Mon Sep 24, 2018 10:41 pm
by paperdesk
I should know this, but I'm either too slow or too tired to make it work. How can I add in a delay so that my water level ATO will only run once per hour?



My 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
ReefAngel.AddWaterLevelExpansion(); // Water Level Expansion Module
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = Port1Bit | Port4Bit | Port7Bit | Port8Bit;
ReefAngel.FeedingModePortsE[0] = 0;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port1Bit | Port2Bit | Port4Bit | Port6Bit | Port7Bit | Port8Bit;
ReefAngel.WaterChangePortsE[0] = Port6Bit | Port7Bit | Port8Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = 0;
ReefAngel.LightsOnPortsE[0] = Port1Bit | Port2Bit | Port3Bit | Port4Bit;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port2Bit | Port6Bit | Port8Bit;
ReefAngel.OverheatShutoffPortsE[0] = Port1Bit | Port2Bit | Port3Bit | Port4Bit;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Set the Overheat temperature setting
InternalMemory.OverheatTemp_write( 820 );

// Feeeding and Water Change mode speed
ReefAngel.DCPump.FeedingSpeed=0;
ReefAngel.DCPump.WaterChangeSpeed=0;


// Ports that are always on
ReefAngel.Relay.On( Port4 );
ReefAngel.Relay.On( Port5 );
ReefAngel.Relay.On( Box1_Port7 );

////// Place additional initialization code below here


////// Place additional initialization code above here
}

void loop()
{
ReefAngel.StandardFan( Port1,784,800 );
ReefAngel.StandardHeater( Port2,775,780 );
ReefAngel.StandardLights( Port3,21,0,7,0 );
ReefAngel.StandardHeater( Port6,774,780 );
ReefAngel.WaterLevelATO( Port7,3600,95,100 );
ReefAngel.Relay.DelayedOn( Port8,10 );
ReefAngel.StandardLights( Box1_Port1,8,30,20,0 );
ReefAngel.StandardLights( Box1_Port2,8,0,21,0 );
ReefAngel.StandardLights( Box1_Port3,8,30,20,0 );
ReefAngel.StandardLights( Box1_Port4,8,0,21,0 );
ReefAngel.DosingPumpRepeat( Box1_Port6,0,60,80 );
ReefAngel.DosingPumpRepeat( Box1_Port8,30,60,90 );
ReefAngel.DCPump.UseMemory = false;
ReefAngel.DCPump.SetMode( LongPulse,50,10 );
ReefAngel.DCPump.DaylightChannel = Sync;
ReefAngel.DCPump.ActinicChannel = AntiSync;
ReefAngel.DCPump.ExpansionChannel[0] = None;
ReefAngel.DCPump.ExpansionChannel[1] = None;
ReefAngel.DCPump.ExpansionChannel[2] = None;
ReefAngel.DCPump.ExpansionChannel[3] = None;
ReefAngel.DCPump.ExpansionChannel[4] = None;
ReefAngel.DCPump.ExpansionChannel[5] = None;
////// Place your custom code below here

if(ReefAngel.HighATO.IsActive())
{
ReefAngel.Relay.Override(Port8,0);
ReefAngel.Relay.On(Port8);
}
int repeat=2880; // in minutes
int runtime=3600; // in seconds
static time_t t;

// Manual mode
if (ReefAngel.Relay.isMaskOn(Box1_Port5)) {
ReefAngel.Relay.Auto(Box1_Port5);
t=now();
}

if (now()-t < runtime) {
ReefAngel.Relay.On(Box1_Port5);
} else {
ReefAngel.DosingPumpRepeat(Box1_Port5,0,repeat,runtime);
}

if (ReefAngel.DisplayedMenu==WATERCHANGE_MODE) ReefAngel.Relay.On(Port3);



////// Place your custom code above here

// This should always be the last line
ReefAngel.Portal( "redacted" );
ReefAngel.ShowInterface();
}

Re: Water Level ATO Delay

Posted: Tue Sep 25, 2018 1:49 pm
by rimai
I'm looking at the libraries and I don't think it has ever been implemented.

Re: Water Level ATO Delay

Posted: Tue Sep 25, 2018 7:37 pm
by lnevo
How long would you want it to run each hour? The easiest way is to say to run it for 10 minutes at the top of each hour.

if (now()%3600<600) ReefAngel.WaterLevelATO(...);

Re: Water Level ATO Delay

Posted: Wed Sep 26, 2018 9:29 am
by paperdesk
Thanks for checking and replying! I really just want to be able to tell it to run only once per hour or once per half hour. For example. If the water surface has a ripple to it the ATO will keep going on and off with the waves. I don't like the relay and pump having to turn on and off so many times unnecessarily. I was sure that I used to have that code in place, but maybe not?

Ted