Page 1 of 9

PaulTurner911 Code

Posted: Fri Jun 14, 2013 3:12 pm
by Paulturner911
First I would have to thank Lee for "helping" get this dialed in.....
AND BY HELP I MEAN PRETTY MUCH DO IT FOR ME!!
He has been a great help in this from the start.

Currently Running:

Overflow Protection- Shuts down Return Pump
ATO Low Protection- Shuts down Aqua Lifter
Moon Phase from 9pm-10am
ATO/Kalk Doser running for 50sec every 15min from 8pm-12pm
Custom Feed Mode(WP40 off for 30min, Return Pump off for 60min)
WP40 Tidal Modes (Randomized Daily)
Night Mode for the WP40


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 <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.FeedingModePorts = Port1Bit | Port7Bit | Port8Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port1Bit | Port7Bit | Port8Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = Port2Bit | Port3Bit | Port7Bit | Port8Bit;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port3Bit | Port7Bit | Port8Bit;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
InternalMemory.OverheatTemp_write( 869 );


// Ports that are always on

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


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

void loop()
{
ReefAngel.Relay.On( Port1 );
ReefAngel.StandardFan( Port2 );
ReefAngel.ActinicLights( Port3 );
ReefAngel.DayLights( Port7 );
ReefAngel.DayLights( Port8 );
//Moonlight Phase 9pm-10am (CH4-CH5)
if ( (hour() >=10) && (hour() <21) )
ReefAngel.PWM.SetChannel( 4,(0) );
else
ReefAngel.PWM.SetChannel( 4, MoonPhase() );
if ( (hour() >=10) && (hour() <21) )
ReefAngel.PWM.SetChannel( 5,(0) );
else
ReefAngel.PWM.SetChannel( 5, MoonPhase() );
//Pump Delay and Over Flow Protection
if (ReefAngel.HighATO.IsActive())
ReefAngel.Relay.On(Port1);
else
ReefAngel.Relay.Off(Port1);
//ATO Protection
if (ReefAngel.LowATO.IsActive())
ReefAngel.Relay.On(Port4);
else
ReefAngel.Relay.Off(Port4);
//Kalk Dose 50sec @ 8pm-12pm (every 15min)
if (hour() >=20 || hour() < 12)
ReefAngel.Relay.Set(Port4, now()%900<50);
else
ReefAngel.Relay.Off(Port4);
//Feed Mode Delay on Pump
static boolean feeding=false;
static unsigned long feedingstarted = now();
if (ReefAngel.DisplayedMenu==FEEDING_MODE)
{
  if (!feeding)
  {
  feeding=true;
  feedingstarted = now();
  }
} else {
  feeding=false;

}

///// Place your custom code below here
//IDK Rimai Posted
#define Mem_B_RFMode           VarsStart+55
// Read memory for RF Wave Settings and use for Tunze/Jaebo
int mode=InternalMemory.RFMode_read();
int speed=InternalMemory.RFSpeed_read();
int duration=InternalMemory.RFDuration_read();

// Change this to what you want your min/max based on vortech speed
// This is for those functions that take both, but only one memory slot.
int minOffset=25;
int maxOffset=25;

int min=speed-minOffset;
int max=speed+maxOffset;

// Add random mode if we set to Mode to 12
static int rmode;

if (now()%SECS_PER_HOUR==0) {
  rmode=random(7); // Change the mode once per hour to modes 0-6
}
if (mode==12) {
  mode=rmode;   
}

// keep wavemakers off for first 30 minutes of feeding mode.
if (now()-feedingstarted<=1800 && ReefAngel.DisplayedMenu==FEEDING_MODE) {
    ReefAngel.PWM.SetDaylight( 0 );
    //ReefAngel.PWM.SetActinic( 0 );
} else if (mode==Constant) { 
  // Constant
    ReefAngel.PWM.SetDaylight( speed );
    //ReefAngel.PWM.SetActinic( speed );
} else if (mode==Lagoon) { 
    // Lagoon
    ReefAngel.PWM.SetDaylight( SineMode(min,max,duration,true) );
    //ReefAngel.PWM.SetActinic( SineMode(min,max,duration,false) );
} else if (mode==ReefCrest) { 
    // Reef Crest
    ReefAngel.PWM.SetDaylight( ReefCrestMode(speed,duration,true) );
    //ReefAngel.PWM.SetActinic( ReefCrestMode(speed,duration,false) );
} else if (mode==ShortPulse) {  
    // Short Pulse
    ReefAngel.PWM.SetDaylight( ShortPulseMode(min,max,duration,true) );
    //ReefAngel.PWM.SetActinic( ShortPulseMode(min,max,duration,false) );
} else if (mode==LongPulse) {
    // Long Pulse
    ReefAngel.PWM.SetDaylight( LongPulseMode(min,max,duration,true) );
    //ReefAngel.PWM.SetActinic( LongPulseMode(min,max,duration,false) );
} else if (mode==TidalSwell) {
    // Tidal Swell
    ReefAngel.PWM.SetDaylight( TidalSwellMode(speed,true) );
    //ReefAngel.PWM.SetDaylight( TidalSwellMode(speed,false) );
} else if (mode=NutrientTransport) {
    // Smart_NTM
    ReefAngel.PWM.SetDaylight( NutrientTransportMode(min,max,duration,true) );
    //ReefAngel.PWM.SetActinic( NutrientTransportMode(min,max,duration,false) );
} else {
    // Default
    ReefAngel.PWM.SetDaylight( TideMode(speed,minOffset,maxOffset) );
    //ReefAngel.PWM.SetActinic( TideMode(speed,minOffset,maxOffset) );
}
// Add night mode (constant 30%)
if (now()%SECS_PER_DAY<30600 || now()%SECS_PER_DAY >=81000) { // Time is before 8:30am and after 10:30pm
ReefAngel.PWM.SetDaylight(30);
}
////// Place your custom code above here

// This should always be the last line
ReefAngel.Portal( "paulturner911" );
ReefAngel.ShowInterface();
}

