Page 1 of 9

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()
{
}

Re: PaulTurner911 Code

Posted: Wed Jun 19, 2013 7:35 pm
by Paulturner911
I went ahead and put the night mode in thinking it may work, but I was wrong....

Looking forward to hearing what you guys have to say :)

Re: PaulTurner911 Code

Posted: Wed Jun 19, 2013 7:51 pm
by lnevo
Paul,

Thats not from the latest code....i know because i streamlined your feeding mode code and its thats not there, plus you didn't post the night mode portion.

And we need roberto to add custom mode to the portal *cough* *cough* otherwise you'll still have to activate the custom mode from memory manually..

I'll see what i can throw together tomorrow...

Re: PaulTurner911 Code

Posted: Wed Jun 19, 2013 8:05 pm
by Paulturner911
You are right! I grabbed that from my OP in the thread...

Its pretty cool to see the DC Pump on the dashboard, but it doesnt show what percentage it is running at in that section, it does show above in the PWM though.

Re: PaulTurner911 Code

Posted: Wed Jun 19, 2013 8:09 pm
by Paulturner911
Removed to clean up this thread

Re: PaulTurner911 Code

Posted: Thu Jun 20, 2013 8:01 pm
by lnevo
Try this:

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>

////// 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 ); //MH 2
//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);

//Kalk Stir 12pm-1pm
if (hour() >=12 & hour() < 13)
ReefAngel.Relay.On(Port5);
else
ReefAngel.Relay.Off(Port5);


ReefAngel.DCPump.UseMemory = true;
ReefAngel.DCPump.DaylightChannel = Sync;
////// Place your custom code below here

///// Place your custom code below here

// Add random mode if we set to Mode to Custom in portal
static int rmode;
static boolean changeMode=true;

// These are the modes we can cycle through. You can add more and even repeat...
byte modes[] = { ReefCrest, TidalSwell, ShortPulse, NutrientTransport };

if (now()%SECS_PER_DAY==0 || changeMode==true) { // Change at midnight or if controller rebooted
rmode=random(100)%sizeof(modes); // Change the mode once per day to pick from our array
changeMode=false;
}

// Are we in custom mode
if (ReefAngel.DCPump.Mode==11) {
  ReefAngel.DCPump.UseMemory=false; // We are going to override the memory (which is currently set to 11..)
  ReefAngel.DCPump.Mode=modes[rmode];  // Put the mode to the random mode :)
} else {
  ReefAngel.DCPump.UseMemory=true;
}

// 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.DCPump.Speed=0;
} else if (now()-feeding<=(1800+3600)) { // // First 30 minutes pump is off.. next 60 minutes will be in NTM
ReefAngel.DCPump.Mode=NutrientTransport;
}


// 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.DCPump.Speed=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()
{
}

Re: PaulTurner911 Code

Posted: Thu Jun 20, 2013 9:20 pm
by Paulturner911
Thank YOU SIR!!!

In order to add and remove modes, do I simply type and or remove them in the following section?

// These are the modes we can cycle through. You can add more and even repeat...
byte modes[] = { ReefCrest, TidalSwell, ShortPulse, xxxxxxxx, NutrientTransport };

Could you give a quick explanation of what tidal swell is?

Re: PaulTurner911 Code

Posted: Fri Jun 21, 2013 1:39 am
by lnevo
Its cool. I like it. Look at ecotech manual.

Re: PaulTurner911 Code

Posted: Fri Jun 21, 2013 5:54 pm
by Paulturner911
I'm having an issue with the feedmode, the wp is not turning to NTM at 1800 on the countdown. It's not turning back on once the 3600s times out either. I'm not sure the night mode is activating either, I uploaded late last night and it didn't run at 30.

Re: PaulTurner911 Code

Posted: Fri Jun 21, 2013 11:35 pm
by lnevo
Let me know what it did. I'll look again at the code...

Re: PaulTurner911 Code

Posted: Sun Jun 23, 2013 11:00 am
by Paulturner911
Its not activating NTP at 1800 and once the feedmode is complete (3600) the WP pump stays off. Basically once the feed mode is activate it turns the WP pump off until I goto the portal and select a mode other than NTM.