previous is fine, but as today i connected with new salinity module and changed ports sequence. my relay box act very strange as shutdown randomly or sometime flash on as well.
im not sure is there any problem with my code as shown below. (checked relay box, dimming expansion, or RA + works fine individually)
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 <ReefAngel.h>
// Define Relay Ports by Name
#define Return 1
#define ATOPump 2
#define Skimmer 3
#define ZeovitShake 4
#define Wavepump1 5
#define Wavepump2 6
#define Relay_Box2 7
#define Heater 8
#define T5_Channel1 Box1_Port1
#define T5_Channel2 Box1_Port2
#define T5_Channel3 Box1_Port3
#define ZEO_ST3 Box1_Port4
#define ZEO_SP Box1_Port5
#define CaHCO3 Box1_Port6
#define ZEO_BB Box1_Port7
#define ZEO_KB Box1_Port8
// Define Custom Memory Locations
////// 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.SetTemperatureUnit( Celsius ); // set to Celsius Temperature
ReefAngel.Use2014Screen(); // Let's use 2014 Screen
ReefAngel.AddSalinityExpansion(); // Salinity Expansion Module
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = Port1Bit | Port2Bit | Port3Bit | Port5Bit | Port6Bit | Port8Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port1Bit | Port2Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = 0;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port8Bit;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T3_PROBE;
ReefAngel.OverheatProbe = T2_PROBE;
// Feeeding and Water Change mode speed
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;
ReefAngel.DCPump.FeedingSpeed=0;
ReefAngel.DCPump.WaterChangeSpeed=0;
// Ports that are always on
ReefAngel.Relay.On(Return);
ReefAngel.Relay.On(Wavepump1);
ReefAngel.Relay.On(Wavepump2);
ReefAngel.Relay.On(Relay_Box2);
////// Place additional initialization code below here
ReefAngel.CustomLabels[0]="ReturnPump";
ReefAngel.CustomLabels[1]="ATOPump";
ReefAngel.CustomLabels[2]="Skimmer";
ReefAngel.CustomLabels[3]="ZeovitShake";
ReefAngel.CustomLabels[4]="WavePump1";
ReefAngel.CustomLabels[5]="WavePump2";
ReefAngel.CustomLabels[6]="Relay_Box2";
ReefAngel.CustomLabels[7]="Heater";
////// Place additional initialization code above here
}
void loop()
{
//single ATO
ReefAngel.SingleATO(true,ATOPump,90,1);
ReefAngel.StandardHeater(Heater);
ReefAngel.Relay.DelayedOn(Skimmer);
// T5 light setup
//ReefAngel.MoonLights(LunaLED);
ReefAngel.DosingPumpRepeat1(ZeovitShake);
ReefAngel.StandardLights(T5_Channel2);
ReefAngel.PWM.SetChannel(0,ReefAngel.Relay.Status(T5_Channel1)*100);
ReefAngel.DayLights(T5_Channel1);
ReefAngel.PWM.SetChannel(1,ReefAngel.Relay.Status(T5_Channel3)*100);
ReefAngel.ActinicLights(T5_Channel3);
ReefAngel.PWM.SetChannel(2,ReefAngel.Relay.Status(T5_Channel2)*100);
//dosing pump setup
if (hour()==22 && minute()==31 && second()<26) //Dosing ST3 at 22:31
{
ReefAngel.Relay.On(ZEO_ST3);
}
else if (hour()==6 && minute()==31 && second()<26) //Dosing ST3 at 6:31
{
ReefAngel.Relay.On(ZEO_ST3);
}
else
{
ReefAngel.Relay.Off(ZEO_ST3);
}
ReefAngel.PWM.SetChannel(3,ReefAngel.Relay.Status(ZEO_ST3)*100);
if (hour()==22 && minute()==32 && second()<50)
{
ReefAngel.Relay.On(ZEO_SP);
}
else
{
ReefAngel.Relay.Off(ZEO_SP);
}
ReefAngel.PWM.SetChannel(4,ReefAngel.Relay.Status(ZEO_SP)*100);
ReefAngel.DosingPumpRepeat2(CaHCO3);
ReefAngel.PWM.SetChannel(5,ReefAngel.Relay.Status(CaHCO3)*100);
//wave pump setup
ReefAngel.DCPump.UseMemory = true;
if (now() % SECS_PER_DAY >= 8 * SECS_PER_HOUR && now() % SECS_PER_DAY < (8 * SECS_PER_HOUR + 10 * SECS_PER_MIN) )
{
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.SetMode(Lagoon,60,20);//Set 6105 to 60% speed with pulse in Lagoon Mode from 9:00~9:10
}
else if (now() % SECS_PER_DAY >= (8 * SECS_PER_HOUR + 10 * SECS_PER_MIN) && now() % SECS_PER_DAY < (10 * SECS_PER_HOUR + 30 * SECS_PER_MIN) )
{
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.SetMode(TidalSwell,60,20); //Set 6105 to 55% speed with 20ms pulse in Tidal Swell Mode
}
else if (now() % SECS_PER_DAY >= (10 * SECS_PER_HOUR + 30 * SECS_PER_MIN) && now() % SECS_PER_DAY < (11 * SECS_PER_HOUR + 10 * SECS_PER_MIN) )
{
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.SetMode(LongPulse,55,15);//Set 6105 to 60% speed with pulse in ReefCrest Mode
}
else if (now() % SECS_PER_DAY >= (11 * SECS_PER_HOUR + 10 * SECS_PER_MIN) && now() % SECS_PER_DAY < (12 * SECS_PER_HOUR + 0 * SECS_PER_MIN) )
{
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.SetMode(ReefCrest,60,20);;//Set 6105 to 55% speed with Long pulse Mode
}
else if (now() % SECS_PER_DAY >= (12 * SECS_PER_HOUR + 0 * SECS_PER_MIN) && now() % SECS_PER_DAY < 15 * SECS_PER_HOUR )
{
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.SetMode(TidalSwell,55,20); //Set 6105 to 45% speed with 20ms pulse in Tidal Swell Mode
}
else if (now() % SECS_PER_DAY >= 15 * SECS_PER_HOUR && now() % SECS_PER_DAY < (17 * SECS_PER_HOUR + 30 * SECS_PER_MIN) )
{
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.SetMode(ReefCrest,60,20);//Set RW8 to 40% speed with Lagoon Pulse Mode
}
else if (now() % SECS_PER_DAY >= (17 * SECS_PER_HOUR + 30 * SECS_PER_MIN) && now() % SECS_PER_DAY < (18 * SECS_PER_HOUR + 30 * SECS_PER_MIN))
{
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.SetMode(ShortPulse,70,34);//Set 6105 to 65% speed with ShortPulse Mode
}
else if (now() % SECS_PER_DAY >= (18 * SECS_PER_HOUR + 30 * SECS_PER_MIN) && now() % SECS_PER_DAY < (19 * SECS_PER_HOUR + 00 * SECS_PER_MIN) )
{
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.SetMode(Lagoon,60,20);//Set 6105 to 55% speed with pulse in Lagoon Mode
}
else if (now() % SECS_PER_DAY >= (19 * SECS_PER_HOUR + 0 * SECS_PER_MIN) && now() % SECS_PER_DAY < 20 * SECS_PER_HOUR )
{
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.SetMode(TidalSwell,50,20); //Set 6105 to 85% speed with 20ms pulse in Tidal Swell Mode
}
else if (now() % SECS_PER_DAY >= 20 * SECS_PER_HOUR && now() % SECS_PER_DAY < (22 * SECS_PER_HOUR + 30 * SECS_PER_MIN) )
{
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.SetMode(ReefCrest,55,20);//Set 6105 to 70% speed with Lagoon Pulse Mode
}
else if (now() % SECS_PER_DAY >= (22 * SECS_PER_HOUR + 30 * SECS_PER_MIN) && now() % SECS_PER_DAY < (22 * SECS_PER_HOUR + 35 * SECS_PER_MIN) )
{
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.SetMode(Lagoon,70,20);//Set 6105 to 90% speed with pulse in Lagoon Mode, dossing coral feed.
}
else
{
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.SetMode(NutrientTransport,35,30);
}
// Set timer when in feeding mode
static unsigned long feeding;
if (ReefAngel.DisplayedMenu==FEEDING_MODE) feeding=now();
if (now()-feeding< 1 *SECS_PER_HOUR) {
// Continue NTM for the 60 minutes
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.SetMode(NutrientTransport,35,30);
}
//Autofeeder
if ( ((hour() == 18)) && (minute() == 58) &&(second() == 30) ) ReefAngel.FeedingModeStart();
if ( ((hour() == 9)) && (minute() == 28) &&(second() == 0) ) ReefAngel.FeedingModeStart();
if ( ((hour() == 14)) && (minute() == 28) &&(second() == 0) ) ReefAngel.FeedingModeStart();
//Skimmer off 1.5 hours when coral feeding.
if (now()%SECS_PER_DAY >= (22 * SECS_PER_HOUR + 30 * SECS_PER_MIN) && now()%SECS_PER_DAY < (23 * SECS_PER_HOUR + 30 * SECS_PER_MIN) )
{
ReefAngel.Relay.Off(Skimmer);
}
////// Place your custom code below here
ReefAngel.UseFlexiblePhCalibration();
// Power Outage - turn off everything
// Turn off Skimmer if Return pump has been shutoff.
if (!ReefAngel.Relay.Status(Return)) {
ReefAngel.Relay.Off(Skimmer);
ReefAngel.Relay.Off(Heater);
}
////// Place your custom code above here
// This should always be the last line
ReefAngel.Portal( "sesame");
ReefAngel.ShowInterface();
}