void DrawCustomMain()
{
int x,y;
char text[10];
// Dimming Expansion
x = 15;
y = 2;
for ( int a=0;a<6;a++ )
{
if ( a>2 ) x = 75;
if ( a==3 ) y = 2;
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x,y,"Ch :" );
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x+12,y,a );
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x+24,y,ReefAngel.PWM.GetChannelValue(a) );
y += 10;
}
pingSerial();

// Parameters
#if defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 43, ReefAngel.Params,
ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue() );
#else // defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 43, 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, 84, TempRelay );
pingSerial();

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

void DrawCustomGraph()
{
}

http://forum.reefangel.com/status/chart ... ilter=PWMD

Re: PaulTurner911 Code

Posted: Mon Jun 17, 2013 8:55 am
by lnevo
Try this code, I added the following requested features:

Changed random mode to switch daily instead of hourly
Changed the duration for NTM and short pulse to use a better value (duration * 100) since the argument is milliseconds
Added in the NTM after feeding mode is done. (30 minutes pumps off, then 60 minutes of NTM)
Added indentations to make it readable.

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 <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.FeedingModePorts = Port1Bit | Port7Bit | Port8Bit;
  // Ports toggled in Water Change Mode
  ReefAngel.WaterChangePorts = Port1Bit | Port7Bit | Port8Bit;
  // Ports toggled when Lights On / Off menu entry selected
  ReefAngel.LightsOnPorts = Port2Bit | Port3Bit | Port7Bit | Port8Bit;
  // Ports turned off when Overheat temperature exceeded
  ReefAngel.OverheatShutoffPorts = Port3Bit | Port7Bit | Port8Bit;
  // Use T1 probe as temperature and overheat functions
  ReefAngel.TempProbe = T1_PROBE;
  ReefAngel.OverheatProbe = T1_PROBE;
  InternalMemory.OverheatTemp_write( 869 );
  
  
  // Ports that are always on
  
  ////// Place additional initialization code below here
  
  
  ////// Place additional initialization code above here
}

