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%