Basic questions most any of you can answer I'm sure...

Do you have a question on how to do something.
Ask in here.
Post Reply
DavidinGA
Posts: 83
Joined: Fri Jun 07, 2013 11:26 am

Re: Basic questions most any of you can answer I'm sure...

Post by DavidinGA »

lnevo wrote:That is older code that doesnt use the DCPump class.



Is this code current?




if (hour()>=8 && hour()<11)
{
vtechmode=6;
ReefAngel.PWM.SetDaylight( TidalSwellMode(40,true) ); // Tidal Swell at 40% on sync mode
ReefAngel.PWM.SetActinic( TidalSwellMode(40,false) ); // Tidal Swell at 40% on anti-sync mode
}
else if (hour()>=11 && hour()<12)
{
vtechmode=2;
ReefAngel.PWM.SetDaylight( ReefCrestMode(50,20,true) ); // ReefCrest at 50% + - 20 on sync mode
ReefAngel.PWM.SetActinic( ReefCrestMode(50,20,false) ); // ReefCrest at 50% + - 20 on anti-sync mode
}
else if (hour()>=12 && hour()<13)
{
vtechmode=0;
ReefAngel.PWM.SetDaylight( millis()%1000>800?80:0); // WaveMode on sync mode
ReefAngel.PWM.SetActinic( ElseMode(70,30,true) ); // ElseMode at 70 on anti-sync mode
}
else if (hour()>=13 && hour()<14)
{
vtechmode=2;
ReefAngel.PWM.SetDaylight( ReefCrestMode(70,20,true) ); // ReefCrest at 70% + - 20 on sync mode
ReefAngel.PWM.SetActinic( ReefCrestMode(70,20,false) ); // ReefCrest at 70% + - 20 on anti-sync mode
}
else if (hour()>=15 && hour()<18)
{
vtechmode=0;
ReefAngel.PWM.SetDaylight( ElseMode(70,30,true) ); // Else on sync mode
ReefAngel.PWM.SetActinic( millis()%1000>800?80:0); // Wave on anti-sync mode
}
else if (hour()>=18 && hour()<21)
{
vtechmode=5;
ReefAngel.PWM.SetDaylight( NutrientTransportMode(77,90,3000,true) ); // Nutrient Transport on sync mode
ReefAngel.PWM.SetActinic( NutrientTransportMode(77,90,3000,false) ); // Nutrient Transport on anti-sync mode
}
else if (hour()>=21 && hour()<24)
{
vtechmode=1;
ReefAngel.PWM.SetDaylight( millis()%1000>800?70:0); // Wave on sync mode
ReefAngel.PWM.SetActinic( ElseMode(70,30,true) ); // Else on anti-sync mode
}
else
{
vtechmode=4;
ReefAngel.PWM.SetDaylight( LongPulseMode(40,40,10,true) ); // Long pulse at 40% with 10s pulse on syncy mode
ReefAngel.PWM.SetActinic( LongPulseMode(40,40,10,false) ); // Long pulse at 40% with 10s pulse on on anti-sync mode
}

if (ReefAngel.DisplayedMenu==FEEDING_MODE)
{
ReefAngel.PWM.SetActinic(0);
ReefAngel.PWM.SetDaylight(0);
}
if (ReefAngel.DisplayedMenu==WATERCHANGE_MODE)
{
ReefAngel.PWM.SetActinic(0);
ReefAngel.PWM.SetDaylight(0);
}
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: Basic questions most any of you can answer I'm sure...

Post by rimai »

Try something like this:

Code: Select all

if (hour()<8)
{
ReefAngel.PWM.SetActinic(0);
 ReefAngel.PWM.SetDaylight(0);
}
else if (hour()>=8 && hour()<11)
ReefAngel.DCPump.SetMode( NutrientTransport,60,10 );
else if (hour()>=11 && hour()<12)
ReefAngel.DCPump.SetMode( ReefCrestMode,60,10 );
else if (hour()>=12 && hour()<20)
ReefAngel.DCPump.SetMode( TidalSwellMode,60,10 );
else
{
ReefAngel.PWM.SetActinic(0);
 ReefAngel.PWM.SetDaylight(0);
}
Roberto.
DavidinGA
Posts: 83
Joined: Fri Jun 07, 2013 11:26 am