void loop()
{
  ReefAngel.Relay.On( Port1 );
  ReefAngel.StandardFan( Port2 );
  ReefAngel.ActinicLights( Port3 );
  ReefAngel.DayLights( Port7 );
  ReefAngel.DayLights( Port8 );

  //Moonlight Phase 9pm-10am (CH4-CH5)
  if ( (hour() >=10) && (hour() <21) ) 
    ReefAngel.PWM.SetChannel( 4,(0) );
  else  
    ReefAngel.PWM.SetChannel( 4, MoonPhase() );
  
  if ( (hour() >=10) && (hour() <21) ) 
    ReefAngel.PWM.SetChannel( 5,(0) );
  else
    ReefAngel.PWM.SetChannel( 5, MoonPhase() );
  
  //Pump Delay and Over Flow Protection
  if (ReefAngel.HighATO.IsActive())
    ReefAngel.Relay.On(Port1);
  else
    ReefAngel.Relay.Off(Port1);
  //ATO Protection
  if (ReefAngel.LowATO.IsActive())
    ReefAngel.Relay.On(Port4);
  else
    ReefAngel.Relay.Off(Port4);
  
  //Kalk Dose 50sec @ 8pm-12pm (every 15min)
  if (hour() >=20 || hour() < 12)
    ReefAngel.Relay.Set(Port4, now()%900<50);
  else
    ReefAngel.Relay.Off(Port4);
  
  ///// Place your custom code below here
  //IDK Rimai Posted
  // #define Mem_B_RFMode           VarsStart+55
  // Read memory for RF Wave Settings and use for Tunze/Jaebo
  int mode=InternalMemory.RFMode_read();
  int speed=InternalMemory.RFSpeed_read();
  int duration=InternalMemory.RFDuration_read();
  
  // Change this to what you want your min/max based on vortech speed
  // This is for those functions that take both, but only one memory slot.
  int minOffset=25;
  int maxOffset=25;
  
  int min=speed-minOffset;
  int max=speed+maxOffset;
  
  // Add random mode if we set to Mode to 12
  static int rmode;
  static boolean changeMode=true;
  if (now()%SECS_PER_DAY==0 || changeMode=true) { // Change at midnight or if controller rebooted
    rmode=random(7); // Change the mode once per day to modes 0-6
    changeMode=false;
  }
  if (mode==12) {
    mode=rmode;   
  }
  
  // Set timer when in feeding mode
  static unsigned long feeding;
  if (ReefAngel.DisplayedMenu==FEEDING_MODE)
    feeding = now();
  }

  // keep wavemakers off for first 30 minutes of feeding mode.
  if (now()-feeding<=1800) { // 30 minutes after 
      ReefAngel.PWM.SetDaylight( 0 );
  } else if (now()-feeding<=(1800+3600)) { // // First 30 minutes pump is off.. next 60 minutes will be in NTM
      ReefAngel.PWM.SetDaylight( NutrientTransportMode(min,max,duration*100,true) );
  } else if (mode==Constant) {               // Constant
      ReefAngel.PWM.SetDaylight( speed );
  } else if (mode==Lagoon) {                 // Lagoon
      ReefAngel.PWM.SetDaylight( SineMode(min,max,duration,true) );
  } else if (mode==ReefCrest) {              // Reef Crest
      ReefAngel.PWM.SetDaylight( ReefCrestMode(speed,duration,true) );
  } else if (mode==ShortPulse) {             // Short Pulse
      ReefAngel.PWM.SetDaylight( ShortPulseMode(min,max,duration*100,true) );
  } else if (mode==LongPulse) {              // Long Pulse
      ReefAngel.PWM.SetDaylight( LongPulseMode(min,max,duration,true) );
  } else if (mode==TidalSwell) {             // Tidal Swell
      ReefAngel.PWM.SetDaylight( TidalSwellMode(speed,true) );
  } else if (mode=NutrientTransport) {       // Smart_NTM
      ReefAngel.PWM.SetDaylight( NutrientTransportMode(min,max,duration*100,true) );
  } else {                                   // Default
      ReefAngel.PWM.SetDaylight( TideMode(speed,minOffset,maxOffset) );
  }

  // Add night mode (constant 30%)
  if (now()%SECS_PER_DAY<30600 || now()%SECS_PER_DAY >=81000) { // Time is before 8:30am and after 10:30pm
    ReefAngel.PWM.SetDaylight(30);
  }
  ////// Place your custom code above here
  
  // This should always be the last line
  ReefAngel.Portal( "paulturner911" );
  ReefAngel.ShowInterface();
}

