I am trying to use a pice of code that put the Vortech MP10 into Nutrient Transport Mode for 15 minutes after feeding mode. Once the 15 minutes were up it should revert back to the default mode (Reef Crest) as set in the memory settings. However, after feeding mode ends it reverts back to the memory settings and bypasses the NTM.
Attached is my code to date. Any suggestions would be helpful.
Code: Select all
// Autogenerated file by RAGen (v1.2.1.158), (03/08/2012 22:54)
// RA_030812_2254.ino
//
// This version designed for v0.9.0 or later
//
// Sketch borrowed from TanksNStuff
/*
The following features are enabled for this File:
#define DisplayImages
#define OverheatSetup
#define DateTimeSetup
#define VersionMenu
#define DirectTempSensor
#define DisplayLEDPWM
#define wifi
#define SaveRelayState
#define WDT
#define PWMEXPANSION
#define CUSTOM_MAIN
#define COLORS_PDE
#define SALINITYEXPANSION
#define RFEXPANSION
#define FONT_8x8
#define FONT_8x16
Ports assignment:
Port1 - Return Pump
Port2 - Circulation Pumps
Port3 - Heater
Port4 - Skimmer
Port5 - Tunze ATO
Port6 - PWM Expansion Power Supply
Port7 - Fuge Light
Port8 - Fuge Moonlight
*/
#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 <Salinity>
#include <Memory.h>
#include <RA_Colors.h>
#include <RA_CustomColors.h>
#include <RF.h>
#include <ReefAngel.h>
//*********************************************************************************************************************************
//--------------------------------------------------- Start of Global Variables ---------------------------------------------------
// Globals Needed for Params on Custom Main
byte x,y;
char text[10];
int v;
// Globals Needed for RF Mode on Custom Main
byte vtechmode;
byte vtechspeed;
byte vtechpercent;
boolean bFeeding=false;
//------------------------------------------------------ End of Global Variables --------------------------------------------------
//*********************************************************************************************************************************
//---------------------------------------------Custom Main for PWM Expansion Module------------------------------------------------
void DrawCustomMain()
{
//Top Banner
ReefAngel.LCD.DrawLargeText(COLOR_BLACK, 255, 9, 2, "WISEGUYS' REEF");
ReefAngel.LCD.Clear(DefaultFGColor,3,11,126,11);
//Clear Screen for Refresh
//ReefAngel.LCD.Clear(255,1,12,128,128);
// Display T1 Header Text
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,10,15,"Tank");
char text[7];
// Display the T1 Temp Value
ReefAngel.LCD.Clear(255,4,26,125,41);
ConvertNumToString(text, ReefAngel.Params.Temp[T1_PROBE], 10);
ReefAngel.LCD.DrawLargeText(COLOR_CORNFLOWERBLUE, 255, 4, 26, text, Font8x16);
pingSerial();
// Display the Salinity Header Text
ReefAngel.LCD.DrawText(COLOR_CRIMSON,255,55,15,"Sal.");
// Display the Salinity Value
// ConvertNumToString(text, ReefAngel.Params.Salinity, 100);
// ReefAngel.LCD.DrawLargeText(COLOR_CRIMSON, 255, 57, 26, text, Num8x16);
ReefAngel.LCD.DrawLargeText(COLOR_CRIMSON, 255, 57, 26, "35", Font8x16); // Temporary Placeholder
pingSerial();
// Display pH Header Text
ReefAngel.LCD.DrawText(COLOR_INDIGO,255,105,15,"pH");
// Display pH Value
ConvertNumToString(text, ReefAngel.Params.PH, 100);
ReefAngel.LCD.DrawLargeText(COLOR_INDIGO, 255, 94, 26, text, Font8x16);
pingSerial();
//Display Alternate Temp Parameters
ReefAngel.LCD.DrawText(0,255,8,45,"Sump");
ReefAngel.LCD.Clear(255,36,45,57,52);
ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T2_PROBE], COLOR_CORNFLOWERBLUE, 36, 45, 10);
ReefAngel.LCD.DrawText(0,255,72,45,"Hood");
ReefAngel.LCD.Clear(255,100,45,119,52);
ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T3_PROBE], COLOR_CORNFLOWERBLUE, 100, 45, 10);
// Display Vortech MP10wES Mode Header Text
ReefAngel.LCD.Clear(DefaultFGColor,3,56,126,56);
ReefAngel.LCD.DrawText(0,255,18,60,"Vortech EcoSmart");
pingSerial();
// Display EcoSmart Mode Value & Speed %
ReefAngel.LCD.Clear(255,1,71,128,78);
vtechspeed = InternalMemory.RFSpeed_read();
vtechpercent = vtechspeed * 0.39215;
ConvertNumToString(text, vtechpercent, 1);
if (vtechmode == 0)
{
ReefAngel.LCD.DrawLargeText(COLOR_LIMEGREEN,255,16,71,"Constant-");
ReefAngel.LCD.DrawLargeText(COLOR_LIMEGREEN,255,89,71,text);
ReefAngel.LCD.DrawLargeText(COLOR_LIMEGREEN,255,106,71,"%");
}
else if(vtechmode == 1)
{
ReefAngel.LCD.DrawLargeText(COLOR_GOLD,255,20,71,"Lagoon-");
ReefAngel.LCD.DrawLargeText(COLOR_GOLD,255,85,71,text);
ReefAngel.LCD.DrawLargeText(COLOR_GOLD,255,102,71,"%");
}
else if (vtechmode == 2)
{
ReefAngel.LCD.DrawLargeText(COLOR_GOLD,255,8,71,"Reef Crest-");
ReefAngel.LCD.DrawLargeText(COLOR_GOLD,255,97,71,text);
ReefAngel.LCD.DrawLargeText(COLOR_GOLD,255,114,71,"%");
}
else if (vtechmode == 3)
{
ReefAngel.LCD.DrawLargeText(COLOR_CORNFLOWERBLUE,255,4,71,"Short Pulse-");
ReefAngel.LCD.DrawLargeText(COLOR_CORNFLOWERBLUE,255,101,71,text);
ReefAngel.LCD.DrawLargeText(COLOR_CORNFLOWERBLUE,255,118,71,"%");
}
else if (vtechmode == 4)
{
ReefAngel.LCD.DrawLargeText(COLOR_PINK,255,8,71,"Long Pulse-");
ReefAngel.LCD.DrawLargeText(COLOR_PINK,255,97,71,text);
ReefAngel.LCD.DrawLargeText(COLOR_PINK,255,114,71,"%");
}
else if (vtechmode == 5)
{
ReefAngel.LCD.DrawLargeText(COLOR_MAGENTA,255,4,71,"Nutrient TM-");
ReefAngel.LCD.DrawLargeText(COLOR_MAGENTA,255,101,71,text);
ReefAngel.LCD.DrawLargeText(COLOR_MAGENTA,255,118,71,"%");
}
else if (vtechmode == 6)
{
ReefAngel.LCD.DrawLargeText(COLOR_MAGENTA,255,4,71,"Tidal Swell-");
ReefAngel.LCD.DrawLargeText(COLOR_MAGENTA,255,101,71,text);
ReefAngel.LCD.DrawLargeText(COLOR_MAGENTA,255,118,71,"%");
}
else if (vtechmode == 9)
{
ReefAngel.LCD.DrawLargeText(COLOR_WHITE,0,28,71,"Night-");
ReefAngel.LCD.DrawLargeText(COLOR_WHITE,0,77,71,text);
ReefAngel.LCD.DrawLargeText(COLOR_WHITE,0,94,71,"%");
}
// Display PMW Expansion Channel Headers and % Values
ReefAngel.LCD.Clear(DefaultFGColor,3,82,126,82);
ReefAngel.LCD.DrawText(0,255,27,85,"Daylight:");
ReefAngel.LCD.DrawSingleMonitor(ReefAngel.PWM.GetDaylightValue(), COLOR_CORNFLOWERBLUE, 81, 85, 1);
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,100,85,"%");
ReefAngel.LCD.DrawText(0,255,27,94,"Actinic:");
ReefAngel.LCD.DrawSingleMonitor(ReefAngel.PWM.GetActinicValue(), COLOR_CORNFLOWERBLUE, 81, 94, 1);
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,100,94,"%");
pingSerial();
// Display Main Relay Box
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
ReefAngel.LCD.DrawOutletBox(13, 104, TempRelay);
pingSerial();
//Draw Date & Time
ReefAngel.LCD.Clear(DefaultFGColor,3,118,126,118);
ReefAngel.LCD.DrawDate(6, 120);
pingSerial();
}
void DrawCustomGraph() // Not Used
{
}
//------------------------------------------------------ End Custom Main ----------------------------------------------------------
//*********************************************************************************************************************************
//-------------------------------------------------------- Begin Setup ------------------------------------------------------------
void setup()
{
ReefAngel.Init(); //Initialize controller
ReefAngel.FeedingModePorts = Port2Bit | Port4Bit; // Turn off Port2 and Port4 when feeding mode is activated
ReefAngel.WaterChangePorts = Port2Bit | Port4Bit | Port5Bit; // Turn off Port2, Port4 and Port5 when water change mode is actived
ReefAngel.OverheatShutoffPorts = Port3Bit | Port7Bit;
ReefAngel.LightsOnPorts = Port7Bit;
// Ports that are always on
ReefAngel.Relay.On(Port1);
ReefAngel.Relay.On(Port2);
ReefAngel.Relay.On(Port3);
ReefAngel.Relay.On(Port6);
// RF Module Start
ReefAngel.RF.SetMode(Slave_Start,0,0);
ReefAngel.RF.UseMemory=true;
}
//---------------------------------------------------------- End Setup ------------------------------------------------------------
//*********************************************************************************************************************************
//--------------------------------------------------------- Begin Loop ------------------------------------------------------------
void loop()
{
// Specific functions
ReefAngel.Refresh(); //WDT check
ReefAngel.Relay.DelayedOn(Port4, 1); // Turn on Port 4 (Skimmer) with 1 minute delay
ReefAngel.Relay.DelayedOn(Port5, 2); // Turn on Port 5 (Tunze ATO) with 2 minute delay
ReefAngel.StandardLights(Port8); //Fuge Moonlight on when main lights are on
ReefAngel.StandardLights(Port7,20,30,8,30); //Fuge Light on at night
ReefAngel.StandardHeater(Port3); // Standard Heater Using Internal Memory
ReefAngel.Portal("mvwise");
// LED FunctionsPWMSlope based on Internal Memory values for Standard Lights
ReefAngel.PWM.ActinicPWMSlope(15); //Set Blue LED to Internal Memory Values with 15 minute offset from Daylight
ReefAngel.PWM.DaylightPWMSlope(); //Set White LED to Internal Memory Values
if (ReefAngel.Relay.Status(Port8))
ReefAngel.PWM.SetChannel(0,MoonPhase()); // Set Moonlights to MoonPhase during night hours
else
ReefAngel.PWM.SetChannel(0,0);
// Fan Speed Functions
byte HoodFanSpeed;
HoodFanSpeed=map(ReefAngel.Params.Temp[3],780,790,30,100); // Calculate Hood Fan speed
HoodFanSpeed=constrain(HoodFanSpeed,0,100);
ReefAngel.PWM.SetChannel(2,HoodFanSpeed);
byte BlowerFanSpeed;
BlowerFanSpeed=map(ReefAngel.Params.Temp[1],780,790,30,100); // Calculate Blower Fan speed
BlowerFanSpeed=constrain(BlowerFanSpeed,0,100);
ReefAngel.PWM.SetChannel(3,BlowerFanSpeed);
/*
------------------------------------------------ Start Time-of-Day Based Functions ----------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ These are the mode numbers for the RF Expansion Module for reference ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#define Constant 0
#define Random1 1 // Lagoonal
#define Random2 2 // Reef Crest
#define ShortWave 3
#define LongWave 4
#define Smart_NTM 5 // Nutrient Transport Mode
#define Smart_TSM 6 // Tidal Swell Mode
#define Feeding_Start 7
#define Feeding_Stop 8
#define Night 9
#define Slave_Start 97
#define Slave_Stop 98
#define None 99
RF Mode
http://YOURIPADDRESS:2000/mb855,X
RF Speed
http://YOURIPADDRESS:2000/mb856,X
RF Duration
http://YOURIPADDRESS:2000/mb857,X
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
//-------------------------------------------------------- Start RF Smart Nutrient Mode After Feeding ---------------------------
if (hour() >=8 && hour() <= 21)
{
if (ReefAngel.DisplayedMenu==FEEDING_MODE) bFeeding=true;
if (ReefAngel.DisplayedMenu==DEFAULT_MENU && bFeeding)
{
bFeeding=false;
ReefAngel.Timer[4].SetInterval(900); // Timer for 15min
ReefAngel.Timer[4].Start();
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(Smart_NTM,170,6);
vtechmode = 5;
}
if (ReefAngel.DisplayedMenu==DEFAULT_MENU && ReefAngel.Timer[4].IsTriggered())
{
ReefAngel.RF.UseMemory=true;
vtechmode = InternalMemory.RFMode_read();
}
}
//---------------------------------------------------------- End RF Smart Nutrient Mode After Feeding -----------------------------
//-------------------------------------------------------- Start RF Nightmode Control ---------------------------------------------
if (hour()>20 || hour()<8) // Defining "Nightmode" hours for VorTech = between 9 PM and 8 AM
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(Night,15,0);
vtechmode = 9;
}
else
{
ReefAngel.RF.UseMemory=true;
vtechmode = InternalMemory.RFMode_read();
}
//---------------------------------------------------------- End RF Nightmode Control ---------------------------------------------
ReefAngel.ShowInterface();
}
//--------------------------------------------------------------- End Loop --------------------------------------------------------
//*********************************************************************************************************************************