Re: Basic questions most any of you can answer I'm sure...

Post by DavidinGA »

rimai wrote:Try something like this:

Code: Select all

if (hour()<8)
{
ReefAngel.PWM.SetActinic(0);
 ReefAngel.PWM.SetDaylight(0);
}
else if (hour()>=8 && hour()<11)
ReefAngel.DCPump.SetMode( NutrientTransport,60,10 );
else if (hour()>=11 && hour()<12)
ReefAngel.DCPump.SetMode( ReefCrestMode,60,10 );
else if (hour()>=12 && hour()<20)
ReefAngel.DCPump.SetMode( TidalSwellMode,60,10 );
else
{
ReefAngel.PWM.SetActinic(0);
 ReefAngel.PWM.SetDaylight(0);
}

Ok.

The way that looks it would tell the pumps what to do between hours 8-20 each day right? If so, what will pumps do for the other 4 hours?
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: Basic questions most any of you can answer I'm sure...

Post by rimai »

That's what the last else is for
Roberto.
DavidinGA
Posts: 83
Joined: Fri Jun 07, 2013 11:26 am

Re: Basic questions most any of you can answer I'm sure...

Post by DavidinGA »

rimai wrote:That's what the last else is for


Oh ok. Thanks.
DavidinGA
Posts: 83
Joined: Fri Jun 07, 2013 11:26 am

Re: Basic questions most any of you can answer I'm sure...

Post by DavidinGA »

rimai wrote:Try something like this:

Code: Select all

if (hour()<8)
{
ReefAngel.PWM.SetActinic(0);
 ReefAngel.PWM.SetDaylight(0);
}
else if (hour()>=8 && hour()<11)
ReefAngel.DCPump.SetMode( NutrientTransport,60,10 );
else if (hour()>=11 && hour()<12)
ReefAngel.DCPump.SetMode( ReefCrestMode,60,10 );
else if (hour()>=12 && hour()<20)
ReefAngel.DCPump.SetMode( TidalSwellMode,60,10 );
else
{
ReefAngel.PWM.SetActinic(0);
 ReefAngel.PWM.SetDaylight(0);
}



I tried to use this and it keeps giving me an error message...(see pic)

I copied and pasted your code into the wizard setup code sketch that i had from my initial setup into the area that is listed as custom code.
Attachments
Untitled.jpg
Untitled.jpg (240.68 KiB) Viewed 4169 times
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: Basic questions most any of you can answer I'm sure...

Post by rimai »

Sorry, just remove the Mode in ReefCrestMode and TidalSwellMode
Roberto.
DavidinGA
Posts: 83
Joined: Fri Jun 07, 2013 11:26 am

Re: Basic questions most any of you can answer I'm sure...

Post by DavidinGA »

The code is working.


What exactly do the different modes do? I know what fast pulse and slow pulse do but what about the others? It seemed like tide mode made the constant speed of the pumps slowly increase over time...


What can I do to make the pumps run more random as far as flow? Is there a code to run the pumps in the original random else mode?

Thanks
User avatar
Sacohen
Posts: 1833
Joined: Sun Apr 21, 2013 6:25 am
Location: Davie, FL

Re: Basic questions most any of you can answer I'm sure...

Post by Sacohen »

There is not code to run the pumps in the original Else mode, but cosmith71 created some code that is very random, maybe even better then the original else mode.

Here is the thread...

http://forum.reefangel.com/viewtopic.php?f=3&t=3481

This was originally written prior to the DCPump class.

If you look at my code here it is in there written (with help from lnevo) for the DCPump class.

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 Actinic_Lights     1
#define Day_Lights         2
#define Unused             3
#define Pumps              4
#define Sump_Fan           5
#define DeNit_Pump         6
#define DeNit_Doser        7
#define Unused             8