void DrawCustomMain()
{
  int x,y;
  char text[10];
  
  // Dimming Expansion
  x = 15;
  y = 2;
  for ( int a=0;a<6;a++ )
  {
    if ( a>2 ) x = 75;
    if ( a==3 ) y = 2;
    ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x,y,"Ch :" );
    ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x+12,y,a );
    ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x+24,y,ReefAngel.PWM.GetChannelValue(a) );
    y += 10;
  }
  
  // Parameters
  #if defined DisplayLEDPWM && ! defined RemoveAllLights
  ReefAngel.LCD.DrawMonitor( 15, 43, ReefAngel.Params,
  ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue() );
  #else // defined DisplayLEDPWM && ! defined RemoveAllLights
  ReefAngel.LCD.DrawMonitor( 15, 43, ReefAngel.Params );
  #endif // defined DisplayLEDPWM && ! defined RemoveAllLights
  
  // Main Relay Box
  byte TempRelay = ReefAngel.Relay.RelayData;
  TempRelay &= ReefAngel.Relay.RelayMaskOff;
  TempRelay |= ReefAngel.Relay.RelayMaskOn;
  ReefAngel.LCD.DrawOutletBox( 12, 84, TempRelay );
  
  // Date and Time
  ReefAngel.LCD.DrawDate( 6, 122 );
}

void DrawCustomGraph()
{
}

Re: PaulTurner911 Code

Posted: Mon Jun 17, 2013 2:35 pm
by Paulturner911
Error:

