I hope I'm not shooting myself in the foot and defeating the purpose of monitoring salinity. I've been doing this manually and am confident in my ability to keep the tank stable in normal circumstances so I'm comfortable trying this out. We'll see.

Code: Select all
#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
// Set to start at 9:45am and run for 10 minutes
#define AUTO_SAL_START_HOUR 9
#define AUTO_SAL_START_MINUTE 45
#define AUTO_SAL_RUN_TIME 10
////// 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.AddSalinityExpansion(); // Salinity Expansion Module
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = Port1Bit | Port2Bit | Port5Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port1Bit | Port2Bit | Port5Bit | Port8Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = 0;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port2Bit | Port3Bit | Port8Bit;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Salinity Temp Compensation
ReefAngel.Salinity.SetCompensation(0);
// Ports that are always on
ReefAngel.Relay.On( Port3 );
ReefAngel.Relay.On( Port4 );
ReefAngel.Relay.On( Port5 );
////// Place additional initialization code below here
ReefAngel.CustomLabels[0]="ATO Pump";
ReefAngel.CustomLabels[1]="Skimmer";
ReefAngel.CustomLabels[2]="Light";
ReefAngel.CustomLabels[3]="Nero3";
ReefAngel.CustomLabels[4]="Return Pump";
ReefAngel.CustomLabels[5]="Unused";
ReefAngel.CustomLabels[6]="Unused";
ReefAngel.CustomLabels[7]="Heater";
////// Place additional initialization code above here
}
void loop()
{
ReefAngel.SingleATOLow( Port1 );
ReefAngel.StandardLights( Port2 ); // putting skimmer on timer
ReefAngel.StandardHeater( Port8 );
////// Place your custom code below here
// First 10 minutes after WC disable ATO for port 1
static time_t wcTimer;
if (ReefAngel.DisplayedMenu == WATERCHANGE_MODE) wcTimer=now();
if (now()-wcTimer > 0 && now()-wcTimer < 600) {
ReefAngel.Relay.Off(Port1);
}
else {ReefAngel.SingleATOLow (Port1 );
}
// Compute the current time
int CurrentTime = NumMins(hour(), minute());
// Compute the starting time for the auto salinity calibration
int AutoSalStartTime = NumMins(AUTO_SAL_START_HOUR, AUTO_SAL_START_MINUTE);
// Compute the ending time for the auto salinity calibration by adding in the run time
int AutoSalEndTime = AutoSalStartTime + AUTO_SAL_RUN_TIME;
// Check if it's time to start the auto salinity calibration
if ( AutoSalStartTime == CurrentTime ) {
// Switch to Salinity Calibration ONLY if we are on the main / default menu
// Don't switch to the calibration menu if we are doing something else (water change, feeding, etc)
if ( (ReefAngel.DisplayedMenu == DEFAULT_MENU) || (ReefAngel.DisplayedMenu == MAIN_MENU) ) {
ReefAngel.ChangeMode = SAL_CALIBRATE_MENU;
}
}
// Check if we are at the end of the Run Time for the auto salinity calibration
if ( AutoSalEndTime == CurrentTime ) {
// Simulate a button press ONLY if we are still on the Salinity Calibration menu screen
if (ReefAngel.DisplayedMenu == SAL_CALIBRATE_MENU) {
ButtonPress++;
}
}
////// Place your custom code above here
// This should always be the last line
ReefAngel.Portal( "howaboutme" );
ReefAngel.ShowInterface();
}
awesome!howaboutme wrote:this morning was the first scheduled auto calibration. looks like everything went smoothly. thank you!