Need help with controller
Posted: Tue Nov 19, 2013 9:39 pm
Hi. I have had a Reef Angel for a couple of years now. It has mostly worked correctly, but I am having a lot of problem lately.
I have recently added a second relay, and maybe that is creating the problem. After a couple of hours I find that the controller will not work any more (e.g., lights will not turn on). It would basically keep the settings fixed. When I check the controller, I find the Status light blinking constantly, and the time and date be very far in the future (e.g., 11/29/2039). When I unplug and replug the controller, this gets fixed (correct time and date, normal functioning) for some hours and then eventually it stops working again.
Below is the code. Please help! What is happening? How do I fix this? Thanks!
#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 <ReefAngel.h>
////// Place global variable code below here
// Define Relay Ports by Name
#define MainLights 1
#define Actinics 2
#define LightFans 4
#define Unused1 3
#define Unused2 5
#define ATOPump 6
#define Skimmer 7
#define Return 8
#define MP401 Box1_Port1
#define MP402 Box1_Port2
#define Sump Box1_Port3
#define MP10 Box1_Port4
#define DPump1 Box1_Port5
#define DPump2 Box1_Port6
#define Reactor Box1_Port7
#define Unused3 Box1_Port8
////// Place global variable code above here
void setup()
{
// This must be the first line
ReefAngel.Init(); //Initialize controller
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = Port7Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port7Bit | Port8Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = 0;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port1Bit | Port2Bit | Port7Bit;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Ports that are always on
ReefAngel.Relay.On( Skimmer );
ReefAngel.Relay.On( Return );
ReefAngel.Relay.On( MP401 );
ReefAngel.Relay.On( MP402 );
ReefAngel.Relay.On( MP10 );
ReefAngel.Relay.On( Sump );
////// Place additional initialization code below here
////// Place additional initialization code above here
}
void loop()
{
ReefAngel.DayLights( MainLights );
ReefAngel.ActinicLights( Actinics );
ReefAngel.ActinicLights( LightFans );
ReefAngel.WaterLevelATO( ATOPump );
ReefAngel.DosingPump1( DPump1 );
ReefAngel.DosingPump2( DPump2 );
//ReefAngel.DosingPumpRepeat3( Reactor);
//ReefAngel.StandardHeater( Heater );
// Pumps for night mode, start with lagoon, short pulse most of the day
if (ReefAngel.DisplayedMenu!=FEEDING_MODE || ReefAngel.DisplayedMenu!=WATERCHANGE_MODE)
{
if (hour()>=21 && hour()<=22)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(LongWave,60,3);
}
else if (hour()>=23 || hour()<9)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(ReefCrest,40,0);
}
else if (hour()>=9 && hour()<=10)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(LongWave,60,3);
}
else
{
ReefAngel.RF.UseMemory=true;
}
}
//Start feedmode when the feeder will kick in
//if ( (now()%86400==39480) || (now()%86400==50280) || (now()%86400==61080) )
// {
// ReefAngel.FeedingModeStart();
// }
// This should always be the last line
ReefAngel.Portal( "lucho" );
ReefAngel.ShowInterface();
}
void DrawCustomMain()
{
int x,y;
char text[10];
// Parameters
#if defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 20, ReefAngel.Params,
ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue() );
#else // defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 20, ReefAngel.Params );
#endif // defined DisplayLEDPWM && ! defined RemoveAllLights
pingSerial();
// Water Level
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,75,66, "WL:" );
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,99,66, ReefAngel.WaterLevel.GetLevel() );
pingSerial();
// Main Relay Box
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
ReefAngel.LCD.DrawOutletBox( 12, 92, TempRelay );
pingSerial();
// Date and Time
ReefAngel.LCD.DrawDate( 6, 122 );
pingSerial();
}
void DrawCustomGraph()
{
}
I have recently added a second relay, and maybe that is creating the problem. After a couple of hours I find that the controller will not work any more (e.g., lights will not turn on). It would basically keep the settings fixed. When I check the controller, I find the Status light blinking constantly, and the time and date be very far in the future (e.g., 11/29/2039). When I unplug and replug the controller, this gets fixed (correct time and date, normal functioning) for some hours and then eventually it stops working again.
Below is the code. Please help! What is happening? How do I fix this? Thanks!
Code: Select all
#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 <ReefAngel.h>
////// Place global variable code below here
// Define Relay Ports by Name
#define MainLights 1
#define Actinics 2
#define LightFans 4
#define Unused1 3
#define Unused2 5
#define ATOPump 6
#define Skimmer 7
#define Return 8
#define MP401 Box1_Port1
#define MP402 Box1_Port2
#define Sump Box1_Port3
#define MP10 Box1_Port4
#define DPump1 Box1_Port5
#define DPump2 Box1_Port6
#define Reactor Box1_Port7
#define Unused3 Box1_Port8
////// Place global variable code above here
void setup()
{
// This must be the first line
ReefAngel.Init(); //Initialize controller
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = Port7Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port7Bit | Port8Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = 0;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port1Bit | Port2Bit | Port7Bit;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Ports that are always on
ReefAngel.Relay.On( Skimmer );
ReefAngel.Relay.On( Return );
ReefAngel.Relay.On( MP401 );
ReefAngel.Relay.On( MP402 );
ReefAngel.Relay.On( MP10 );
ReefAngel.Relay.On( Sump );
////// Place additional initialization code below here
////// Place additional initialization code above here
}
void loop()
{
ReefAngel.DayLights( MainLights );
ReefAngel.ActinicLights( Actinics );
ReefAngel.ActinicLights( LightFans );
ReefAngel.WaterLevelATO( ATOPump );
ReefAngel.DosingPump1( DPump1 );
ReefAngel.DosingPump2( DPump2 );
//ReefAngel.DosingPumpRepeat3( Reactor);
//ReefAngel.StandardHeater( Heater );
// Pumps for night mode, start with lagoon, short pulse most of the day
if (ReefAngel.DisplayedMenu!=FEEDING_MODE || ReefAngel.DisplayedMenu!=WATERCHANGE_MODE)
{
if (hour()>=21 && hour()<=22)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(LongWave,60,3);
}
else if (hour()>=23 || hour()<9)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(ReefCrest,40,0);
}
else if (hour()>=9 && hour()<=10)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(LongWave,60,3);
}
else
{
ReefAngel.RF.UseMemory=true;
}
}
//Start feedmode when the feeder will kick in
//if ( (now()%86400==39480) || (now()%86400==50280) || (now()%86400==61080) )
// {
// ReefAngel.FeedingModeStart();
// }
// This should always be the last line
ReefAngel.Portal( "lucho" );
ReefAngel.ShowInterface();
}
void DrawCustomMain()
{
int x,y;
char text[10];
// Parameters
#if defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 20, ReefAngel.Params,
ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue() );
#else // defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 20, ReefAngel.Params );
#endif // defined DisplayLEDPWM && ! defined RemoveAllLights
pingSerial();
// Water Level
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,75,66, "WL:" );
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,99,66, ReefAngel.WaterLevel.GetLevel() );
pingSerial();
// Main Relay Box
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
ReefAngel.LCD.DrawOutletBox( 12, 92, TempRelay );
pingSerial();
// Date and Time
ReefAngel.LCD.DrawDate( 6, 122 );
pingSerial();
}
void DrawCustomGraph()
{
}