I have set up a custom menu to include two menu items that increment the RF Mode and Speed on the Vortech pumps each time they are selected. The Mode increases by 1 and cycles around to the beginning and actually sets the internal memory so that it will revert back to this mode after my feeding mode code is enabled. I would like to have the speed setting increase by 10% each time it is selected, but can't quite seem to figure out the logic in the code. Same idea as the mode menu item, just increase speed by factors of 10 each time. Is the value stored in the memory location an actual percentage or is it based on 0-255?
Before anyone asks - yes I could change this with the iphone app or through the portal if only he had the wifi module, but he doesn't. So this is a temporary workaround until he can afford to purchase the wife module and the expansion hub...
The final issue we were having was in the Custom Main. I have chosen to display the 8x16 font for the temperature and PH values, but it is not being detected during the compile. I have used the exact same code from my own PDE and it is automatically detached, but I can't seem to get it to work on this file.
Here is our current PDE:
Code: Select all
//
// This version updated for v1.0.3 or later
/*
Ports assignment:
Port1 - Return Pump
Port2 - Skimmer
Port3 - Heater 1 & 2
Port4 - Avast ATO
Port5 - Tank Lights (White)
Port6 - Tank Lights (Blue)
Port7 - Moonlights
Port8 - Fuge Light
*/
#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 <ReefAngel.h>
//*********************************************************************************************************************************
//--------------------------------------------------- Start of Global Variables ---------------------------------------------------
// Globals Needed for RF Mode on Custom Menu
byte vtmode=InternalMemory.RFMode_read();
byte vtspeed=InternalMemory.RFSpeed_read();
// 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;
boolean bFeeding=false;
//------------------------------------------------------ End of Global Variables --------------------------------------------------
//*********************************************************************************************************************************
//----------------------------------------------------------- Custom Menu ---------------------------------------------------------
#include <avr/pgmspace.h>
prog_char menu0_label[] PROGMEM = "Feeding";
prog_char menu1_label[] PROGMEM = "Water Change";
prog_char menu2_label[] PROGMEM = "Vortech Mode";
prog_char menu3_label[] PROGMEM = "Vortech Speed";
prog_char menu4_label[] PROGMEM = "Lights On";
prog_char menu5_label[] PROGMEM = "PH Calibration";
prog_char menu6_label[] PROGMEM = "Overheat Clear";
prog_char menu7_label[] PROGMEM = "Date / Time";
prog_char menu8_label[] PROGMEM = "Version";
PROGMEM const char *menu_items[] = {
menu0_label, menu1_label, menu2_label,
menu3_label, menu4_label, menu5_label,
menu6_label, menu7_label, menu8_label
};
void MenuEntry1()
{
ReefAngel.FeedingModeStart();
}
void MenuEntry2()
{
ReefAngel.WaterChangeModeStart();
}
void MenuEntry3()
{
vtmode++;
if (vtmode>6) vtmode=1;
InternalMemory.RFMode_write(vtmode); // Set the Internal Memory Setting for RF Mode
ReefAngel.RF.SetMode(InternalMemory.RFMode_read(), InternalMemory.RFSpeed_read(), InternalMemory.RFDuration_read());
ReefAngel.DisplayedMenu = RETURN_MAIN_MODE;
}
void MenuEntry4()
{
vtspeed++;
if (vtspeed>100) vtmode=10;
InternalMemory.RFSpeed_write(vtspeed); // Set the Internal Memory Setting for RF Speed
ReefAngel.RF.SetMode(InternalMemory.RFMode_read(), InternalMemory.RFSpeed_read(), InternalMemory.RFDuration_read());
ReefAngel.DisplayedMenu = RETURN_MAIN_MODE;
}
void MenuEntry5()
{
ReefAngel.Relay.RelayMaskOn = ReefAngel.LightsOnPorts;
ReefAngel.Relay.Write();
}
void MenuEntry6()
{
ReefAngel.OverheatClear();
ReefAngel.DisplayMenuEntry("Clear Overheat");
}
void MenuEntry7()
{
ReefAngel.SetupCalibratePH();
ReefAngel.DisplayedMenu = ALT_SCREEN_MODE;
}
void MenuEntry8()
{
ReefAngel.SetupDateTime();
ReefAngel.DisplayedMenu = ALT_SCREEN_MODE;
}
void MenuEntry9()
{
ReefAngel.DisplayVersion();
}
//--------------------------------------------------------- End Custom Menu -------------------------------------------------------
//*********************************************************************************************************************************
//----------------------------------------------------------- Custom Main ---------------------------------------------------------
void DrawCustomMain()
{
//Top Banner
ReefAngel.LCD.DrawLargeText(COLOR_BLACK, 255, 25, 2, "JAW'S REEF");
ReefAngel.LCD.Clear(DefaultFGColor,3,11,126,11);
// Display T1 Header Text
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,10,13,"Tank");
char text[7];
// Display the T1 Temp Value
ReefAngel.LCD.Clear(255,4,22,125,37);
ConvertNumToString(text, ReefAngel.Params.Temp[T1_PROBE], 10);
ReefAngel.LCD.DrawLargeText(COLOR_CORNFLOWERBLUE, 255, 4, 22, text, Font8x16);
// Display T2 Header Text
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,55,13,"Sump");
// Display the T2 Temp Value
ConvertNumToString(text, ReefAngel.Params.Temp[T2_PROBE], 10);
ReefAngel.LCD.DrawLargeText(COLOR_CORNFLOWERBLUE, 255, 49, 22, text, Font8x16);
// Display pH Header Text
ReefAngel.LCD.DrawText(COLOR_INDIGO,255,105,13,"pH");
// Display pH Value
ConvertNumToString(text, ReefAngel.Params.PH, 100);
ReefAngel.LCD.DrawLargeText(COLOR_INDIGO, 255, 94, 22, text, Font8x16);
// Display EcoSmart Mode Value & Speed %
ReefAngel.LCD.Clear(DefaultFGColor,3,39,126,39);
ReefAngel.LCD.Clear(255,1,41,128,48);
vtechspeed = InternalMemory.RFSpeed_read();
ConvertNumToString(text, vtechspeed, 1);
if (vtechmode == 0)
{
ReefAngel.LCD.DrawLargeText(COLOR_LIMEGREEN,255,16,41,"Constant-");
ReefAngel.LCD.DrawLargeText(COLOR_LIMEGREEN,255,89,41,text);
ReefAngel.LCD.DrawLargeText(COLOR_LIMEGREEN,255,106,41,"%");
}
else if(vtechmode == 1)
{
ReefAngel.LCD.DrawLargeText(COLOR_GOLD,255,20,41,"Lagoon-");
ReefAngel.LCD.DrawLargeText(COLOR_GOLD,255,85,41,text);
ReefAngel.LCD.DrawLargeText(COLOR_GOLD,255,102,41,"%");
}
else if (vtechmode == 2)
{
ReefAngel.LCD.DrawLargeText(COLOR_GOLD,255,8,41,"Reef Crest-");
ReefAngel.LCD.DrawLargeText(COLOR_GOLD,255,97,41,text);
ReefAngel.LCD.DrawLargeText(COLOR_GOLD,255,114,41,"%");
}
else if (vtechmode == 3)
{
ReefAngel.LCD.DrawLargeText(COLOR_CORNFLOWERBLUE,255,4,41,"Short Pulse-");
ReefAngel.LCD.DrawLargeText(COLOR_CORNFLOWERBLUE,255,101,41,text);
ReefAngel.LCD.DrawLargeText(COLOR_CORNFLOWERBLUE,255,118,41,"%");
}
else if (vtechmode == 4)
{
ReefAngel.LCD.DrawLargeText(COLOR_PINK,255,8,41,"Long Pulse-");
ReefAngel.LCD.DrawLargeText(COLOR_PINK,255,97,41,text);
ReefAngel.LCD.DrawLargeText(COLOR_PINK,255,114,41,"%");
}
else if (vtechmode == 5)
{
ReefAngel.LCD.DrawLargeText(COLOR_MAGENTA,255,4,41,"Nutrient TM-");
ReefAngel.LCD.DrawLargeText(COLOR_MAGENTA,255,101,41,text);
ReefAngel.LCD.DrawLargeText(COLOR_MAGENTA,255,118,41,"%");
}
else if (vtechmode == 6)
{
ReefAngel.LCD.DrawLargeText(COLOR_MAGENTA,255,4,41,"Tidal Swell-");
ReefAngel.LCD.DrawLargeText(COLOR_MAGENTA,255,101,41,text);
ReefAngel.LCD.DrawLargeText(COLOR_MAGENTA,255,118,41,"%");
}
else if (vtechmode == 9)
{
ReefAngel.LCD.DrawLargeText(COLOR_WHITE,0,28,41,"Night-");
ReefAngel.LCD.DrawLargeText(COLOR_WHITE,0,77,41,text);
ReefAngel.LCD.DrawLargeText(COLOR_WHITE,0,94,41,"%");
}
// Draw Graph
//ReefAngel.LCD.DrawGraph(4,53);
// Display Main Relay Box
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
ReefAngel.LCD.DrawOutletBox(13, 105, TempRelay);
//Draw Date & Time
ReefAngel.LCD.Clear(DefaultFGColor,3,118,126,118);
ReefAngel.LCD.DrawDate(6, 120);
}
void DrawCustomGraph() // Not Used
{
}
//------------------------------------------------------ End Custom Main ----------------------------------------------------------
//*********************************************************************************************************************************
//-------------------------------------------------------- Begin Setup ------------------------------------------------------------
void setup()
{
ReefAngel.Init(); //Initialize controller
ReefAngel.FeedingModePorts = Port1Bit | Port2Bit | Port4Bit; // Turn off Return pump, Skimmer & ATO when feeding mode is activated
ReefAngel.WaterChangePorts = Port2Bit | Port4Bit; // Turn off Skimmer & ATO when water change mode is actived
ReefAngel.OverheatShutoffPorts = Port3Bit | Port5Bit | Port6Bit | Port7Bit | Port8Bit;
ReefAngel.LightsOnPorts = Port5Bit | Port6Bit | Port8Bit;
ReefAngel.TempProbe = T1_PROBE; // Use T1 probe as temperature and overheat functions
ReefAngel.OverheatProbe = T1_PROBE;
InternalMemory.OverheatTemp_write( 850 ); // Set the Overheat temperature setting
// Ports that are always on
ReefAngel.Relay.On(Port1);
vtechmode = InternalMemory.RFMode_read();
}
//---------------------------------------------------------- End Setup ------------------------------------------------------------
//*********************************************************************************************************************************
//--------------------------------------------------------- Begin Loop ------------------------------------------------------------
void loop()
{
// Specific functions
ReefAngel.Relay.DelayedOn(Port2, 1); // Turn on Port 4 (Skimmer) with 1 minute delay
ReefAngel.Relay.DelayedOn(Port4, 2); // Turn on Port 5 (Avast ATO) with 2 minute delay
ReefAngel.StandardLights( Port5,10,0,20,0 ); // White and Blue LED's on During Standard Hours
ReefAngel.StandardLights( Port6,9,0,21,0 ); // White and Blue LED's on During Standard Hours
ReefAngel.StandardLights( Port7,21,0,9,0 ); //Fuge Light and Moonlights on at night
ReefAngel.StandardLights( Port8,21,0,9,0 ); //Fuge Light and Moonlights on at night
ReefAngel.StandardHeater(Port3,765,785); // Standard Heater Using Internal Memory
/*
------------------------------------------------ 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.ShowInterface();
}
//--------------------------------------------------------------- End Loop --------------------------------------------------------
//*********************************************************************************************************************************
Any help would be appreciated!