Page 1 of 2
Random Wave Mode help
Posted: Thu Dec 10, 2015 6:51 pm
by slm222
I copied Saochen's code and made some modifications, could yall look over and let me know if it looks like it will work and accomplish what is listed out in the comments?
Code: Select all
// 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, Gyre, Lagoon, Constant, TidalSwell, LongPulse, Else, };
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;
}
// Set timer when in feeding mode
static unsigned long feeding;
if (ReefAngel.DisplayedMenu==FEEDING_MODE) feeding=now();
if (now()-feeding<3600) { //does it go to this after a feeding mode??
// Continue NTM for the 60 minutes
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=NutrientTransport;
} else if (now()%SECS_PER_DAY<75600 || now()%SECS_PER_DAY>=32400) { // 9pm / 9am
// Night mode (go to 30%)
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=TidalSwell;
ReefAngel.DCPump.Speed=35;
} else if (now()%SECS_PER_DAY<32400 || now()%SECS_PER_DAY>=36000) { // 9am / 10am
// Transition to random from Night (go to Tidal Swell 100%)
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=TidalSwell;
ReefAngel.DCPump.Speed=100;
}else if (now()%SECS_PER_DAY<68400 || now()%SECS_PER_DAY>=75600) { // 7pm / 9pm
// Transition From random to night mode (go to Tidal Swell 100%)
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=TidalSwell;
ReefAngel.DCPump.Speed=100;
}else if (InternalMemory.DCPumpMode_read()==11) {
// Custom Mode and nothing else going on
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=modes[rmode]; // Put the mode to the random mode :)
ReefAngel.DCPump.Speed=InternalMemory.DCPumpSpeed_read(); // Set speed from portal
} else {
ReefAngel.DCPump.UseMemory=true; // Will reset all values from memory
}
Re: Random Wave Mode help
Posted: Thu Dec 17, 2015 7:32 pm
by slm222
I don't know why but it doesn't seems to be working. runs into an issue when it gets to byte modes[] the fifth line down.
Re: Random Wave Mode help
Posted: Fri Dec 18, 2015 6:00 am
by cosmith71
What is it doing or not doing?
--Colin
Re: Random Wave Mode help
Posted: Fri Dec 18, 2015 6:02 am
by cosmith71
I notice an extra comma after the else in the byte modes[]. Could be causing an unexpected behavior.
Re: Random Wave Mode help
Posted: Fri Dec 18, 2015 10:19 am
by binder
cosmith71 wrote:I notice an extra comma after the else in the byte modes[]. Could be causing an unexpected behavior.
that should not make a difference but it could.
Sent from my iPad using Tapatalk
Re: Random Wave Mode help
Posted: Fri Dec 18, 2015 3:24 pm
by slm222
This is the first error I'm running into, see attached picture
Heres the current code I'm trying
Code: Select all
// 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[] = { ReefCrestMode, SineMode, TidalSwellMode, LongPulseMode, ElseMode, };
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;
}
// Set timer when in feeding mode
static unsigned long feeding;
if (ReefAngel.DisplayedMenu==FEEDING_MODE) feeding=now();
if (now()-feeding<3600) { //does it go to this after a feeding mode??
// Continue NTM for the 60 minutes
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=NutrientTransport;
} else if (now()%SECS_PER_DAY>=75600 || now()%SECS_PER_DAY<=32400) { // 9pm / 9am
// Night mode (go to 30%)
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=TidalSwell;
ReefAngel.DCPump.Speed=35;
} else if (now()%SECS_PER_DAY>=32400 || now()%SECS_PER_DAY<=36000) { // 9am / 10am
// Transition to random from Night (go to Tidal Swell 100%)
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=TidalSwell;
ReefAngel.DCPump.Speed=100;
}else if (now()%SECS_PER_DAY>=68400 || now()%SECS_PER_DAY<=75600) { // 7pm / 9pm
// Transition From random to night mode (go to Tidal Swell 100%)
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=TidalSwell;
ReefAngel.DCPump.Speed=100;
}else if (InternalMemory.DCPumpMode_read()==11) {
// Custom Mode and nothing else going on
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=modes[rmode]; // Put the mode to the random mode :)
ReefAngel.DCPump.Speed=100;
} else {
ReefAngel.DCPump.UseMemory=true; // Will reset all values from memory
}
Re: Random Wave Mode help
Posted: Fri Dec 18, 2015 4:02 pm
by lnevo
Yes it's definitely the extra comma. The compiler is expecting a byte value there but you're not providing one.
Re: Random Wave Mode help
Posted: Fri Dec 18, 2015 4:11 pm
by slm222
I took out the extra comma and its still giving me the same error: invalid conversion from 'byte(*)(byte, byte, Boolean)' to 'byte'
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 <PAR.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
ReefAngel.AddStandardMenu(); // Add Standard Menu
ReefAngel.Use2014Screen(); // Let's use 2014 Screen
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = Port2Bit | Port8Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port2Bit | Port8Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = 0;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port4Bit;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Set the Overheat temperature setting
InternalMemory.OverheatTemp_write( 830 );
// Feeeding and Water Change mode speed
ReefAngel.DCPump.FeedingSpeed=0;
ReefAngel.DCPump.WaterChangeSpeed=0;
// Ports that are always on
ReefAngel.Relay.On( Port6 );
ReefAngel.Relay.On( Port7 );
////// Place additional initialization code below here
// Define labels for 2014 LCD screen
//box0
ReefAngel.CustomLabels[0]="T5HO";
ReefAngel.CustomLabels[1]="Skimmer";
ReefAngel.CustomLabels[2]="FugeLight";
ReefAngel.CustomLabels[3]="Heater";
ReefAngel.CustomLabels[4]="ScrubLight";
ReefAngel.CustomLabels[5]="Unused";
ReefAngel.CustomLabels[6]="Return";
ReefAngel.CustomLabels[7]="ATO_Pump";
////// Place additional initialization code above here
}
void loop()
{
ReefAngel.MHLights( Port1,12,30,14,30,5 ); //t5ho
ReefAngel.MHLights( Port2,5,0,22,0,5 ); //skimmer
ReefAngel.StandardLights( Port3,18,0,10,0 ); //fugelight
ReefAngel.StandardHeater( Port4,780,788 ); //heater
ReefAngel.StandardLights( Port5,18,0,10,0 ); //scrubber light
ReefAngel.SingleATO( true,Port8,360,0 ); // ato
////// 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[] = { ReefCrestMode, SineMode, TidalSwellMode, LongPulseMode, ElseMode };
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;
}
// Set timer when in feeding mode
static unsigned long feeding;
if (ReefAngel.DisplayedMenu==FEEDING_MODE) feeding=now();
if (now()-feeding<3600) { //does it go to this after a feeding mode??
// Continue NTM for the 60 minutes
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=NutrientTransport;
} else if (now()%SECS_PER_DAY>=75600 || now()%SECS_PER_DAY<=32400) { // 9pm / 9am
// Night mode (go to 30%)
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=TidalSwell;
ReefAngel.DCPump.Speed=35;
} else if (now()%SECS_PER_DAY>=32400 || now()%SECS_PER_DAY<=36000) { // 9am / 10am
// Transition to random from Night (go to Tidal Swell 100%)
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=TidalSwell;
ReefAngel.DCPump.Speed=100;
}else if (now()%SECS_PER_DAY>=68400 || now()%SECS_PER_DAY<=75600) { // 7pm / 9pm
// Transition From random to night mode (go to Tidal Swell 100%)
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=TidalSwell;
ReefAngel.DCPump.Speed=100;
}else if (InternalMemory.DCPumpMode_read()==11) {
// Custom Mode and nothing else going on
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=modes[rmode]; // Put the mode to the random mode :)
ReefAngel.DCPump.Speed=100;
} else {
ReefAngel.DCPump.UseMemory=true; // Will reset all values from memory
}
////// Place your custom code above here
// This should always be the last line
ReefAngel.ShowInterface();
}
Re: Random Wave Mode help
Posted: Fri Dec 18, 2015 4:53 pm
by lnevo
Take out Mode from the Mode names. Those are the functions not the "mode" so replace ReefCrestMode with ReefCrest
Re: Random Wave Mode help
Posted: Fri Dec 18, 2015 4:57 pm
by slm222
ahh. That seems to have fixed it. I will try it tonight and see how it goes. Thank you very much for the help. I will report back.
Re: Random Wave Mode help
Posted: Fri Dec 18, 2015 7:14 pm
by slm222
Ok, added a couple things. Notices the pumps were running in sync, so added sync and anti sync in each profile and added duration for the modes that transition from and to night ( sine ) . seems to be working good so far. What unit of time is used for sine in the duration I set?
Code: Select all
// 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, Sine, TidalSwell, LongPulse, Else, Sine, ReefCrest, Else };
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;
}
// Set timer when in feeding mode
static unsigned long feeding;
if (ReefAngel.DisplayedMenu==FEEDING_MODE) feeding=now();
if (now()-feeding<3600) {
// after feed mode Continue NTM for the 60 minutes
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=NutrientTransport;
ReefAngel.DCPump.DaylightChannel = Sync;
ReefAngel.DCPump.ActinicChannel = AntiSync;
} else if (now()%SECS_PER_DAY>=75600 || now()%SECS_PER_DAY<=32400) { // 9pm / 9am
// Night mode (go to 30%)
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=Sine;
ReefAngel.DCPump.Speed=35;
ReefAngel.DCPump.Duration=600;
ReefAngel.DCPump.DaylightChannel = Sync;
ReefAngel.DCPump.ActinicChannel = AntiSync;
} else if (now()%SECS_PER_DAY>=32400 || now()%SECS_PER_DAY<=36000) { // 9am / 10am
// Transition to random from Night (go to Tidal Swell 100%)
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=Sine;
ReefAngel.DCPump.Speed=100;
ReefAngel.DCPump.Duration=400;
ReefAngel.DCPump.DaylightChannel = Sync;
ReefAngel.DCPump.ActinicChannel = AntiSync;
}else if (now()%SECS_PER_DAY>=68400 || now()%SECS_PER_DAY<=75600) { // 7pm / 9pm
// Transition From random to night mode (go to Tidal Swell 100%)
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=Sine;
ReefAngel.DCPump.Speed=100;
ReefAngel.DCPump.Duration=400;
ReefAngel.DCPump.DaylightChannel = Sync;
ReefAngel.DCPump.ActinicChannel = AntiSync;
}else if (InternalMemory.DCPumpMode_read()==11) {
// Custom Mode and nothing else going on
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=modes[rmode]; // Put the mode to the random mode :)
ReefAngel.DCPump.Speed=100;
ReefAngel.DCPump.DaylightChannel = Sync;
ReefAngel.DCPump.ActinicChannel = AntiSync;
} else {
ReefAngel.DCPump.UseMemory=true; // Will reset all values from memory
}
Re: Random Wave Mode help
Posted: Sat Dec 19, 2015 1:41 am
by lnevo
You don't have to do the assignment if sync/antisync so many times. You can do it once before the if statement or even put it in setup.
Re: Random Wave Mode help
Posted: Mon Dec 21, 2015 1:20 pm
by slm222
got ya. seems to be working. but has been coming up with reef crest everyday. should this work without connecting to it through the portal and set random everyday?
Re: Random Wave Mode help
Posted: Mon Dec 21, 2015 2:05 pm
by lnevo
I changed my randomizing frequency to every 6 hours because daily wasn't giving enough of a change

