Reef Angel Malfunctioning
Re: Reef Angel Malfunctioning
Nothing is happening. Here is the connection and my com is @ 3
Re: Reef Angel Malfunctioning
Made the change to COM1.. getting the error:
libusb0.dll is missing...
libusb0.dll is missing...
Re: Reef Angel Malfunctioning
Sorry... Copy the one you have in C:\Windows\System32 into the folder where your update files are.
Roberto.
Re: Reef Angel Malfunctioning
Just did the firmware and out back online. Will let u know.
Re: Reef Angel Malfunctioning
Just happened again Roberto.
Re: Reef Angel Malfunctioning
Maybe it is not the RF then.
Can you try running without the RF?
Can you try running without the RF?
Roberto.
Re: Reef Angel Malfunctioning
It returns to normal the minute i take off the RF. If it doesn get fixed by tomorrow, Im going to have to take it offline. My light stayed on for over 18 hrs on friday. B\c of this issue
Re: Reef Angel Malfunctioning
Roberto, what can we do about the RF switch? Is it fixable?
Re: Reef Angel Malfunctioning
I'm going to lower the refresh rate in the libraries to see if we can get better results.
Roberto.
Re: Reef Angel Malfunctioning
Okay FYI.
Im not sure if this is relevant. But its never happened before. After removing the RF switch I went out. I came back home around 3:15pm to see my fish tank in the dark (the lights don't go out till 8:15). The head unit was saying the time was 8:30pm. I promptly pulled the plug and its been working fine since.
As for the library update please let me know when i can but the RF switch back online.
Im not sure if this is relevant. But its never happened before. After removing the RF switch I went out. I came back home around 3:15pm to see my fish tank in the dark (the lights don't go out till 8:15). The head unit was saying the time was 8:30pm. I promptly pulled the plug and its been working fine since.
As for the library update please let me know when i can but the RF switch back online.
Re: Reef Angel Malfunctioning
Roberto, any updates?
Re: Reef Angel Malfunctioning
It is going to be on the next release.
There is no target date for next release yet though.
There is no target date for next release yet though.
Roberto.
Re: Reef Angel Malfunctioning
So is there anything I can do for my RF module. or is it just useless, till the new update (say it aint so Roberto). I really like my mode switching.
Please help!!!!
Please help!!!!
Re: Reef Angel Malfunctioning
Try to find out where you are picking up the noise that is causing the issue.
I also checked the libs code and found out that if you use UseMemory=false, which I think you are, you can change the refresh yourself.
Can you post your code?
I also checked the libs code and found out that if you use UseMemory=false, which I think you are, you can change the refresh yourself.
Can you post your code?
Roberto.
Re: Reef Angel Malfunctioning
here you go roberto. Also what noise are you referring to for the RF switch. The only change to my setup has been that I now run 4 MP40s as opposed to 2.
Code: Select all
#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 <Salinity.h>
#include <RF.h>fa
#include <IO.h>
#include <ORP.h>
#include <AI.h>
#include <PH.h>
#include <WaterLevel.h>
#include <ReefAngel.h>
////// Place global variable code below here
////// Place global variable code above here
void setup()
{
// This must be the first line
ReefAngel.Init(); //Initialize controller
// Ports toggled in Feeding Mode
ReefAngel.WaterChangePorts = Port1Bit | Port8Bit; // Turn off Ports 5 and 6 when Feeding Mode is activated
ReefAngel.FeedingModePorts = Port1Bit | Port6Bit | Port8Bit; // Turn off Ports 1, 6, 7 and 8 when Water Change Mode is activated
ReefAngel.LightsOnPorts = Port2Bit | Port3Bit | Port4Bit| Port5Bit;
ReefAngel.OverheatShutoffPorts = Port2Bit |Port3Bit | Port4Bit | Port5Bit | Port7Bit; // Turn off Ports 3,
ReefAngel.TempProbe = T3_PROBE;
ReefAngel.OverheatProbe = T3_PROBE;
// Set the Overheat temperature setting
InternalMemory.OverheatTemp_write( 825 );
// Setup ATO Port for AI communication
ReefAngel.AI.SetPort( lowATOPin );
// Ports that are always on
ReefAngel.Relay.On( Port1 );
////// Place additional initialization code below here
////// Place additional initialization code above here
}
void loop()
{ //Port1 Return pump... on all the time!!!
ReefAngel.Relay.Set( Port2, !ReefAngel.Relay.Status( Port4 ) ); //Refuge
ReefAngel.Relay.Off( Port3); // Start with the relay off
if (hour()>=5 && hour()<10) ReefAngel.Relay.On(Port3); // Moonlight Between 5-10am turn the relay on
if (hour()>=20 && hour()<=23) ReefAngel.Relay.On(Port3); // From 8pm-Midnight turn the relay on
ReefAngel.StandardLights( Port4,10,0,20,0 ); //ATI Actinic
ReefAngel.StandardLights( Port5,11,0,19,0 ); //ATI Daylight
ReefAngel.StandardLights( Port6,10,0,20,0 ); //ATI Fan
ReefAngel.StandardHeater( Port7,778,790 ); //Heater
ReefAngel.Relay.DelayedOn( Port8,2 ); //Skimmer
// ReefAngel.AI.SetChannel( White, PWMParabola(11,0,17,0,0,75,0) );
// ReefAngel.AI.SetChannel( Blue, PWMParabola(9,0,20,0,15,100,0) );
// ReefAngel.AI.SetChannel( RoyalBlue, PWMParabola(9,0,20,0,15,100,(MoonPhase()/5)<3 ? 3:MoonPhase()/5) );
ReefAngel.RF.UseMemory = false;
ReefAngel.RF.SetMode( ReefCrest,85,10 );
// ReefAngel.RF.SetChannel( Radion_White, PWMParabola(9,0,20,0,0,60,0) );
// ReefAngel.RF.SetChannel( Radion_RoyalBlue, MoonPhase() );
// ReefAngel.RF.SetChannel( Radion_Red, PWMParabola(9,0,20,0,15,65,15) );
// ReefAngel.RF.SetChannel( Radion_Green, PWMParabola(9,0,20,0,15,50,15) );
// ReefAngel.RF.SetChannel( Radion_Blue, MoonPhase() );
// ReefAngel.RF.SetChannel( Radion_Intensity, PWMParabola(9,0,20,0,15,94,15) );
// if ( second()==0 ) ReefAngel.RF.RadionWrite();
////// Place your custom code below here
ReefAngel.RF.UseMemory = false;
if (hour()>=6 && hour()<11)
ReefAngel.RF.SetMode(ReefCrest,85,10);
else if (hour()>=11 && hour()<13)
ReefAngel.RF.SetMode(ReefCrest,85,10);
else if (hour()>=13 && hour()<16)
ReefAngel.RF.SetMode(Smart_NTM,85,15);
else if (hour()>=16 && hour()<19)
ReefAngel.RF.SetMode(ReefCrest,65,10);
else
ReefAngel.RF.SetMode(Lagoon,40,10);
// Hardcode PH calibrations
//ReefAngel.PHMin=544; // PH7.0
//ReefAngel.PHMax=830; // PH10.0
////// Place your custom code above here
// This should always be the last line
ReefAngel.Portal( "ecam" );
ReefAngel.ShowInterface();
}
void DrawCustomMain()
{
int x,y;
char text[10];
// Aqua Illumination
x = 10;
y = 20;
ReefAngel.LCD.DrawText( COLOR_DODGERBLUE,DefaultBGColor,x,y,"WH:" );
ReefAngel.LCD.DrawText( COLOR_DODGERBLUE,DefaultBGColor,x+38,y,"BL:" );
ReefAngel.LCD.DrawText( COLOR_DODGERBLUE,DefaultBGColor,x+76,y,"RB:" );
for ( int a=0;a<3;a++ )
{
ReefAngel.LCD.DrawText( COLOR_DODGERBLUE,DefaultBGColor,x+18,y,ReefAngel.AI.GetChannel(a) );
x += 38;
}
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();
// 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();
}
void DrawCustomGraph()
{
}
Re: Reef Angel Malfunctioning
To use the new code, you will need to return the RF module to the original firmware.
- Attachments
-
- update.zip
- (423.63 KiB) Downloaded 356 times
Roberto.
Re: Reef Angel Malfunctioning
Try this code:
Code: Select all
#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 <Salinity.h>
#include <RF.h>fa
#include <IO.h>
#include <ORP.h>
#include <AI.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 in Feeding Mode
ReefAngel.WaterChangePorts = Port1Bit | Port8Bit; // Turn off Ports 5 and 6 when Feeding Mode is activated
ReefAngel.FeedingModePorts = Port1Bit | Port6Bit | Port8Bit; // Turn off Ports 1, 6, 7 and 8 when Water Change Mode is activated
ReefAngel.LightsOnPorts = Port2Bit | Port3Bit | Port4Bit| Port5Bit;
ReefAngel.OverheatShutoffPorts = Port2Bit |Port3Bit | Port4Bit | Port5Bit | Port7Bit; // Turn off Ports 3,
ReefAngel.TempProbe = T3_PROBE;
ReefAngel.OverheatProbe = T3_PROBE;
// Set the Overheat temperature setting
InternalMemory.OverheatTemp_write( 825 );
// Setup ATO Port for AI communication
ReefAngel.AI.SetPort( lowATOPin );
// Ports that are always on
ReefAngel.Relay.On( Port1 );
////// Place additional initialization code below here
////// Place additional initialization code above here
}
void loop()
{ //Port1 Return pump... on all the time!!!
ReefAngel.Relay.Set( Port2, !ReefAngel.Relay.Status( Port4 ) ); //Refuge
ReefAngel.Relay.Off( Port3); // Start with the relay off
if (hour()>=5 && hour()<10) ReefAngel.Relay.On(Port3); // Moonlight Between 5-10am turn the relay on
if (hour()>=20 && hour()<=23) ReefAngel.Relay.On(Port3); // From 8pm-Midnight turn the relay on
ReefAngel.StandardLights( Port4,10,0,20,0 ); //ATI Actinic
ReefAngel.StandardLights( Port5,11,0,19,0 ); //ATI Daylight
ReefAngel.StandardLights( Port6,10,0,20,0 ); //ATI Fan
ReefAngel.StandardHeater( Port7,778,790 ); //Heater
ReefAngel.Relay.DelayedOn( Port8,2 ); //Skimmer
// ReefAngel.AI.SetChannel( White, PWMParabola(11,0,17,0,0,75,0) );
// ReefAngel.AI.SetChannel( Blue, PWMParabola(9,0,20,0,15,100,0) );
// ReefAngel.AI.SetChannel( RoyalBlue, PWMParabola(9,0,20,0,15,100,(MoonPhase()/5)<3 ? 3:MoonPhase()/5) );
// ReefAngel.RF.UseMemory = false;
// ReefAngel.RF.SetMode( ReefCrest,85,10 );
// ReefAngel.RF.SetChannel( Radion_White, PWMParabola(9,0,20,0,0,60,0) );
// ReefAngel.RF.SetChannel( Radion_RoyalBlue, MoonPhase() );
// ReefAngel.RF.SetChannel( Radion_Red, PWMParabola(9,0,20,0,15,65,15) );
// ReefAngel.RF.SetChannel( Radion_Green, PWMParabola(9,0,20,0,15,50,15) );
// ReefAngel.RF.SetChannel( Radion_Blue, MoonPhase() );
// ReefAngel.RF.SetChannel( Radion_Intensity, PWMParabola(9,0,20,0,15,94,15) );
// if ( second()==0 ) ReefAngel.RF.RadionWrite();
////// 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,15);
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
////// Place your custom code above here
// This should always be the last line
ReefAngel.Portal( "ecam" );
ReefAngel.ShowInterface();
}
void DrawCustomMain()
{
int x,y;
char text[10];
// Aqua Illumination
x = 10;
y = 20;
ReefAngel.LCD.DrawText( COLOR_DODGERBLUE,DefaultBGColor,x,y,"WH:" );
ReefAngel.LCD.DrawText( COLOR_DODGERBLUE,DefaultBGColor,x+38,y,"BL:" );
ReefAngel.LCD.DrawText( COLOR_DODGERBLUE,DefaultBGColor,x+76,y,"RB:" );
for ( int a=0;a<3;a++ )
{
ReefAngel.LCD.DrawText( COLOR_DODGERBLUE,DefaultBGColor,x+18,y,ReefAngel.AI.GetChannel(a) );
x += 38;
}
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();
// 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();
}
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);
}
}
Roberto.
Re: Reef Angel Malfunctioning
rimai wrote:To use the new code, you will need to return the RF module to the original firmware.
Roberto, i was regarding in one of the post that you thought the dimming home might be having adverse affects with the Angel. Should i try disconnect the hub and finding out if that works?
http://forum.reefangel.com/viewtopic.php?f=12&t=3865
Cause this same thing happened to me last weekend. With the time changing on me.
Re: Reef Angel Malfunctioning
Yes, same problem. It's related to the expansion bus signal.
The 2 modules that can do that are the old dimming module and the RF module.
But if you replaced the twi.c, you should not see the controller blinking and the time changing. Your controller should reboot instead.
I'm thinking some interference noise is causing your RF module to lockup, which causes all that.
The 2 modules that can do that are the old dimming module and the RF module.
But if you replaced the twi.c, you should not see the controller blinking and the time changing. Your controller should reboot instead.
I'm thinking some interference noise is causing your RF module to lockup, which causes all that.
Roberto.
Re: Reef Angel Malfunctioning
rimai wrote:Yes, same problem. It's related to the expansion bus signal.
The 2 modules that can do that are the old dimming module and the RF module.
But if you replaced the twi.c, you should not see the controller blinking and the time changing. Your controller should reboot instead.
I'm thinking some interference noise is causing your RF module to lockup, which causes all that.
What kind of interference, am i looking for?
I haven't really added any electric devices in my tank area, expect for the new MP40s and your new modules
Re: Reef Angel Malfunctioning
rOBERTO I RAN THIS UPDATE I SAW THE INITIAL 3 LIGHT FLASH AND THE ENDING AND NOTHING IN BETWEEN.. dID IT WORK?rimai wrote:To use the new code, you will need to return the RF module to the original firmware.
Re: Reef Angel Malfunctioning
Roberto just happened again with the old firmware restored. Any other ideas?
Re: Reef Angel Malfunctioning
Did you load the code I posted?
Does it work ok without the RF module?
Does it work ok without the RF module?
Roberto.
Re: Reef Angel Malfunctioning
Dont understand the question.. but will try to answer a few possible version;
When the RF module fails. It puts my RA into a flashing red status on the head unit at which points it no longer takes instructions. whatever it is doing at the time of the freeze will continue. (i.e: my lights were on for over 18 hrs one day!!!! i disconnect the module and everything goes back o normal.
When the RF module fails. It puts my RA into a flashing red status on the head unit at which points it no longer takes instructions. whatever it is doing at the time of the freeze will continue. (i.e: my lights were on for over 18 hrs one day!!!! i disconnect the module and everything goes back o normal.
Re: Reef Angel Malfunctioning
Code: Select all
#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>fafa
#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>fa
#include <IO.h>
#include <ORP.h>
#include <AI.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 in Feeding Mode
ReefAngel.WaterChangePorts = Port1Bit | Port8Bit; // Turn off Ports 5 and 6 when Feeding Mode is activated
ReefAngel.FeedingModePorts = Port1Bit | Port6Bit | Port8Bit; // Turn off Ports 1, 6, 7 and 8 when Water Change Mode is activated
ReefAngel.LightsOnPorts = Port2Bit | Port3Bit | Port4Bit| Port5Bit;
ReefAngel.OverheatShutoffPorts = Port2Bit |Port3Bit | Port4Bit | Port5Bit | Port7Bit; // Turn off Ports 3,
ReefAngel.TempProbe = T3_PROBE;
ReefAngel.OverheatProbe = T3_PROBE;
// Set the Overheat temperature setting
InternalMemory.OverheatTemp_write( 825 );
// Setup ATO Port for AI communication
// ReefAngel.AI.SetPort( lowATOPin );
// Ports that are always on
ReefAngel.Relay.On( Port1 );
ReefAngel.Relay.On( Box1_Port2 ); // Razor Led
ReefAngel.Relay.On( Box1_Port4 ); // Sump Equipment - UV, Pump
ReefAngel.Relay.On( Box1_Port5 ); // MP40s
ReefAngel.Relay.On( Box1_Port6 ); // JBJ
////// Place additional initialization code below here
////// Place additional initialization code above here
}
void loop()
{
// Port1 Return pump... on all the time!!!
ReefAngel.Relay.Set( Port2, !ReefAngel.Relay.Status( Port4 ) ); //Refuge
// Port3 ... not used
ReefAngel.StandardLights( Port4,10,0,20,0 ); //ATI Actinic
ReefAngel.StandardLights( Port5,11,0,19,0 ); //ATI Daylight
ReefAngel.StandardLights( Port6,10,0,20,0 ); //ATI Fan
ReefAngel.StandardHeater( Port7,778,790 ); //Heater
ReefAngel.Relay.DelayedOn( Port8,2 ); //Skimmer
//box 2
ReefAngel.Relay.Off( Box1_Port1); // Lunar Hub Not used Port #9
// Box1_Port2 Razor_LED (Sump)... on all the time!!! Port #10
ReefAngel.Relay.Off( Box1_Port3); // Start with the relay off Port #11
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 on
// Box1_Port4 Ecotech MP_40 Pumps on all the time!!! Port #12
// Box1_Port5 Razor_LED (Sump)... on all the time!!! Port #13
// Box1_Port6 JBJ ATO ... on all the time!!! Port #14
ReefAngel.Relay.Off( Box1_Port7); // ALK Doser ... Port #15
ReefAngel.Relay.Off( Box1_Port8); // Calc Doser ... Port #16
ReefAngel.PWM.SetDaylight( MoonPhase() );
// ReefAngel.PWM.SetDaylight(PWMParabola(20,0,23,0,0, MoonPhase(),0 ));
// ReefAngel.AI.SetChannel( White, PWMParabola(11,0,17,0,0,75,0) );
// ReefAngel.AI.SetChannel( Blue, PWMParabola(9,0,20,0,15,100,0) );
// ReefAngel.AI.SetChannel( RoyalBlue, PWMParabola(9,0,20,0,15,100,(MoonPhase()/5)<3 ? 3:MoonPhase()/5) );
ReefAngel.RF.UseMemory = false;
ReefAngel.RF.SetMode( ReefCrest,85,10 );
// ReefAngel.RF.SetChannel( Radion_White, PWMParabola(9,0,20,0,0,60,0) );
// ReefAngel.RF.SetChannel( Radion_RoyalBlue, MoonPhase() );
// ReefAngel.RF.SetChannel( Radion_Red, PWMParabola(9,0,20,0,15,65,15) );
// ReefAngel.RF.SetChannel( Radion_Green, PWMParabola(9,0,20,0,15,50,15) );
// ReefAngel.RF.SetChannel( Radion_Blue, MoonPhase() );
// ReefAngel.RF.SetChannel( Radion_Intensity, PWMParabola(9,0,20,0,15,94,15) );
// if ( second()==0 ) ReefAngel.RF.RadionWrite();
/////////////////////////////////////////
// Define Your dosing pumps
/////////////////////////////////////////
#define numDPumps 2
byte pumpRelays[numDPumps]={ Box1_Port7, Box1_Port8 };
int DPVolume[numDPumps]={ 30, 30 } ; // 30ml for each alk and calcium
int DPRepeat[numDPumps]={ 60, 60 } ; // Repeat every 60 miniutes
/////////////////////////////////////////
// Define Calibration here
/////////////////////////////////////////
int CalTime[numDPumps]={ 600, 600 }; // 10 minutes / 10 minutes
int CalVol[numDPumps]={ 350, 300 }; // 350ml / 300ml
/////////////////////////////////////////
// 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*20, DPRepeat[i], calcTime[i]); // Offset between each pump is 20 minutes
}
// Display Time calculated in portal
ReefAngel.CustomVar[0]=calcTime[0];
ReefAngel.CustomVar[1]=calcTime[1];
}
/////////////////////////////////////////
// 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[2]=pumpTimer[0]*rate;
ReefAngel.CustomVar[3]=pumpTimer[1]*rate;
}
}
// Clear timer at end of day
if (now()%SECS_PER_DAY==SECS_PER_DAY-1) pumpTimer[i]=0;
}
}
////// 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,15);
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
////// Place your custom code above here
// This should always be the last line
ReefAngel.Portal( "ecam" );
ReefAngel.ShowInterface();
}
void DrawCustomMain()
{
int x,y;
char text[10];
// Aqua Illumination
x = 10;
y = 20;
ReefAngel.LCD.DrawText( COLOR_DODGERBLUE,DefaultBGColor,x,y,"WH:" );
ReefAngel.LCD.DrawText( COLOR_DODGERBLUE,DefaultBGColor,x+38,y,"BL:" );
ReefAngel.LCD.DrawText( COLOR_DODGERBLUE,DefaultBGColor,x+76,y,"RB:" );
for ( int a=0;a<3;a++ )
{
ReefAngel.LCD.DrawText( COLOR_DODGERBLUE,DefaultBGColor,x+18,y,ReefAngel.AI.GetChannel(a) );
x += 38;
}
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();
// 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();
}
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);
}
}