#define ATO_Pump           Box1_Port1
#define Moon_Lights        Box1_Port2
#define Unused             Box1_Port3
#define Unused             Box1_Port4
#define Unused             Box1_Port5
#define Unused             Box1_Port6
#define Unused             Box1_Port7
#define Unused             Box1_Port8


////// Place global variable code below here

// Does not need to be global.
// unsigned long ATOUpdate=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.FeedingModePorts = 0;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port4Bit;
ReefAngel.WaterChangePortsE[0] = Port1Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = Port1Bit | Port2Bit;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port1Bit | Port2Bit;
// Use T2 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Set the Overheat temperature setting
InternalMemory.OverheatTemp_write( 825 );
//Set Standard Menu
ReefAngel.AddStandardMenu();

// Feeeding and Water Change mode speed
ReefAngel.DCPump.FeedingSpeed=20;
ReefAngel.DCPump.WaterChangeSpeed=0;
ReefAngel.DCPump.ActinicChannel=Sync; // Now you're pump will be affected by the portal settings.

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

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


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

void loop()
{
  ReefAngel.StandardLights( Actinic_Lights,12,0,22,0 );
  ReefAngel.StandardLights( Day_Lights,13,0,21,0 );
  ReefAngel.StandardLights( Sump_Fan,13,0,21,0 );

  ////// Place your custom code below here
  ReefAngel.Relay.Set( Moon_Lights, !ReefAngel.Relay.Status( Actinic_Lights ) );

  ReefAngel.Relay.Set(DeNit_Doser,(now()-3600)%21600<1200);       // Runs for 1200s every 21600 seconds
  ReefAngel.Relay.Set(DeNit_Pump,((now()-3600)-1200)%21600<1200); // Runs for 1200s every 21600 seconds with 1200s offset

  // ReefAngel.Relay.DelayedOn( ATO_Pump,10 );
  // ReefAngel.WaterLevelATO(ATO_Pump,720,32,32); // Enable ATO the ATO

  // Delay WL ATO after water change and DeNit_Dosing
  static time_t wcTimer=0;
  static time_t denitTimer=0;
  
  if (ReefAngel.DisplayedMenu == WATERCHANGE_MODE) wcTimer=now();
  if (ReefAngel.Relay.Status(DeNit_Pump)) denitTimer=now();
  
  // Start with defined WaterLevel ATO 
  ReefAngel.WaterLevelATO(ATO_Pump,720,32,34); 
  // You should see a much more stable pump usage with a wider threshold 32-34.
  // Also since the water level measure can fluctuate it could lead to a lot of on/off cycling
  // which could also cause the relay to be on more often and it we reboot, we may maintain the state we don't want...
  // Especially if it could take up to 30 seconds to reboot :)
  
  // First 10 minutes after WC disable ATO
  if (now()-wcTimer >= 0 && now()-wcTimer < 600)
    ReefAngel.Relay.Off(ATO_Pump); 

  // First 5 minutes after DeNit_Doser was on
  if (now()-denitTimer >= 0 && now()-denitTimer < 300)
    ReefAngel.Relay.Off(ATO_Pump); 

  // Disable ATO if Salinity is below 33.5. 
  if (ReefAngel.Params.Salinity<335) 
    ReefAngel.Relay.Off(ATO_Pump); 
    
  // Disable ATO if ATO High IsActive()
  if (ReefAngel.HighATO.IsActive()) 
    ReefAngel.Relay.Off(ATO_Pump);
    
  // Modified to use the DCPump class
  if (hour()<12 || hour()>=22) {
    ReefAngel.DCPump.UseMemory=false;                
    ReefAngel.DCPump.Mode=Constant;                  
    ReefAngel.DCPump.Speed=30;
  } else if (InternalMemory.DCPumpMode_read()==Custom) {
    ReefAngel.DCPump.UseMemory=false;
    ReefAngel.DCPump.Mode=Constant;                  // Won't really be constant. See next line.
    ReefAngel.DCPump.Speed=ElseMode(40,20,true );    // ElseMode on sync mode, 40 +/- 20%
  } else  {
    ReefAngel.DCPump.UseMemory=true;                 // Use whatever is in the portal
  }

  // No longer necessary since we've defined the speeds for these modes in setup();
  //
  // if( ReefAngel.DisplayedMenu==FEEDING_MODE ) ReefAngel.PWM.SetActinic(20);
  // if( ReefAngel.DisplayedMenu==WATERCHANGE_MODE ) ReefAngel.PWM.SetActinic(0);

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

  // This should always be the last line
  ReefAngel.Portal( "Sacohen","Seth0310" );
  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() );
  ConvertNumToString(text, ReefAngel.Params.Salinity, 10);
  strcat(text,"  ");
  ReefAngel.LCD.DrawText(DefaultFGColor,DefaultBGColor,39,75,"Salinity:");
  ReefAngel.LCD.DrawText(DefaultFGColor,DefaultBGColor,99,75,text);
