I can manully toggle it, off and on with my phone.
Code: Select all
#include <Salinity.h>
#include <Relay.h>
#include <RA_ATO.h>
#include <RF.h>
#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 <RF.h>
#include <IO.h>
#include <ORP.h>
#include <PH.h>
#include <WaterLevel.h>
#include <ReefAngel.h>
////// Place global variable code below here
byte myRFMode=0;
byte myRFDuration=0;
byte myRFSpeed=0;
////// Place global variable code above here
void setup()
{
// This must be the first line
ReefAngel.Init(); //Initialize controller
// Ports toggled
ReefAngel.WaterChangePorts = Port1 |Port3 | Port7| Port8| Box1_Port1| Box1_Port3| Box1_Port4| Box1_Port5; // Turn off Return, UV, Skimmer, Heater, Sump Equipment, ATO
ReefAngel.FeedingModePorts = Port3 | Port8; // Turn off Return and Skimmer
ReefAngel.LightsOnPorts = Port2|Box1_Port6; //Turn on ATI lights, Fan and Fuge Light
ReefAngel.OverheatShutoffPorts = Port1 |Port3 | Port7| Port8| Box1_Port1| Box1_Port3| Box1_Port4| Box1_Port5; // ATI Lights and Heaters
ReefAngel.TempProbe = T2_PROBE;
ReefAngel.OverheatProbe = T2_PROBE;
InternalMemory.OverheatTemp_write( 825 ); // Set the Overheat temperature setting
// Ports that are always on
////// Place additional initialization code above here
}
void loop()
{
//Box1
ReefAngel.StandardHeater(Port1,778,790 ); // Port1 Heater
ReefAngel.StandardLights( Port2,23,0,9,0 ); // Fuge Light
ReefAngel.Relay.On(Port3); // Port3 Return Pump -- Always on
ReefAngel.Relay.Off(Port4); // Port4 RODI
ReefAngel.Relay.Off(Port5); // Port5 Saltwater Change
ReefAngel.SingleATO( true,Port6,300,0 ); //Port 6 Auto top off
// ReefAngel.Relay.Set(Port6, ReefAngel.HighATO.IsActive()); //Turns port 6 off when High ATO is on
ReefAngel.Relay.On (Port7); // Port7 Frag Tank -- Always on
ReefAngel.Relay.On( Port8); // Port8 Skimmer -- 5 min delay start
ReefAngel.UseFlexiblePhCalibration();
//box 2 (Box1_Portxx)
ReefAngel.StandardHeater( Box1_Port1,778,790 ); // 9 Box1_Port1 Heater
ReefAngel.Relay.Off(Box1_Port2); // 10 Box1_Port2 Acropower Dosing ...
ReefAngel.Relay.Off( Box1_Port3); // 11 Box1_Port3 UV - Only turn on UV Sterilizer between 11pm and 4am
if ( (hour() >= 4) && (hour() < 23) )
ReefAngel.Relay.Off(Box1_Port3);
else ReefAngel.Relay.On(Box1_Port3);
ReefAngel.Relay.On( Box1_Port4); // 12 Box1_Port4 Sump Equipment-- Always on
ReefAngel.Relay.Off(Box1_Port5); // 13 Box1_Port5 JBJ Auto top off
ReefAngel.Relay.On(Box1_Port6); // 14 Box1_Port6 Cabinet Light
ReefAngel.Relay.On( Box1_Port7); // 15 Box1_Port7 Recirc CalRX
ReefAngel.PHControl( Box1_Port8,650,640); // 16 Box1_Port8 Regulator
// ReefAngel.Relay.On( Box1_Port8); // 16 Box1_Port8 Regulator
// ReefAngel.PHControl( Port1,703,822 );
// Old Code
//moonlight dimming
// if (hour()>=6 && hour()<10) ReefAngel.PWM.SetDaylight( PWMParabola(6,0,10,0,9,100,9) ); // Moonlight Between 5-10am turn the relay on
// if (hour()>=20 && hour()<=23) ReefAngel.PWM.SetDaylight( PWMParabola(20,0,23,0,100,0,100) ); // From 8pm-Midnight turn the relay on
// else ReefAngel.PWM.SetDaylight(0);
// ReefAngel.Relay.Set( Port2, !ReefAngel.Relay.Status( Port4 ) ); //Refuge opposite of Actinic
// ReefAngel.Relay.Off( Box1_Port3); // Start with the relay off Port #11 Moonlight
//if (hour()>=5 && hour()<10) ReefAngel.Relay.On(Box1_Port3); // Moonlight Between 5-10am turn the relay on
//if (hour()>=20 && hour()<=23) ReefAngel.Relay.On(Box1_Port3); // From 8pm-Midnight turn the relay
// ReefAngel.PWM.SetDaylight( PWMSlope(20,0,23,0,100,0,180,100) );
// ReefAngel.PWM.SetDaylight( PWMSlope(6,0,10,0,9,100,240,9) );
//ReefAngel.Relay.off(Box1_Port3);
// if (hour()>=10 || hour()<20) ReefAngel.PWM.SetDaylight(0);
// ReefAngel.PWM.SetDaylight( MoonPhase()+10 );
// ReefAngel.PWM.SetDaylight(PWMParabola(20,0,23,0,0, MoonPhase(),0 ));
//ReefAngel.PWM.SetDaylight(PWMSlope(6,0,23,0,0,100,240,0));
//if (hour()>=5 && hour()<20) ReefAngel.PWM.SetDaylight(0);
//ReefAngel.PWM.SetDaylight( PWMParabola(20,0,23,0,100,0,100) );
//ReefAngel.PWM.SetDaylight( PWMParabola(6,0,10,0,9,100,9) );
////// Place your custom code below here
ReefAngel.RF.UseMemory = false;
if (hour()>=6 && hour()<11)
myRFSetMode(ReefCrest,85,10);
else if (hour()>=11 && hour()<13)
myRFSetMode(ReefCrest,85,10);
else if (hour()>=13 && hour()<16)
myRFSetMode(Smart_NTM,85,50);
else if (hour()>=16 && hour()<19)
myRFSetMode(ReefCrest,65,10);
else
myRFSetMode(Lagoon,40,10);
// Hardcode PH calibrations
//ReefAngel.PHMin=544; // PH7.0
//ReefAngel.PHMax=830; // PH10.0
// RunDosingPumps();
// LogDosingPumps();
////// Place your custom code above here
// This should always be the last line
ReefAngel.Portal( "ecam" );
ReefAngel.ShowInterface();
}
void DrawCustomMain()
{
pingSerial();
// Parameters
#if defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 48, ReefAngel.Params,
ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue() );
#else // defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 48, ReefAngel.Params );
#endif // defined DisplayLEDPWM && ! defined RemoveAllLights
pingSerial();
char text[10];
ConvertNumToString(text, ReefAngel.Params.Salinity, 10);
strcat(text," ");
ReefAngel.LCD.DrawText(DefaultFGColor,DefaultBGColor,15,93,"Salinity:");
ReefAngel.LCD.DrawText(DefaultFGColor,DefaultBGColor,75,93,text);
pingSerial();
// Main Relay Box
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
ReefAngel.LCD.DrawOutletBox( 12, 94, TempRelay );
pingSerial();
// Date and Time
ReefAngel.LCD.DrawDate( 6, 122 );
pingSerial();
}
/////////////////////////////////////////
// Define Your dosing pumps
/////////////////////////////////////////
//#define numDPumps 3
// byte pumpRelays[numDPumps]={ Box1_Port2};
// int DPVolume[numDPumps]={ 0, 25,28} ; // 1ml for each alk and calcium - total volume for the day
//int DPRepeat[numDPumps]={ 360, 240, 240 } ; // Repeat every 4 hrs 6x a day --- in mins
/////////////////////////////////////////
// Define Calibration here
/////////////////////////////////////////
// int CalTime[numDPumps]={ 600, 600, 600 }; // 10 minutes / 10 minutes
//int CalVol[numDPumps]={ 350, 300,384 }; // 350ml / 300ml... .58 / .5/.64
/////////////////////////////////////////
// Function: RunDosingPumps()
/////////////////////////////////////////
//void RunDosingPumps() {
//float rate;
//int calcTime[numDPumps];
// for (int i=0;i < numDPumps; i++) {
// rate=(float)CalVol[i]/CalTime[i];
// calcTime[i]=DPVolume[i]/rate/(1440/DPRepeat[i]);
// Run the pumps
// ReefAngel.DosingPumpRepeat(pumpRelays[i], i*5, DPRepeat[i], calcTime[i]); // Offset between each pump is 5 minutes
// }
// Display Time calculated in portal
// ReefAngel.CustomVar[0]=calcTime[0];
// ReefAngel.CustomVar[1]=calcTime[1];
///ReefAngel.CustomVar[2]=calcTime[2];
// }
/////////////////////////////////////////
// Function: LogDosingPumps()
/////////////////////////////////////////
//void LogDosingPumps() {
//static time_t pumpTimer[numDPumps];
//static boolean pumpStatus[numDPumps];
//float rate;
//for (int i=0;i< numDPumps;i++) {
// if (ReefAngel.Relay.Status(pumpRelays[i])) {
// if (!pumpStatus[i]) {
// pumpTimer[i]=now()-pumpTimer[i]; // Pump was off, timer is now a time
//pumpStatus[i]=true;
// }
// } else {
// if (pumpStatus[i]) {
// pumpTimer[i]=now()-pumpTimer[i]; // Pump was on, timer is now a timer
// pumpStatus[i]=false;
// rate=(float)CalVol[i]/CalTime[i];
// Report How much volume has been dosed per day.
// Could make this in minutes... excercise for the reader..
// ReefAngel.CustomVar[3]=pumpTimer[0]*rate;
//ReefAngel.CustomVar[4]=pumpTimer[1]*rate;
//ReefAngel.CustomVar[5]=pumpTimer[2]*rate;
// }
// }
// Clear timer at end of day
// if (now()%SECS_PER_DAY==SECS_PER_DAY-1) pumpTimer[i]=0;
// }
// }
void DrawCustomGraph()
{
}
void myRFSetMode(byte m, byte s, byte d)
{
if (m!=myRFMode || s!=myRFSpeed || d!=myRFDuration || millis()<5000)
{
myRFMode=m;
myRFSpeed=s;
myRFDuration=d;
ReefAngel.RF.SetMode(m,s,d);
}
}