Graphing PWM on Relay Box
-
- Posts: 287
- Joined: Wed Jan 23, 2013 12:36 pm
Graphing PWM on Relay Box
Ive had the blessing of Lee writing my WP40 code to randomize the modes. However everytime I check it in the portal it is either 70 or 20, I havent seen it an any other percentage.....
Is there anyways to graph or recall the PWM on the relay box?
Is there anyways to graph or recall the PWM on the relay box?
Re: Graphing PWM on Relay Box
Try this:
http://forum.reefangel.com/status/chart ... ilter=PWMD
It looks like though it's just flipping between the 70% and 20%.. Might I have done something wrong...
Here's the code I gave to Paul... could use some other eyes to take a look:
http://forum.reefangel.com/status/chart ... ilter=PWMD
It looks like though it's just flipping between the 70% and 20%.. Might I have done something wrong...
Here's the code I gave to Paul... could use some other eyes to take a look:
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 <RA_Colors.h>
#include <RA_CustomColors.h>
#include <ReefAngel.h>
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
// 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
if ((now()%SECS_PER_HOUR==0) && mode==12) {
mode=random(7); // Change the mode once per hour to modes 0-6
}
// 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 45%)
if (now%SECS_PER_DAY<30600 && now%SECS_PER_DAY >=73800) { // Time is before 8:30am and after 10:30pm
ReefAngel.PWM.SetDaylight(45);
}
////// Place your custom code above here
}
-
- Posts: 287
- Joined: Wed Jan 23, 2013 12:36 pm
Re: Graphing PWM on Relay Box
How did you find that graph?
It starts to do what we want on 21st @22:22 when I did the upload. It seems that it is maybe cycling short pulse, long pulse, and NTP, but excluding lagoon and reefcrest.
I uploaded the night mode last night, but I didnt get to see if it cycled down to 40. Looking at the chart it doesnt seem that it did.
I really appreciate all of the help.
It starts to do what we want on 21st @22:22 when I did the upload. It seems that it is maybe cycling short pulse, long pulse, and NTP, but excluding lagoon and reefcrest.
I uploaded the night mode last night, but I didnt get to see if it cycled down to 40. Looking at the chart it doesnt seem that it did.
I really appreciate all of the help.
Re: Graphing PWM on Relay Box
there's a thread somewhere about the graphs, you can get all your portal details in a graph for any of the data points. I didn't see the pwm value going to the 45% we expected...not sure what I did wrong
-
- Posts: 287
- Joined: Wed Jan 23, 2013 12:36 pm
Re: Graphing PWM on Relay Box
I didnt upload the night mode until last night. I dont see it on the graph either, and my IP just went on the unknow address tyrant......Just started this about a month ago. The IP doesnt change on my 2wire router, and I have to unplug and replug the wifi attachment to get it back on line. BUT, one fix at a time..... I was thinking maybe the random code should go after the feedmode/wave maker and before the vortec modes? I know placement is important with this....just a thought. Let me know what you think.
Graphing PWM on Relay Box
The feedmode check doesnt care about modes...
I think i know what is happening...code coming soon...
I think i know what is happening...code coming soon...
Re: Graphing PWM on Relay Box
Ok, try this for the random section. The idea now is that we set rmode to the mode we want when in that mode which we change once per hour. Before the mode would get changed at the top of each hour, but then revert to what was in memory. So it was only good for one second. Now we make it persistent if we're in mode 12.
Code: Select all
// 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;
}
-
- Posts: 287
- Joined: Wed Jan 23, 2013 12:36 pm
Re: Graphing PWM on Relay Box
Just checking placement.......replace like this?
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.
Thanks!
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.
Thanks!
-
- Posts: 287
- Joined: Wed Jan 23, 2013 12:36 pm
Re: Graphing PWM on Relay Box
Ill upload tonight and let you know if we are up and running also get a chance to test the night mode.
Thanks!!!
Thanks!!!
-
- Posts: 287
- Joined: Wed Jan 23, 2013 12:36 pm
Re: Graphing PWM on Relay Box
It is cycling between the modes! It didnt go into night mode though. It seems pretty sharp, maybe the reefcrest and lagoon just havent been called much.
Thanks Lee
Thanks Lee
Graphing PWM on Relay Box
Lets see over a longer duration and I'll double check the night mode..
-
- Posts: 287
- Joined: Wed Jan 23, 2013 12:36 pm
Re: Graphing PWM on Relay Box
Quick question....
If I make changes in the portal for the modes such as duration to make the short pulse longer will those changes reflect when I activate our random mode again?
It's kind of hard to grasp how it's cycling when the portal graph is updating every five minutes... Ntp and short pulse seem the same since Ntp never peaks within the hour.
I'm getting a good amount of ramping up and down, but it seems to mostly switch 30/70 the majority of cycles. I'm hoping for more ramping than pulsing. What could I change?
If I make changes in the portal for the modes such as duration to make the short pulse longer will those changes reflect when I activate our random mode again?
It's kind of hard to grasp how it's cycling when the portal graph is updating every five minutes... Ntp and short pulse seem the same since Ntp never peaks within the hour.
I'm getting a good amount of ramping up and down, but it seems to mostly switch 30/70 the majority of cycles. I'm hoping for more ramping than pulsing. What could I change?
-
- Posts: 287
- Joined: Wed Jan 23, 2013 12:36 pm
Re: Graphing PWM on Relay Box
Could I do this for the night mode???
if (hour() >=21 || hour() < 10)
ReefAngel.PWM.SetDaylight(45);
Just trying to fix it.....
if (hour() >=21 || hour() < 10)
ReefAngel.PWM.SetDaylight(45);
Just trying to fix it.....
Re: Graphing PWM on Relay Box
No i see the problem. Change the && in my statement to ||
Or your commands would work too but without :30 in the time. Your logic helped me realize what was wrong.
Or your commands would work too but without :30 in the time. Your logic helped me realize what was wrong.
-
- Posts: 287
- Joined: Wed Jan 23, 2013 12:36 pm
Re: Graphing PWM on Relay Box
Is there anyway to limit the random modes to certian modes? I see that they are number 1-6, but how would I know which mode is tied to which number, and how would I write it?
// Add random mode if we set to Mode to 12
if ((now()%SECS_PER_HOUR==0) && mode==12) {
mode=random(1,2,3,5,6); // Change the mode once per hour to modes 0-6
}
// Add random mode if we set to Mode to 12
if ((now()%SECS_PER_HOUR==0) && mode==12) {
mode=random(1,2,3,5,6); // Change the mode once per hour to modes 0-6
}
Re: Graphing PWM on Relay Box
I'm doing exactly that. Take a look at the RFCustom function in my INO for an example.
-
- Posts: 287
- Joined: Wed Jan 23, 2013 12:36 pm
Re: Graphing PWM on Relay Box
Im going to start an INO thread for myself...Im at work now so Im just gonna stick a few thing I would like here until I get my code from home.
I think this is what I need from your INO
void SetRF() {
int ntmDelay=InternalMemory.read(Mem_B_NTMDelay)*60;
int ntmTime=InternalMemory.read(Mem_B_NTMTime)*60;
static time_t t;
vtMode=InternalMemory.RFMode_read();
vtSpeed=InternalMemory.RFSpeed_read();
vtDuration=InternalMemory.RFDuration_read();
if (now()-t > ntmDelay && now()-t < ntmTime+ntmDelay) {
// Post feeding mode
vtMode=Smart_NTM;
vtSpeed=InternalMemory.read(Mem_B_NTMSpeed);
vtDuration=InternalMemory.read(Mem_B_NTMDuration);
} else if (!sun.IsDaytime() && InternalMemory.read(Mem_B_NightRF)) {
vtMode=Night;
vtSpeed=InternalMemory.read(Mem_B_NightSpeed);
vtDuration=InternalMemory.read(Mem_B_NightDuration);
} else {
if (vtMode!=Night && ReefAngel.RF.Mode==Night)
ReefAngel.RF.SetMode(Night_Stop,0,0);
}
if (ReefAngel.DisplayedMenu==FEEDING_MODE && InternalMemory.read(Mem_B_FeedingRF)) {
t=now(); // Run post feeding mode when this counter stops
} else {
(vtMode==Custom) ? RFCustom() : ReefAngel.RF.SetMode(vtMode,vtSpeed,vtDuration);
}
}
void RFCustom() {
static boolean changeMode, firstTime=true;
byte rcSpeed, rcSpeedAS;
byte tideSpeed=tide.CalcTide();
byte tideMin=InternalMemory.read(Mem_B_TideMin);
byte tideMax=InternalMemory.read(Mem_B_TideMax);
byte tideMode=InternalMemory.read(Mem_B_TideMode);
float pumpOffset=(float) InternalMemory.read(Mem_B_PumpOffset)/100;
byte RandomModes[]={ ReefCrest, TidalSwell, Smart_NTM, Lagoon, ShortPulse, LongPulse };
if (now()%SECS_PER_DAY!=0) changeMode=true;
if ((now()%SECS_PER_DAY==0 && changeMode) || firstTime) {
tideMode=random(100)%sizeof(RandomModes);
InternalMemory.write(Mem_B_TideMode,tideMode);
changeMode=false;
firstTime=false;
}
ReefAngel.CustomVar[Var_TideMode]=tideMode+1;
switch (RandomModes[tideMode]) {
case ReefCrest: {
rcSpeed=ReefCrestMode(tideSpeed,tideMin,true);
rcSpeedAS=ReefCrestMode(tideSpeed,tideMin ,false);
break;
}
case TidalSwell: {
rcSpeed=TidalSwellMode(tideSpeed+tideMin,true);
rcSpeedAS=TidalSwellMode(tideSpeed+tideMin,false);
break;
}
case Smart_NTM: {
vtDuration=InternalMemory.read(Mem_B_NTMDuration);
rcSpeed=NutrientTransportMode(tideSpeed-tideMax,tideSpeed+tideMin,vtDuration*100,true);
rcSpeedAS=NutrientTransportMode(tideSpeed-tideMax,tideSpeed+tideMin,vtDuration*100,false);
break;
}
case Lagoon: {
rcSpeed=SineMode(tideSpeed-tideMin,tideSpeed+tideMin,vtDuration*60,true);
rcSpeedAS=SineMode(tideSpeed-tideMin,tideSpeed+tideMin,vtDuration*60,false);
break;
}
case ShortPulse: {
vtDuration=InternalMemory.read(Mem_B_NTMDuration);
rcSpeed=ShortPulseMode(tideSpeed-tideMax,tideSpeed+tideMin,vtDuration*100,true);
rcSpeedAS=ShortPulseMode(tideSpeed-tideMax,tideSpeed+tideMin,vtDuration*100,false);
break;
}
case LongPulse: {
rcSpeed=LongPulseMode(tideSpeed-tideMax,tideSpeed+tideMin,vtDuration,true);
rcSpeedAS=LongPulseMode(tideSpeed-tideMax,tideSpeed+tideMin,vtDuration,false);
break;
}
}
ReefAngel.RF.SetMode(Custom,rcSpeedAS*pumpOffset,tide.isOutgoing());
ReefAngel.RF.SetMode(Custom,rcSpeed,tide.isIncoming());
}
AND THIS
void NextRFMode() {
vtMode++;
if (vtMode > 12) {
vtMode=0;
vtSpeed=50; // Constant
} else if (vtMode == 1) {
vtSpeed=40; // Lagoon
} else if (vtMode == 2) {
vtSpeed=45; // Reef Crest
} else if (vtMode == 3) {
vtSpeed=55; vtDuration=10; // Short Pulse
} else if (vtMode == 4) {
vtSpeed=55; vtDuration=20; // Long Pulse
} else if (vtMode == 5) {
vtSpeed=InternalMemory.read(Mem_B_NTMSpeed);
vtDuration=InternalMemory.read(Mem_B_NTMDuration); // Smart_NTM
} else if (vtMode == 6) {
vtSpeed=50; vtDuration=10; // Smart_TSM
} else if (vtMode == 7) {
vtSpeed=InternalMemory.read(Mem_B_NightSpeed);
vtDuration=InternalMemory.read(Mem_B_NightDuration);
vtMode=9; // Night
} else if (vtMode == 10) {
vtSpeed=65; vtDuration=5; // Storm
} else if (vtMode == 11) {
vtSpeed=45; vtDuration=10; // Custom
}
if (vtMode!=InternalMemory.RFMode_read())
InternalMemory.RFMode_write(vtMode);
if (vtSpeed!=InternalMemory.RFSpeed_read())
InternalMemory.RFSpeed_write(vtSpeed);
if (vtDuration!=InternalMemory.RFDuration_read())
InternalMemory.RFDuration_write(vtDuration);
I would also like the controller to display the Vortec Mode.
I havent decided how to run the random, but my graph sure doesnt look like yours. It may be my offsets, but it mostly 70/30 and when its reefcrest it just swings right around 43 but does not rise or fall more then 5ish?!?!
I see you have the daily wave form randomiozed, I thik this is what I will run with....
Also could you explain wifi alert? Not sure what that means.
Thanks!!!
I think this is what I need from your INO
void SetRF() {
int ntmDelay=InternalMemory.read(Mem_B_NTMDelay)*60;
int ntmTime=InternalMemory.read(Mem_B_NTMTime)*60;
static time_t t;
vtMode=InternalMemory.RFMode_read();
vtSpeed=InternalMemory.RFSpeed_read();
vtDuration=InternalMemory.RFDuration_read();
if (now()-t > ntmDelay && now()-t < ntmTime+ntmDelay) {
// Post feeding mode
vtMode=Smart_NTM;
vtSpeed=InternalMemory.read(Mem_B_NTMSpeed);
vtDuration=InternalMemory.read(Mem_B_NTMDuration);
} else if (!sun.IsDaytime() && InternalMemory.read(Mem_B_NightRF)) {
vtMode=Night;
vtSpeed=InternalMemory.read(Mem_B_NightSpeed);
vtDuration=InternalMemory.read(Mem_B_NightDuration);
} else {
if (vtMode!=Night && ReefAngel.RF.Mode==Night)
ReefAngel.RF.SetMode(Night_Stop,0,0);
}
if (ReefAngel.DisplayedMenu==FEEDING_MODE && InternalMemory.read(Mem_B_FeedingRF)) {
t=now(); // Run post feeding mode when this counter stops
} else {
(vtMode==Custom) ? RFCustom() : ReefAngel.RF.SetMode(vtMode,vtSpeed,vtDuration);
}
}
void RFCustom() {
static boolean changeMode, firstTime=true;
byte rcSpeed, rcSpeedAS;
byte tideSpeed=tide.CalcTide();
byte tideMin=InternalMemory.read(Mem_B_TideMin);
byte tideMax=InternalMemory.read(Mem_B_TideMax);
byte tideMode=InternalMemory.read(Mem_B_TideMode);
float pumpOffset=(float) InternalMemory.read(Mem_B_PumpOffset)/100;
byte RandomModes[]={ ReefCrest, TidalSwell, Smart_NTM, Lagoon, ShortPulse, LongPulse };
if (now()%SECS_PER_DAY!=0) changeMode=true;
if ((now()%SECS_PER_DAY==0 && changeMode) || firstTime) {
tideMode=random(100)%sizeof(RandomModes);
InternalMemory.write(Mem_B_TideMode,tideMode);
changeMode=false;
firstTime=false;
}
ReefAngel.CustomVar[Var_TideMode]=tideMode+1;
switch (RandomModes[tideMode]) {
case ReefCrest: {
rcSpeed=ReefCrestMode(tideSpeed,tideMin,true);
rcSpeedAS=ReefCrestMode(tideSpeed,tideMin ,false);
break;
}
case TidalSwell: {
rcSpeed=TidalSwellMode(tideSpeed+tideMin,true);
rcSpeedAS=TidalSwellMode(tideSpeed+tideMin,false);
break;
}
case Smart_NTM: {
vtDuration=InternalMemory.read(Mem_B_NTMDuration);
rcSpeed=NutrientTransportMode(tideSpeed-tideMax,tideSpeed+tideMin,vtDuration*100,true);
rcSpeedAS=NutrientTransportMode(tideSpeed-tideMax,tideSpeed+tideMin,vtDuration*100,false);
break;
}
case Lagoon: {
rcSpeed=SineMode(tideSpeed-tideMin,tideSpeed+tideMin,vtDuration*60,true);
rcSpeedAS=SineMode(tideSpeed-tideMin,tideSpeed+tideMin,vtDuration*60,false);
break;
}
case ShortPulse: {
vtDuration=InternalMemory.read(Mem_B_NTMDuration);
rcSpeed=ShortPulseMode(tideSpeed-tideMax,tideSpeed+tideMin,vtDuration*100,true);
rcSpeedAS=ShortPulseMode(tideSpeed-tideMax,tideSpeed+tideMin,vtDuration*100,false);
break;
}
case LongPulse: {
rcSpeed=LongPulseMode(tideSpeed-tideMax,tideSpeed+tideMin,vtDuration,true);
rcSpeedAS=LongPulseMode(tideSpeed-tideMax,tideSpeed+tideMin,vtDuration,false);
break;
}
}
ReefAngel.RF.SetMode(Custom,rcSpeedAS*pumpOffset,tide.isOutgoing());
ReefAngel.RF.SetMode(Custom,rcSpeed,tide.isIncoming());
}
AND THIS
void NextRFMode() {
vtMode++;
if (vtMode > 12) {
vtMode=0;
vtSpeed=50; // Constant
} else if (vtMode == 1) {
vtSpeed=40; // Lagoon
} else if (vtMode == 2) {
vtSpeed=45; // Reef Crest
} else if (vtMode == 3) {
vtSpeed=55; vtDuration=10; // Short Pulse
} else if (vtMode == 4) {
vtSpeed=55; vtDuration=20; // Long Pulse
} else if (vtMode == 5) {
vtSpeed=InternalMemory.read(Mem_B_NTMSpeed);
vtDuration=InternalMemory.read(Mem_B_NTMDuration); // Smart_NTM
} else if (vtMode == 6) {
vtSpeed=50; vtDuration=10; // Smart_TSM
} else if (vtMode == 7) {
vtSpeed=InternalMemory.read(Mem_B_NightSpeed);
vtDuration=InternalMemory.read(Mem_B_NightDuration);
vtMode=9; // Night
} else if (vtMode == 10) {
vtSpeed=65; vtDuration=5; // Storm
} else if (vtMode == 11) {
vtSpeed=45; vtDuration=10; // Custom
}
if (vtMode!=InternalMemory.RFMode_read())
InternalMemory.RFMode_write(vtMode);
if (vtSpeed!=InternalMemory.RFSpeed_read())
InternalMemory.RFSpeed_write(vtSpeed);
if (vtDuration!=InternalMemory.RFDuration_read())
InternalMemory.RFDuration_write(vtDuration);
I would also like the controller to display the Vortec Mode.
I havent decided how to run the random, but my graph sure doesnt look like yours. It may be my offsets, but it mostly 70/30 and when its reefcrest it just swings right around 43 but does not rise or fall more then 5ish?!?!
I see you have the daily wave form randomiozed, I thik this is what I will run with....
Also could you explain wifi alert? Not sure what that means.
Thanks!!!