Re: Random Wave Mode help
Posted: Mon Dec 21, 2015 4:09 pm
by slm222
heres something I just noticed. ive tried two different variations of the code.
with this code it stays in tidal swell mode
Code: Select all
// 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, Sine, TidalSwell, LongPulse, Else, Sine, ReefCrest, Else };
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;
}
// Set timer when in feeding mode
static unsigned long feeding;
if (ReefAngel.DisplayedMenu==FEEDING_MODE) feeding=now();
if (now()-feeding<3600) { //does it go to this after a feeding mode??
// Continue NTM for the 60 minutes
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=NutrientTransport;
} else if (now()%SECS_PER_DAY>=75600 || now()%SECS_PER_DAY<=32400) { // 9pm / 9am
// Night mode (go to 30%)
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=TidalSwell;
ReefAngel.DCPump.Speed=35;
} else if (now()%SECS_PER_DAY>=32400 || now()%SECS_PER_DAY<=36000) { // 9am / 10am
// Transition to random from Night (go to Tidal Swell 100%)
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=TidalSwell;
ReefAngel.DCPump.Speed=100;
}else if (now()%SECS_PER_DAY>=68400 || now()%SECS_PER_DAY<=75600) { // 7pm / 9pm
// Transition From random to night mode (go to Tidal Swell 100%)
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=TidalSwell;
ReefAngel.DCPump.Speed=100;
}else if (InternalMemory.DCPumpMode_read()==11) {
// Custom Mode and nothing else going on
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=modes[rmode]; // Put the mode to the random mode :)
ReefAngel.DCPump.Speed=100;
} else {
ReefAngel.DCPump.UseMemory=true; // Will reset all values from memory
}
in this code it goes to random, but im trying to figure out how you stated above to change change rate to every 6 hours
Code: Select all
// 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, Sine, TidalSwell, LongPulse, Else, Sine, ReefCrest, Else };
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;
}
// Set timer when in feeding mode
static unsigned long feeding;
if (ReefAngel.DisplayedMenu==FEEDING_MODE) feeding=now();
if (now()-feeding<3600) { //does it go to this after a feeding mode??
// Continue NTM for the 60 minutes
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=NutrientTransport;
} else if (now()%SECS_PER_DAY>=75600 || now()%SECS_PER_DAY<=32400) { // 9pm / 9am
// Night mode (go to 30%)
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=TidalSwell;
ReefAngel.DCPump.Speed=35;
} else if (InternalMemory.DCPumpMode_read()==11) {
// Custom Mode and nothing else going on
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=modes[rmode]; // Put the mode to the random mode :)
ReefAngel.DCPump.Speed=100;
} else {
ReefAngel.DCPump.UseMemory=true; // Will reset all values from memory
}
Re: Random Wave Mode help
Posted: Mon Dec 21, 2015 4:13 pm
by lnevo
Are you seeding the random number generator? Otherwise it will pull the same random sequence every time you restart the controller
Re: Random Wave Mode help
Posted: Mon Dec 21, 2015 4:17 pm
by slm222
Thank you for such quick and helpful responses!
no im afraid with my lack of programming knowledge I wouldn't know how or where to do that.
Re: Random Wave Mode help
Posted: Mon Dec 21, 2015 5:42 pm
by lnevo
This is what I have in my setup() function.
randomSeed(now()/SECS_PER_DAY);
This gives it something to randomize against and since I'm doing it by day it will be the same if I reboot that day
Re: Random Wave Mode help
Posted: Mon Dec 21, 2015 5:53 pm
by slm222
any idea on why the code here would stay on sine instead of going to random ?
Code: Select all
// 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, Sine, TidalSwell, LongPulse, Else, Sine, ReefCrest, Else };
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;
}
// Set timer when in feeding mode
static unsigned long feeding;
if (ReefAngel.DisplayedMenu==FEEDING_MODE) feeding=now();
if (now()-feeding<3600) { //does it go to this after a feeding mode??
// Continue NTM for the 60 minutes
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=NutrientTransport;
} else if (now()%SECS_PER_DAY>=75600 || now()%SECS_PER_DAY<=32400) { // 9pm / 9am
// Night mode (go to 30%)
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=TidalSwell;
ReefAngel.DCPump.Speed=35;
} else if (now()%SECS_PER_DAY>=32400 || now()%SECS_PER_DAY<=36000) { // 9am / 10am
// Transition to random from Night (go to Tidal Swell 100%)
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=TidalSwell;
ReefAngel.DCPump.Speed=100;
}else if (now()%SECS_PER_DAY>=68400 || now()%SECS_PER_DAY<=75600) { // 7pm / 9pm
// Transition From random to night mode (go to Tidal Swell 100%)
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=TidalSwell;
ReefAngel.DCPump.Speed=100;
}else if (InternalMemory.DCPumpMode_read()==11) {
// Custom Mode and nothing else going on
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=modes[rmode]; // Put the mode to the random mode :)
ReefAngel.DCPump.Speed=100;
} else {
ReefAngel.DCPump.UseMemory=true; // Will reset all values from memory
}
Re: Random Wave Mode help
Posted: Mon Dec 21, 2015 7:52 pm
by lnevo
Well there's only a 1 in 4 chance of it and second, it's going to be the same all day. Did you add the randomseed function. You can take out the / seconds per day part and it should be more random. Also know that the portal only updates every 5 minutes
Re: Random Wave Mode help
Posted: Mon Dec 21, 2015 8:24 pm
by slm222
Yes I added it in the void setup() area.
Currently I don't have access to the portal. I have not ordered my WiFi unit yet. Will that cause issues?
Re: Random Wave Mode help
Posted: Tue Dec 22, 2015 6:35 am
by lnevo
No it won't cause issues. Just wasn't sure how you were monitoring the mode.
Re: Random Wave Mode help
Posted: Tue Dec 22, 2015 9:10 am
by slm222
Oh. I look on the screen when I remember.
Re: Random Wave Mode help
Posted: Tue Dec 22, 2015 3:12 pm
by slm222
so in your thought theres no way to do what I was trying to do? which was
morning of sine 7am-9am
Afternoon of random 9am-8pm
evening of sine 7pm-9pm
and then nighttime mode 9pm-7am
Re: Random Wave Mode help
Posted: Tue Dec 22, 2015 4:02 pm
by lnevo
Of course there is. We can do anything. Look at Steve's code (Sacohen) he's doing that I believe.
Re: Random Wave Mode help
Posted: Tue Dec 22, 2015 4:14 pm
by slm222
Haha. I love the confidence. that's one reason why I went with reefangel! this community is great.
Steve's seems to just go from night time to the random code. I tried it in my code, but it seems to just stay in sine mode.
Re: Random Wave Mode help
Posted: Tue Dec 22, 2015 4:34 pm
by lnevo
Ok...i also want to make sure it's changing for you or still staying sine
Re: Random Wave Mode help
Posted: Tue Dec 22, 2015 4:49 pm
by slm222
ok. I will keep an eye on it over the holidays and report back. heres the code im running. I change secs to hours. seems to be working right. Is this a reason for the time to be in seconds instead of hours?
Code: Select all
// 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[] = { TidalSwell, ReefCrest, TidalSwell, Lagoon, Else, ReefCrest, Else, Lagoon };
ReefAngel.DCPump.DaylightChannel = Sync;
ReefAngel.DCPump.ActinicChannel = AntiSync;
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;
}
// Set timer when in feeding mode
static unsigned long feeding;
if (ReefAngel.DisplayedMenu==FEEDING_MODE) feeding=now();
if (now()-feeding<1800) {
// after feed mode Continue NTM for the 60 minutes
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=NutrientTransport;
}
else if (hour()>=7 && hour()<9){
//morning
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=300;
ReefAngel.DCPump.Mode=Sine;
ReefAngel.DCPump.Speed=100;
}
else if (hour()>=9 && hour()<19) {
//9am to 7pm
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=modes[rmode]; // Put the mode to the random mode :)
ReefAngel.DCPump.Speed=95;
}
else if (hour()>=19 && hour()<21){
//7pm to 9pm
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=300;
ReefAngel.DCPump.Mode=Sine;
ReefAngel.DCPump.Speed=100;
}else { // 9pm / 9am
// Night mode
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=500;
ReefAngel.DCPump.Mode=Sine;
ReefAngel.DCPump.Speed=40;
}
Re: Random Wave Mode help
Posted: Tue Dec 22, 2015 5:12 pm
by lnevo
You realize you hve the schedule all setup at the end. From 7pm to 9am you are forcing sine mode. The only time you are using the random mode is between 9am and 7pm
Re: Random Wave Mode help
Posted: Tue Dec 22, 2015 6:00 pm
by slm222
yes sir. I think that's what I was trying to do. just not sure if I did it right
this is how im seeing it in my mind :
7am-9am - sine wave (ramping up to the random mode)
9am-7pm - RANDOM
7pm-9pm - sine wave (ramping down from the random mode)
rest of the night sine wave at 40%