pingSerial();

// Main Relay Box
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
ReefAngel.LCD.DrawOutletBox( 12, 92, TempRelay );
pingSerial();
TempRelay = ReefAngel.Relay.RelayDataE[0];
TempRelay &= ReefAngel.Relay.RelayMaskOffE[0];
TempRelay |= ReefAngel.Relay.RelayMaskOnE[0];
ReefAngel.LCD.DrawOutletBox(12, 104, TempRelay);

// Date and Time
ReefAngel.LCD.DrawDate( 6, 122 );
pingSerial();
}

void DrawCustomGraph()
{
}
byte ElseMode( byte MidPoint, byte Offset, boolean WaveSync )
{
  // Static's only initialize the first time they are called
  static unsigned long LastChange=millis();        // Set the inital time that the last change occurred
  static int Delay = random( 500, 3000);           // Set the initial delay
  static int NewSpeed = MidPoint;                  // Set the initial speed
  static int AntiSpeed = MidPoint;                 // Set the initial anti sync speed
  if ((millis()-LastChange) > Delay)               // Check if the delay has elapsed
  {
    Delay=random(500,5000);                        // If so, come up with a new delay
    int ChangeUp = random(Offset);                 // Amount to go up or down
    if (random(100)<50)                            // 50/50 chance of speed going up or going down
    {
      NewSpeed = MidPoint - ChangeUp;
      AntiSpeed = MidPoint + ChangeUp;
    }
    else
    {
      NewSpeed = MidPoint + ChangeUp;
      AntiSpeed = MidPoint - ChangeUp;
    }
    LastChange=millis();                           // Reset the time of the last change
  }
  if (WaveSync)
  {
    return NewSpeed;
  }
  else
  {
    return AntiSpeed;
  }
}
DavidinGA
Posts: 83
Joined: Fri Jun 07, 2013 11:26 am

Re: Basic questions most any of you can answer I'm sure...

Post by DavidinGA »

Sacohen wrote:There is not code to run the pumps in the original Else mode, but cosmith71 created some code that is very random, maybe even better then the original else mode.

Here is the thread...

http://forum.reefangel.com/viewtopic.php?f=3&t=3481

This was originally written prior to the DCPump class.

If you look at my code here it is in there written (with help from lnevo) for the DCPump class.








// Modified to use the DCPump class
if (hour()<12 || hour()>=22) {
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Mode=Constant;
ReefAngel.DCPump.Speed=30;
} else if (InternalMemory.DCPumpMode_read()==Custom) {
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Mode=Constant; // Won't really be constant. See next line.
ReefAngel.DCPump.Speed=ElseMode(40,20,true ); // ElseMode on sync mode, 40 +/- 20%
} else {
ReefAngel.DCPump.UseMemory=true; // Use whatever is in the portal
}

// No longer necessary since we've defined the speeds for these modes in setup();
//