if (now()%SECS_PER_DAY==0 || changeMode=true) { // Change at midnight or if controller rebooted

Ivalue required as left operand of assignment

Re: PaulTurner911 Code

Posted: Mon Jun 17, 2013 2:38 pm
by rimai
It need == instead of =

Re: PaulTurner911 Code

Posted: Mon Jun 17, 2013 3:36 pm
by Paulturner911
Error

if (now()-feeding<=1800) { // 30 minutes after

expected unqualified-id before "if"

Re: PaulTurner911 Code

Posted: Mon Jun 17, 2013 3:45 pm
by lnevo
Its this line above that...

Code: Select all

  if (ReefAngel.DisplayedMenu==FEEDING_MODE)
It needs a {

Re: PaulTurner911 Code

Posted: Mon Jun 17, 2013 5:25 pm
by Paulturner911
Thanks guys, it took!!

Lee, what is your duration set at?
If I understand(rarely) I would set it at 25 inorder for reefcrest to run @45 +/-25.

I did this in the portal, while saving all read "OK" but DC Pump Speed & Duration- both ERR

Re: PaulTurner911 Code

Posted: Mon Jun 17, 2013 6:52 pm
by lnevo
The libraries arent supporting dc pump yet.

Re: PaulTurner911 Code

Posted: Mon Jun 17, 2013 7:34 pm
by Paulturner911
k, just seemed sketchy.

When I select custom in the portal ive only run 45 tonight no change (maybe it randomized 45 constant), Ill check to see if it changes tuesday. Night mode does work though! Just watched it click over.

Thanks


Could I just remove ones that I dont want to run from this section??

if (now()-feeding<=1800) { // 30 minutes after
ReefAngel.PWM.SetDaylight( 0 );
} else if (now()-feeding<=(1800+3600)) { // // First 30 minutes pump is off.. next 60 minutes will be in NTM
ReefAngel.PWM.SetDaylight( NutrientTransportMode(min,max,duration*100,true) );
} else if (mode==Constant) { // Constant
ReefAngel.PWM.SetDaylight( speed );
} else if (mode==Lagoon) { // Lagoon
ReefAngel.PWM.SetDaylight( SineMode(min,max,duration,true) );
} else if (mode==ReefCrest) { // Reef Crest
ReefAngel.PWM.SetDaylight( ReefCrestMode(speed,duration,true) );
} else if (mode==ShortPulse) { // Short Pulse
ReefAngel.PWM.SetDaylight( ShortPulseMode(min,max,duration*100,true) );
} else if (mode==LongPulse) { // Long Pulse
ReefAngel.PWM.SetDaylight( LongPulseMode(min,max,duration,true) );
} else if (mode==TidalSwell) { // Tidal Swell
ReefAngel.PWM.SetDaylight( TidalSwellMode(speed,true) );
} else if (mode=NutrientTransport) { // Smart_NTM
ReefAngel.PWM.SetDaylight( NutrientTransportMode(min,max,duration*100,true) );
} else { // Default
ReefAngel.PWM.SetDaylight( TideMode(speed,minOffset,maxOffset) );
}

Re: PaulTurner911 Code

Posted: Mon Jun 17, 2013 7:43 pm
by lnevo
If you pick custom it will just do the tide mode which is almost a constant, unless you changed the mode==12 line.

Otherwise set the RFMode memory to 12 manually.

Re: PaulTurner911 Code

Posted: Mon Jun 17, 2013 7:48 pm
by lnevo
And it's very likely to have picked constant, it's only 1 in 7

Re: PaulTurner911 Code

Posted: Mon Jun 17, 2013 7:53 pm
by Paulturner911
// Add random mode if we set to Mode to 11(Custom in Portal)
static int rmode;
static boolean changeMode=true;
if (now()%SECS_PER_DAY==0 || changeMode==true) { // Change at midnight or if controller rebooted
rmode=random(7); // Change the mode once per day to modes 0-6
changeMode=false;
}
if (mode==11) {
mode=rmode;
}


This should have made custom do my random function correct?

Re: PaulTurner911 Code

Posted: Mon Jun 17, 2013 7:56 pm
by lnevo
Yep

Re: PaulTurner911 Code

Posted: Mon Jun 17, 2013 8:02 pm
by Paulturner911
We will know tomorrow. How can I remove modes?....like this lol

Re: PaulTurner911 Code

Posted: Mon Jun 17, 2013 8:05 pm
by lnevo
Well I would not take them out of your list of modes. You'll just end up in your default else more often..l

I'll post some code tomorrow you can use to pick which ones get used for random mode.

Re: PaulTurner911 Code

Posted: Tue Jun 18, 2013 11:32 am
by Paulturner911
I does seem to have picked a different mode today!! Maybe long pulse. I have 45 for speed and 25 for duration in the portal. I see that there is a tab for DC pump now, will I be utilizing that? BUT there isnt a "custom" selection. What is your duration set at Lee? I would like my PWM graph to look a bit more like yours.

Re: PaulTurner911 Code

Posted: Tue Jun 18, 2013 11:40 am
by lnevo
I set my duration to 10 but I am doing things very differently. I don't have wp40s.

The dc pump section will be supported by the new libraries. I have no idea how that is going to work yet.

Re: PaulTurner911 Code

Posted: Tue Jun 18, 2013 11:49 am
by Paulturner911
I see! Maybe thats why its so flat. Ive set mine to 10. I just think Im going to end up wanting to randomize lagoon, reefcrest and long pulse. Im stoked to try NT after feedmode tonight!!!

Re: PaulTurner911 Code

Posted: Tue Jun 18, 2013 11:57 am
by rimai
The new libs have been pushed yesterday :)
Take a peak at the wizard.

Re: PaulTurner911 Code

Posted: Tue Jun 18, 2013 12:02 pm
by Paulturner911
Cool! Ill check it out when I get home.

Re: PaulTurner911 Code

Posted: Tue Jun 18, 2013 12:15 pm
by Paulturner911
OK, I jumped the gun and downloaded it at work. :)
I see in the wizard that you can set the mode, but I see no duration and no "custom" mode. Duration IS in the portal, but still no custom. Will I have a wat to select and randomize Lagoon, ReefCrest, and Long Pulse?

Thanks

Re: PaulTurner911 Code

Posted: Tue Jun 18, 2013 12:27 pm
by lnevo
I suspect a lot will have to be changed (maybe it will be easy...) in order to incorporate the things we've done. However since it's all in the wizard it might be best to start fresh and go from there... just something to keep in mind.

Re: PaulTurner911 Code

Posted: Tue Jun 18, 2013 12:28 pm
by rimai
Duration is only available on certain modes.
No custom with the wizard :(
If you are doing custom, you don't need the wizard :)

Re: PaulTurner911 Code

Posted: Tue Jun 18, 2013 12:34 pm
by lnevo
But he wants to utilize the DC Pump portal section... I think it be easiest to start with that fresh from the wizard and add his custom stuff back in after. :)

Also, off topic, but I had no idea new code was pushed :) The sticky with the changelog doesn't show up in New Posts. Can you bump it in the future when a new release is made. :D

Re: PaulTurner911 Code

