Auto Water Change Code

Do you have a question on how to do something.
Ask in here.
Post Reply
User avatar
lnevo
Posts: 5430
Joined: Fri Jul 20, 2012 9:42 am

Re: Auto Water Change Code

Post by lnevo »

Try this. It will wait for a joystick up movement before moving to the fill stage

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

byte wc_status = 0;

////// Place global variable code above here


void setup()
{
// This must be the first line
ReefAngel.Init(); //Initialize controller
ReefAngel.AddStandardMenu(); // Add Standard Menu

ReefAngel.Use2014Screen(); // Let's use 2014 Screen 
ReefAngel.AddMultiChannelWaterLevelExpansion(); // Multi-Channel Water Level Expanion Module
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = Port2Bit | Port5Bit | Port6Bit | Port8Bit;
ReefAngel.FeedingModePortsE[0] = 0;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port2Bit | Port5Bit | Port6Bit | Port7Bit | Port8Bit;
ReefAngel.WaterChangePortsE[0] = 0;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = Port1Bit;
ReefAngel.LightsOnPortsE[0] = 0;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port1Bit | Port5Bit | Port6Bit | Port7Bit;
ReefAngel.OverheatShutoffPortsE[0] = 0;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Set the Overheat temperature setting
InternalMemory.OverheatTemp_write( 850 );


// Ports that are always on
ReefAngel.Relay.On( Port8 );

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

ReefAngel.CustomLabels[0]="LEDs"; 
ReefAngel.CustomLabels[1]="Skimmer"; 
ReefAngel.CustomLabels[2]="SumpToFishQT"; 
ReefAngel.CustomLabels[3]="SumpDrain"; 
ReefAngel.CustomLabels[4]="Wave R"; 
ReefAngel.CustomLabels[5]="Wave L"; 
ReefAngel.CustomLabels[6]="Heaters"; 
ReefAngel.CustomLabels[7]="Constant"; 
ReefAngel.CustomLabels[8]="SumpATO";
ReefAngel.CustomLabels[9]="FishQTATO";
ReefAngel.CustomLabels[10]="FishQTDrain";
ReefAngel.CustomLabels[11]="SaltToSump";

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

void loop()
{
ReefAngel.StandardLights( Port1,16,0,22,0 );
ReefAngel.Relay.DelayedOn( Port2,5 );
ReefAngel.WavemakerRandom( Port5,60,100 );
ReefAngel.WavemakerRandom( Port6,60,100 );
//ReefAngel.Relay.Set( Port6, !ReefAngel.Relay.Status( Port5 ) );
ReefAngel.StandardHeater( Port7,775,785 );
ReefAngel.PWM.SetChannel( 3, PWMParabola(16,0,22,0,10,50,10) );
ReefAngel.PWM.SetChannel( 4, PWMParabola(16,0,22,0,10,50,10) );
ReefAngel.PWM.SetChannel( 5, PWMParabola(16,0,22,0,10,50,10) );
////// Place your custom code below here

//ATO For Main Sump
if (hour()==19 && minute()==0) //Only run ATO between 7:00pm and 7:01pm daily
{
if (ReefAngel.DisplayedMenu == WATERCHANGE_MODE) ReefAngel.Relay.Off(Box1_Port1); //don't run ATO during a water change 
if (ReefAngel.WaterLevel.GetLevel(1)<=70 && ReefAngel.DisplayedMenu != WATERCHANGE_MODE) ReefAngel.Relay.On(Box1_Port1);
if (ReefAngel.WaterLevel.GetLevel(1)>=80) ReefAngel.Relay.Off(Box1_Port1);
}
else
{
ReefAngel.Relay.Off(Box1_Port1);
}


//ATO For Fish QT
if (hour()==19 && minute()==0) //Only run ATO between 7:00pm and 7:01pm daily
{
if (ReefAngel.DisplayedMenu == WATERCHANGE_MODE) ReefAngel.Relay.Off(Box1_Port2); //don't run ATO during a water change 
if (ReefAngel.WaterLevel.GetLevel(3)<=80 && ReefAngel.DisplayedMenu != WATERCHANGE_MODE) ReefAngel.Relay.On(Box1_Port2);
if (ReefAngel.WaterLevel.GetLevel(3)>=90) ReefAngel.Relay.Off(Box1_Port2);
}
else
{
ReefAngel.Relay.Off(Box1_Port2);
}

// Emergency Sump Low Check
if ( ReefAngel.WaterLevel.GetLevel(1) <= 20 && ReefAngel.DisplayedMenu!=WATERCHANGE_MODE && millis() > 5000)
{
ReefAngel.Relay.Off(Port8); //Turn off return pumps
}


//Water Change Process

if(ReefAngel.DisplayedMenu!=WATERCHANGE_MODE && wc_status != 0) wc_status = 0;


//0 - Top Off Sump

if(ReefAngel.DisplayedMenu==WATERCHANGE_MODE && wc_status == 0)
{

if( ReefAngel.WaterLevel.GetLevel(1)<80) ReefAngel.Relay.On(Box1_Port1);
if( ReefAngel.WaterLevel.GetLevel(1)>=80) ReefAngel.Relay.Off(Box1_Port1); 
if( ReefAngel.WaterLevel.GetLevel(1)>=80) wc_status = 1;
}

//1 - Top Off FishQT

if(ReefAngel.DisplayedMenu==WATERCHANGE_MODE && wc_status == 1)
{

if( ReefAngel.WaterLevel.GetLevel(3)<90) ReefAngel.Relay.On(Box1_Port2);
if( ReefAngel.WaterLevel.GetLevel(3)>=90) ReefAngel.Relay.Off(Box1_Port2); 
if( ReefAngel.WaterLevel.GetLevel(3)>=90) wc_status = 2;
}


//2 - Drain FishQT Tank

if(ReefAngel.DisplayedMenu==WATERCHANGE_MODE && wc_status == 2)
{

if( ReefAngel.WaterLevel.GetLevel(3)>85) ReefAngel.Relay.On(Box1_Port3);
if( ReefAngel.WaterLevel.GetLevel(3)<=85) ReefAngel.Relay.Off(Box1_Port3); 
if( ReefAngel.WaterLevel.GetLevel(3)<=85) wc_status = 3;
}

//3 - Fill FishQT From Sump

if(ReefAngel.DisplayedMenu==WATERCHANGE_MODE && wc_status == 3)
{
if( ReefAngel.WaterLevel.GetLevel(3)<90) ReefAngel.Relay.On(Port3);
if( ReefAngel.WaterLevel.GetLevel(3)>=90) ReefAngel.Relay.Off(Port3); 
if( ReefAngel.WaterLevel.GetLevel(3)>=90) wc_status = 4;
}

//4 - Drain Sump To Floor Drain

if(ReefAngel.DisplayedMenu==WATERCHANGE_MODE && wc_status == 4)
{
if( ReefAngel.WaterLevel.GetLevel(2)>75) ReefAngel.Relay.On(Port4);
if( ReefAngel.WaterLevel.GetLevel(2)<=75) ReefAngel.Relay.Off(Port4); 
if( ReefAngel.WaterLevel.GetLevel(2)<=75) wc_status = 5;
}

//5 - Wait for Joystick Move

if (ReefAngel.DisplayedMenu==WATERCHANGE_MODE && wc_status == 5)
{
 if (ReefAngel.Joystick.IsUp()) wc_status=6; 
}

//6 - Fill Sump With Fresh Saltwater

if(ReefAngel.DisplayedMenu==WATERCHANGE_MODE && wc_status == 6)
{
if( ReefAngel.WaterLevel.GetLevel(2)<80) ReefAngel.Relay.On(Box1_Port3);
if( ReefAngel.WaterLevel.GetLevel(2)>=80 && ReefAngel.WaterLevel.GetLevel(1)>=80) ReefAngel.Relay.Off(Box1_Port3); 
if( ReefAngel.WaterLevel.GetLevel(2)>=80 && ReefAngel.WaterLevel.GetLevel(1)>=80) ButtonPress++;
} 
//Water Change Complete




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

// This should always be the last line
ReefAngel.ShowInterface();
}
Post Reply