void DrawCustomGraph()
{
}
byte ElseMode( byte MidPoint, byte Offset, boolean WaveSync )
{
// Static's only initialize the first time they are called
static unsigned long LastChange=millis(); // Set the inital time that the last change occurred
static int Delay = random( 500, 3000); // Set the initial delay
static int NewSpeed = MidPoint; // Set the initial speed
static int AntiSpeed = MidPoint; // Set the initial anti sync speed
if ((millis()-LastChange) > Delay) // Check if the delay has elapsed
{
Delay=random(500,5000); // If so, come up with a new delay
int ChangeUp = random(Offset); // Amount to go up or down
if (random(100)<50) // 50/50 chance of speed going up or going down
{
NewSpeed = MidPoint - ChangeUp;
AntiSpeed = MidPoint + ChangeUp;
}
else
{
NewSpeed = MidPoint + ChangeUp;
AntiSpeed = MidPoint - ChangeUp;
}
LastChange=millis(); // Reset the time of the last change
}
if (WaveSync)
{
return NewSpeed;
}
else
{
return AntiSpeed;
}
}[/code]

So... Would it be those two sections of code I would need to add???
User avatar
Sacohen
Posts: 1833
Joined: Sun Apr 21, 2013 6:25 am
Location: Davie, FL

Re: Basic questions most any of you can answer I'm sure...

Post by Sacohen »

I believe you would need to add or make sure it is in the code what I have highlighted red...
List code is set to run the "Else" mode from 12pm to 10pm and then run a constant 30% at night and it drops to 20% during feeding and 0% during Water Changes.

#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 Actinic_Lights 1
#define Day_Lights 2
#define Unused 3
#define Pumps 4
#define Sump_Fan 5
#define DeNit_Pump 6
#define DeNit_Doser 7
#define Unused 8

#define ATO_Pump Box1_Port1
#define Moon_Lights Box1_Port2
#define Unused Box1_Port3
#define Unused Box1_Port4
#define Unused Box1_Port5
#define Unused Box1_Port6
#define Unused Box1_Port7
#define Unused Box1_Port8


////// Place global variable code below here

// Does not need to be global.
// unsigned long ATOUpdate=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.FeedingModePorts = 0;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port4Bit;
ReefAngel.WaterChangePortsE[0] = Port1Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = Port1Bit | Port2Bit;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port1Bit | Port2Bit;
// Use T2 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Set the Overheat temperature setting
InternalMemory.OverheatTemp_write( 825 );
//Set Standard Menu
ReefAngel.AddStandardMenu();

// Feeeding and Water Change mode speed
ReefAngel.DCPump.FeedingSpeed=20;
ReefAngel.DCPump.WaterChangeSpeed=0;
ReefAngel.DCPump.ActinicChannel=Sync; // Now you're pump will be affected by the portal settings.

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

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


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