Posted: Tue Jun 18, 2013 12:37 pm
by Paulturner911
I think Im going to stick with what Im running and possibly (with Lees help) come up with a way to randomize specific modes. I dont see much difference in the DC or the Vortec menus.....What would I gain in changing?

Re: PaulTurner911 Code

Posted: Tue Jun 18, 2013 12:51 pm
by lnevo
I just looked at the changes made in the libraries. It will be much easier to do everything with that because your whole if else block to look at the functions is all part of the ReefAngel class now.

You've got a lot of custom stuff so yeah, for you it might be easier to leave it for now, once I see how the new stuff is used, I can help you transition to it.

The main benefit will be that since you don't have a RF module, your using the memory locations, but your not tracking changes to speed duration and mode in the portal charts. (i.e. You can't do a chart on RFS for instance (RFSpeed). You can't even look at what that variable has been set for because the portal doesn't track memory addresses.

With the new libraries, the DCS (DC Speed) is now reported by /r99 and will be part of the XML sent to the portal, so you'll be able to view exactly what state your DC Pump is in and not just look at the PWMD output.

Also, since we'll be doing random modes each day you can track what your DCD value looks like to know which mode your controller chose that day :) Lots of cool things.

Re: PaulTurner911 Code

Posted: Tue Jun 18, 2013 1:34 pm
by Paulturner911
I like the idea of being able to identify what mode it IS or WAS in!! Please keep me posted.

Re: PaulTurner911 Code

Posted: Wed Jun 19, 2013 8:31 am
by Paulturner911
LOL, back in DEFAULT. UGH!!

Ill wait it out a few, and dabble in the wizard to see what I can do on my own this weekend..... I should be able to get my basic stuff back in after running the wizard, then Ill work on the WP40 stuff.

Re: PaulTurner911 Code

Posted: Wed Jun 19, 2013 7:24 pm
by Paulturner911
Ive run the wizard and stuck all of the custom in that I thought would not conflict. Basically everything with the exception of the custom feed mode and the custom randomized WP mode. The following was what I would like modified to work with the DC
//Feed Mode Delay on Pump
static boolean feeding=false;
static unsigned long feedingstarted = now();
if (ReefAngel.DisplayedMenu==FEEDING_MODE)
{
if (!feeding)
{
feeding=true;
feedingstarted = now();
}
} else {
feeding=false;

}

///// Place your custom code below here
//IDK Rimai Posted
#define Mem_B_RFMode VarsStart+55
// Read memory for RF Wave Settings and use for Tunze/Jaebo
int mode=InternalMemory.RFMode_read();
int speed=InternalMemory.RFSpeed_read();
int duration=InternalMemory.RFDuration_read();

// Change this to what you want your min/max based on vortech speed
// This is for those functions that take both, but only one memory slot.
int minOffset=25;
int maxOffset=25;

int min=speed-minOffset;
int max=speed+maxOffset;

// Add random mode if we set to Mode to 12
static int rmode;

if (now()%SECS_PER_HOUR==0) {
rmode=random(7); // Change the mode once per hour to modes 0-6
}
if (mode==12) {
mode=rmode;
}

// keep wavemakers off for first 30 minutes of feeding mode.
if (now()-feedingstarted<=1800 && ReefAngel.DisplayedMenu==FEEDING_MODE) {
ReefAngel.PWM.SetDaylight( 0 );
//ReefAngel.PWM.SetActinic( 0 );
} else if (mode==Constant) {
// Constant
ReefAngel.PWM.SetDaylight( speed );
//ReefAngel.PWM.SetActinic( speed );
} else if (mode==Lagoon) {
// Lagoon
ReefAngel.PWM.SetDaylight( SineMode(min,max,duration,true) );
//ReefAngel.PWM.SetActinic( SineMode(min,max,duration,false) );
} else if (mode==ReefCrest) {
// Reef Crest
ReefAngel.PWM.SetDaylight( ReefCrestMode(speed,duration,true) );
//ReefAngel.PWM.SetActinic( ReefCrestMode(speed,duration,false) );
} else if (mode==ShortPulse) {
// Short Pulse
ReefAngel.PWM.SetDaylight( ShortPulseMode(min,max,duration,true) );
//ReefAngel.PWM.SetActinic( ShortPulseMode(min,max,duration,false) );
} else if (mode==LongPulse) {
// Long Pulse
ReefAngel.PWM.SetDaylight( LongPulseMode(min,max,duration,true) );
//ReefAngel.PWM.SetActinic( LongPulseMode(min,max,duration,false) );
} else if (mode==TidalSwell) {
// Tidal Swell
ReefAngel.PWM.SetDaylight( TidalSwellMode(speed,true) );
//ReefAngel.PWM.SetDaylight( TidalSwellMode(speed,false) );
} else if (mode=NutrientTransport) {
// Smart_NTM
ReefAngel.PWM.SetDaylight( NutrientTransportMode(min,max,duration,true) );
//ReefAngel.PWM.SetActinic( NutrientTransportMode(min,max,duration,false) );
} else {
// Default
ReefAngel.PWM.SetDaylight( TideMode(speed,minOffset,maxOffset) );
//ReefAngel.PWM.SetActinic( TideMode(speed,minOffset,maxOffset) );
}

