See the posts above.
The rest is fixed:
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
/*
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.h>
#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);
// 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);
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,"%");
pingSerial();
}
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,"%");
pingSerial();
}
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,"%");
pingSerial();
}
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,"%");
pingSerial();
}
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,"%");
pingSerial();
}
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,"%");
pingSerial();
}
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,"%");
pingSerial();
}
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,"%");
pingSerial();
}
// Display PMW Expansion Channel Headers and % Values
ReefAngel.LCD.Clear(DefaultFGColor,3,82,126,82);
ReefAngel.LCD.DrawText(0,255,3,85,"D:");
ReefAngel.LCD.DrawSingleMonitor(ReefAngel.PWM.GetDaylightValue(), COLOR_CORNFLOWERBLUE, 13, 85, 1);
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,33,85,"%");
pingSerial();
ReefAngel.LCD.DrawText(0,255,48,85,"A:");
ReefAngel.LCD.DrawSingleMonitor(ReefAngel.PWM.GetActinicValue(), COLOR_CORNFLOWERBLUE, 58, 85, 1);
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,78,85,"%");
pingSerial();
ReefAngel.LCD.DrawText(0,255,92,85,"M:");
ReefAngel.LCD.DrawSingleMonitor(ReefAngel.PWM.GetChannelValue(0), COLOR_CORNFLOWERBLUE, 102, 85, 1);
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,122,85,"%");
pingSerial();
// Display Moon Phase during night and Sky Type During Day
if (ReefAngel.PWM.GetChannelValue(0) > 0) //If Moonlights are active
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,6,94," Clear Skies");
else
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,6,94," Clear Skies");
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);
vtechmode = InternalMemory.RFMode_read();
}
//---------------------------------------------------------- End Setup ------------------------------------------------------------
//*********************************************************************************************************************************
//--------------------------------------------------------- Begin Loop ------------------------------------------------------------
void loop()
{
// Specific functions
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
// LED FunctionsPWMSlope based on Internal Memory values for Standard Lights
ReefAngel.PWM.SetActinic(PWMSlope(8,30,21,30,25,80,120,0)); //Set Blue LED during daytime, off at night
ReefAngel.PWM.SetDaylight(PWMSlope(8,45,21,15,25,80,120,0)); //Set White LED during daytime, off at night
if ((hour() >=8 && minute() >=30) || (hour() <= 20 && minute() <30))
ReefAngel.PWM.SetChannel(0,0); // Turn off moonlights during daytime
else
ReefAngel.PWM.SetChannel(0,MoonPhase()); // Set Moonlights to MoonPhase during night hours
// Fan Speed Functions
signed int HoodFanSpeed;
HoodFanSpeed=map(ReefAngel.Params.Temp[3],750,900,25,100); // Calculate Hood Fan speed
HoodFanSpeed=constrain(HoodFanSpeed,0,100);
ReefAngel.PWM.SetChannel(1,HoodFanSpeed);
signed int BlowerFanSpeed;
BlowerFanSpeed=map(ReefAngel.Params.Temp[1],775,800,25,100); // Calculate Blower Fan speed
BlowerFanSpeed=constrain(BlowerFanSpeed,0,100);
ReefAngel.PWM.SetChannel(2,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 && minute() >=30) || (hour() <= 20 && minute() <30))
{
if (vtechmode == 9)
{
ReefAngel.RF.UseMemory=true;
vtechmode = InternalMemory.RFMode_read();
}
if (ReefAngel.DisplayedMenu==FEEDING_MODE) bFeeding=true;
if (ReefAngel.DisplayedMenu==DEFAULT_MENU && bFeeding)
{
bFeeding=false;
ReefAngel.Timer[1].SetInterval(600); // Timer for 10min
ReefAngel.Timer[1].Start();
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(Smart_NTM,200,6);
vtechmode = 5;
}
if (ReefAngel.DisplayedMenu==DEFAULT_MENU && ReefAngel.Timer[1].IsTriggered())
{
ReefAngel.RF.UseMemory=true;
vtechmode = InternalMemory.RFMode_read();
}
}
else
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(Night,15,0);
vtechmode = 9;
}
//---------------------------------------------------------- End RF Smart Nutrient Mode After Feeding -----------------------------
ReefAngel.Portal("mvwise");
ReefAngel.ShowInterface();
}
//--------------------------------------------------------------- End Loop --------------------------------------------------------
//*********************************************************************************************************************************