void loop()
{
ReefAngel.StandardLights( Actinic_Lights,12,0,22,0 );
ReefAngel.StandardLights( Day_Lights,13,0,21,0 );
ReefAngel.StandardLights( Sump_Fan,13,0,21,0 );

////// Place your custom code below here
ReefAngel.Relay.Set( Moon_Lights, !ReefAngel.Relay.Status( Actinic_Lights ) );

ReefAngel.Relay.Set(DeNit_Doser,(now()-3600)%21600<1200); // Runs for 1200s every 21600 seconds
ReefAngel.Relay.Set(DeNit_Pump,((now()-3600)-1200)%21600<1200); // Runs for 1200s every 21600 seconds with 1200s offset

// ReefAngel.Relay.DelayedOn( ATO_Pump,10 );
// ReefAngel.WaterLevelATO(ATO_Pump,720,32,32); // Enable ATO the ATO

// Delay WL ATO after water change and DeNit_Dosing
static time_t wcTimer=0;
static time_t denitTimer=0;

if (ReefAngel.DisplayedMenu == WATERCHANGE_MODE) wcTimer=now();
if (ReefAngel.Relay.Status(DeNit_Pump)) denitTimer=now();

// Start with defined WaterLevel ATO
ReefAngel.WaterLevelATO(ATO_Pump,720,32,34);
// You should see a much more stable pump usage with a wider threshold 32-34.
// Also since the water level measure can fluctuate it could lead to a lot of on/off cycling
// which could also cause the relay to be on more often and it we reboot, we may maintain the state we don't want...
// Especially if it could take up to 30 seconds to reboot :)

// First 10 minutes after WC disable ATO
if (now()-wcTimer >= 0 && now()-wcTimer < 600)
ReefAngel.Relay.Off(ATO_Pump);

// First 5 minutes after DeNit_Doser was on
if (now()-denitTimer >= 0 && now()-denitTimer < 300)
ReefAngel.Relay.Off(ATO_Pump);

// Disable ATO if Salinity is below 33.5.
if (ReefAngel.Params.Salinity<335)
ReefAngel.Relay.Off(ATO_Pump);

// Disable ATO if ATO High IsActive()
if (ReefAngel.HighATO.IsActive())
ReefAngel.Relay.Off(ATO_Pump);

// Modified to use the DCPump class
if (hour()<12 || hour()>=22) {
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Mode=Constant;
ReefAngel.DCPump.Speed=30;
} else if (InternalMemory.DCPumpMode_read()==Custom) {
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Mode=Constant; // Won't really be constant. See next line.
ReefAngel.DCPump.Speed=ElseMode(40,20,true ); // ElseMode on sync mode, 40 +/- 20%
} else {
ReefAngel.DCPump.UseMemory=true; // Use whatever is in the portal
}

// No longer necessary since we've defined the speeds for these modes in setup();
//
// if( ReefAngel.DisplayedMenu==FEEDING_MODE ) ReefAngel.PWM.SetActinic(20);
// if( ReefAngel.DisplayedMenu==WATERCHANGE_MODE ) ReefAngel.PWM.SetActinic(0);

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

// This should always be the last line
ReefAngel.Portal( "Sacohen","Seth0310" );
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() );
ConvertNumToString(text, ReefAngel.Params.Salinity, 10);
strcat(text," ");
ReefAngel.LCD.DrawText(DefaultFGColor,DefaultBGColor,39,75,"Salinity:");
ReefAngel.LCD.DrawText(DefaultFGColor,DefaultBGColor,99,75,text);
pingSerial();

// Main Relay Box
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
ReefAngel.LCD.DrawOutletBox( 12, 92, TempRelay );
pingSerial();
TempRelay = ReefAngel.Relay.RelayDataE[0];
TempRelay &= ReefAngel.Relay.RelayMaskOffE[0];
TempRelay |= ReefAngel.Relay.RelayMaskOnE[0];
ReefAngel.LCD.DrawOutletBox(12, 104, TempRelay);

// Date and Time
ReefAngel.LCD.DrawDate( 6, 122 );
pingSerial();
}

void DrawCustomGraph()
{
}
byte ElseMode( byte MidPoint, byte Offset, boolean WaveSync )
{
// Static's only initialize the first time they are called
static unsigned long LastChange=millis(); // Set the inital time that the last change occurred
static int Delay = random( 500, 3000); // Set the initial delay
static int NewSpeed = MidPoint; // Set the initial speed
static int AntiSpeed = MidPoint; // Set the initial anti sync speed
if ((millis()-LastChange) > Delay) // Check if the delay has elapsed
{
Delay=random(500,5000); // If so, come up with a new delay
int ChangeUp = random(Offset); // Amount to go up or down
if (random(100)<50) // 50/50 chance of speed going up or going down
{
NewSpeed = MidPoint - ChangeUp;
AntiSpeed = MidPoint + ChangeUp;
}
else
{
NewSpeed = MidPoint + ChangeUp;
AntiSpeed = MidPoint - ChangeUp;
}
LastChange=millis(); // Reset the time of the last change
}
if (WaveSync)
{
return NewSpeed;
}
else
{
return AntiSpeed;
}
}
DavidinGA
Posts: 83
Joined: Fri Jun 07, 2013 11:26 am

Re: Basic questions most any of you can answer I'm sure...

Post by DavidinGA »

Oh ok. Thanks
Post Reply