Re: PaulTurner911 Code

Posted: Wed Jun 19, 2013 7:24 pm
by Paulturner911
Here is my current DC CODE

#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>

////// 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.FeedingModePorts = Port1Bit | Port2Bit | Port7Bit | Port8Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port1Bit | Port2Bit | Port7Bit | Port8Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = Port2Bit | Port3Bit | Port7Bit | Port8Bit;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port3Bit | Port7Bit | Port8Bit;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;

// Feeeding and Water Change mode speed
ReefAngel.DCPump.FeedingSpeed=0;
ReefAngel.DCPump.WaterChangeSpeed=0;


// Ports that are always on

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


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

void loop()
{
ReefAngel.DayLights( Port1 ); // Return Pump
ReefAngel.StandardFan( Port2 ); // Canopy Fans
ReefAngel.ActinicLights( Port3 ); // Actinic LEDS
//Port4 Kalk/ATO
//Port5 Kalk Stir
//Port 6 NOT USED (Possibly Skimmer)
ReefAngel.DayLights( Port7 ); // MH 1
ReefAngel.DayLights( Port8 ); //MH2
//Moonlight Phase 9pm-10am (CH4-CH5)
if ( (hour() >=10) && (hour() <21) )
ReefAngel.PWM.SetChannel( 4,(0) );
else
ReefAngel.PWM.SetChannel( 4, MoonPhase() );
if ( (hour() >=10) && (hour() <21) )
ReefAngel.PWM.SetChannel( 5,(0) );
else
ReefAngel.PWM.SetChannel( 5, MoonPhase() );
//Over Flow Protection
if (ReefAngel.HighATO.IsActive())
ReefAngel.Relay.On(Port1);
else
ReefAngel.Relay.Off(Port1);
//ATO Protection
if (ReefAngel.LowATO.IsActive())
ReefAngel.Relay.On(Port4);
else
ReefAngel.Relay.Off(Port4);
//Kalk Dose 50sec @ 8pm-12pm (every 15min)
if (hour() >=20 || hour() < 12)
ReefAngel.Relay.Set(Port4, now()%900<50);
else
ReefAngel.Relay.Off(Port4);
// Add night mode (constant 30%)
if (now()%SECS_PER_DAY<30600 || now()%SECS_PER_DAY >=81000) { // Time is before 8:30am and after 10:30pm
ReefAngel.PWM.SetDaylight(30);
}
ReefAngel.DCPump.UseMemory = true;
ReefAngel.DCPump.DaylightChannel = Sync;
ReefAngel.DCPump.ActinicChannel = None;
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;
////// Place your custom code below here


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

// This should always be the last line
ReefAngel.Portal( "paulturner911" );
ReefAngel.ShowInterface();
}

void DrawCustomMain()
{
int x,y;
char text[10];
// Dimming Expansion
x = 15;
y = 2;
for ( int a=0;a<6;a++ )
{
if ( a>2 ) x = 75;
if ( a==3 ) y = 2;
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x,y,"Ch :" );
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x+12,y,a );
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x+24,y,ReefAngel.PWM.GetChannelValue(a) );
y += 10;
}
pingSerial();

// Parameters
#if defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 43, ReefAngel.Params,
ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue() );
#else // defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 43, 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, 84, TempRelay );
pingSerial();

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

void DrawCustomGraph()
{
}