My almost completed pde
- JNieuwenhuizen
- Posts: 96
- Joined: Thu Feb 16, 2012 12:39 am
- Location: South Africa
Re: My almost completed pde
So using the new Reef Angel Wizard, I now get the moonlights on, but they stay on as the Wizard generates a bit of code like this
If I try adding times toit like the Parabola code, or PWMslop code, it gives me errors.
Code: Select all
ReefAngel.PWM.SetChannel( 5, MoonPhase() );
Re: My almost completed pde
Code: Select all
if (hour()>=22 || hour()<6)
ReefAngel.PWM.SetChannel( 5, MoonPhase() );
else
ReefAngel.PWM.SetChannel( 5, 0);
Roberto.
- JNieuwenhuizen
- Posts: 96
- Joined: Thu Feb 16, 2012 12:39 am
- Location: South Africa
Re: My almost completed pde
Its working now
Thank You
Thank You
Re: My almost completed pde
Can you post the code working please? also can you post any pics of the controller?JNieuwenhuizen wrote:Its working now
Thank You
thank you
- JNieuwenhuizen
- Posts: 96
- Joined: Thu Feb 16, 2012 12:39 am
- Location: South Africa
Re: My almost completed pde
Hi pilonstar
This code is no more.
Since the PWM module code has been moved to it, my head unit code is as simple as a wizrad generated file, its only the custom main screens, and that is still a work in progress.
As soon as everything works, I'll paste the code for you
This code is no more.
Since the PWM module code has been moved to it, my head unit code is as simple as a wizrad generated file, its only the custom main screens, and that is still a work in progress.
As soon as everything works, I'll paste the code for you
- JNieuwenhuizen
- Posts: 96
- Joined: Thu Feb 16, 2012 12:39 am
- Location: South Africa
Re: My almost completed pde
I have re-done my code in the next Memory and versions upgrades..
I got rid off all the extra screens, and the unwanted stuffs, as I did not use them.
Now, my menus dont work.. what did I do wrong?
My new code
I got rid off all the extra screens, and the unwanted stuffs, as I did not use them.
Now, my menus dont work.. what did I do wrong?
My new code
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 <ReefAngel.h>
////// Place global variable code below here
//--------------------------------------------------------------------- Start of Global Variables ---------------------------------------------------------------------------
bool fOverrideRF = false;
byte vtechmode = 0;
boolean bFeeding=false;
byte x,y;
byte TempRelay =15;
byte TempRelay2=15;
//***************************************************************************************************************************************************************************
//------------------------------------------------------------------------------- Custom Main -------------------------------------------------------------------------------
void DrawCircleOutline(byte x, byte y, byte radius, byte bordercolor);
void FillCircle(byte x, byte y, byte radius, byte fillcolor);
void DrawCircleOutletBox(byte x, byte y, byte RelayData, bool reverse = false);
//***************************************************************************************************************************************************************************
//----------------------------------------------------------------------- Custom Menu Code ----------------------------------------------------------------------------------
#include <avr/pgmspace.h>
prog_char menu0_label[] PROGMEM = "Food";
prog_char menu1_label[] PROGMEM = "Cleanup";
prog_char menu2_label[] PROGMEM = "ATU Clear";
prog_char menu3_label[] PROGMEM = "pH";
prog_char menu4_label[] PROGMEM = "Salinity";
prog_char menu5_label[] PROGMEM = "Sump On";
prog_char menu6_label[] PROGMEM = "Sump Off";
prog_char menu7_label[] PROGMEM = "Item 8";
prog_char menu8_label[] PROGMEM = "Date/Time";
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.DisplayMenuEntry("Item 1");
ReefAngel.FeedingModeStart();
}
void MenuEntry2()
{
ReefAngel.DisplayMenuEntry("Item 2");
ReefAngel.WaterChangeModeStart();
}
void MenuEntry3()
{
ReefAngel.DisplayMenuEntry("Item 3");
ReefAngel.ATOClear();
}
void MenuEntry4()
{
ReefAngel.DisplayMenuEntry("Item 4");
ReefAngel.SetupCalibratePH();
ReefAngel.DisplayedMenu = ALT_SCREEN_MODE;
}
void MenuEntry5()
{
ReefAngel.DisplayMenuEntry("Item 5");
ReefAngel.SetupCalibrateSalinity();
ReefAngel.DisplayedMenu = ALT_SCREEN_MODE;
}
void MenuEntry6()
{
ReefAngel.DisplayMenuEntry("Item 6");
ReefAngel.Relay.RelayMaskOn = ReefAngel.LightsOnPorts;
#ifdef RelayExp
for ( byte i = 0; i < MAX_RELAY_EXPANSION_MODULES; i++ )
{
ReefAngel.Relay.RelayMaskOnE[i] = ReefAngel.LightsOnPortsE[i];
}
#endif // RelayExp
ReefAngel.Relay.Write();
}
void MenuEntry7()
{
ReefAngel.DisplayMenuEntry("Item 7");
ReefAngel.Relay.RelayMaskOn = 0;
#ifdef RelayExp
for ( byte i = 0; i < MAX_RELAY_EXPANSION_MODULES; i++ )
{
ReefAngel.Relay.RelayMaskOnE[i] = 0;
}
#endif // RelayExp
ReefAngel.Relay.Write();
}
void MenuEntry8()
{
ReefAngel.DisplayMenuEntry("Item 8");
if (!fOverrideRF && vtechmode == 9)
{
vtechmode=0;
ReefAngel.RF.SetMode(Feeding_Stop,0,0); //Temp fix for coming out of Night mode
}
else
{
vtechmode++;
}
fOverrideRF = true;
if ( vtechmode == 7 ) vtechmode = 9;
if ( vtechmode > 9 ) {
vtechmode = 0;
fOverrideRF = false;
}
// 1st parameter is Mode, 2nd is speed, 3rd is duration
ReefAngel.DisplayedMenu = RETURN_MAIN_MODE;
}
void MenuEntry9()
{
ReefAngel.DisplayMenuEntry("Item 9");
ReefAngel.SetupDateTime();
ReefAngel.DisplayedMenu = ALT_SCREEN_MODE;
}
void DrawCustomMain()
{
int x,y;
//Top Banner
ReefAngel.LCD.DrawLargeText(COLOR_WHITE, COLOR_CORNFLOWERBLUE, 0, 1, " Drop Reef Tank ", Font8x8); //Top Banner
// Display T1 Header Text
ReefAngel.LCD.DrawLargeText(COLOR_STEELBLUE,255,5,15,"Sump Temp", Font8x8);
// Display the T1 Temp Value
char text[7];
ConvertNumToString(text, ReefAngel.Params.Temp[T1_PROBE], 10);
ReefAngel.LCD.Clear(255, 10, 25, 50, 60);
if (ReefAngel.Params.Temp[T1_PROBE]>290) ReefAngel.LCD.DrawHugeNumbers(COLOR_RED, 255, 10, 25, text);
else if (ReefAngel.Params.Temp[T1_PROBE]>270) ReefAngel.LCD.DrawHugeNumbers(COLOR_ORANGE, 255, 10, 25, text);
else ReefAngel.LCD.DrawHugeNumbers(COLOR_MIDNIGHTBLUE, 255, 10, 25, text);
// Display the T2 Header Text
ReefAngel.LCD.DrawLargeText(0,255,5,45,"Room Temp", Font8x8);
// Display the T2 Temp Value
ReefAngel.LCD.Clear(255, 90, 50, 132, 60);
ConvertNumToString(text, ReefAngel.Params.Temp[T2_PROBE], 10);
ReefAngel.LCD.DrawLargeText(COLOR_MIDNIGHTBLUE, 255, 90, 45, text, Num8x8);
// Display pH Header Text
ReefAngel.LCD.DrawLargeText(COLOR_LIMEGREEN,255,95,15,"pH", Font8x8);
// Display pH Value
ConvertNumToString(text, ReefAngel.Params.PH, 100);
ReefAngel.LCD.Clear(0, 65, 62 , 65, 62);
if (ReefAngel.Params.PH>840 || ReefAngel.Params.PH<790) ReefAngel.LCD.DrawLargeText(COLOR_RED, 255, 85, 25, text, Num8x8);
else if (ReefAngel.Params.PH>830 || ReefAngel.Params.PH<800) ReefAngel.LCD.DrawLargeText(COLOR_ORANGE, 255, 85, 25, text, Num8x8);
else ReefAngel.LCD.DrawLargeText(COLOR_MIDNIGHTBLUE, 255, 85, 25, text, Num8x8);
//****************************************************************************************************************************************************************************
//------------------------------------------------------------------ Display Vortech Mode ------------------------------------------------------------------------------------
ReefAngel.LCD.DrawLargeText(0,255,5,55,"Vortech", Font8x8);
//****************************************************************************************************************************************************************************
//---------------------------------------------------------------- Display EcoSmart Mode Value -------------------------------------------------------------------------------
ReefAngel.LCD.Clear(255, 66, 60, 132, 70);
if (vtechmode == 0) ReefAngel.LCD.DrawLargeText(COLOR_LIMEGREEN,255, 66, 55,"Constant");
else if(vtechmode == 1) ReefAngel.LCD.DrawLargeText(COLOR_GOLD,255, 66, 55,"Lagoon");
else if (vtechmode == 2) ReefAngel.LCD.DrawLargeText(COLOR_GOLD,255, 80, 55,"RCM");
else if (vtechmode == 3) ReefAngel.LCD.DrawLargeText(COLOR_CORNFLOWERBLUE,255, 80, 55,"Short");
else if (vtechmode == 4) ReefAngel.LCD.DrawLargeText(COLOR_PINK,255, 66, 55,"Long");
else if (vtechmode == 5) ReefAngel.LCD.DrawLargeText(COLOR_MAGENTA,255, 80, 55,"NTM");
else if (vtechmode == 6) ReefAngel.LCD.DrawLargeText(COLOR_MAGENTA,255, 80, 55,"TSM");
else if (vtechmode == 9) ReefAngel.LCD.DrawLargeText(COLOR_GRAY,255, 80, 55,"Night");
//****************************************************************************************************************************************************************************
//------------------------------------------------------------------- Display Salinity ---------------------------------------------------------------------------------------
ReefAngel.LCD.DrawLargeText(0,255,64,114,"Salinity", Font8x8);
//****************************************************************************************************************************************************************************
//----------------------------------------------------------------- Display Salinity Value -----------------------------------------------------------------------------------
ReefAngel.LCD.Clear(255, 82, 85, 65, 95);
ConvertNumToString(text, ReefAngel.Params.Salinity, 10);
ReefAngel.LCD.DrawLargeText(COLOR_LIMEGREEN, 255, 85, 122, text, Num8x8);
//*****************************************************************************************************************************************************************************
//-----------------------------------------------------------Start Moon Phase,Cloud or Storm Display---------------------------------------------------------------------------
/* if (ReefAngel.PWM.Channel[5] > 0);
{
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,70,105,MoonPhaseLabel());
}
if (ReefAngel.PWM.ExpansionChannel[0] > 0 && (hour() < 14 ) )
{
ReefAngel.LCD.DrawLargeText(COLOR_ORANGERED,255,3,65, "Sunrise",Font8x8);
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,3,75, ReefAngel.PWM.ExpansionChannel[0]);
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,20,74, ":");
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,24,75, ReefAngel.PWM.ExpansionChannel[1]);
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,41,74, ":");
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,45,75, ReefAngel.PWM.ExpansionChannel[2]);
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,66,75, "|");
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,70,75, ReefAngel.PWM.ExpansionChannel[3]);
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,87,74, ":");
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,91,75, ReefAngel.PWM.ExpansionChannel[4]);
}
else if (ReefAngel.PWM.ExpansionChannel[0] > 0 && (hour() > 14 ))
{
ReefAngel.LCD.DrawLargeText(COLOR_ORANGERED,255,3,65, "Sunrise",Font8x8);
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,3,75, ReefAngel.PWM.ExpansionChannel[0]);
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,20,74, ":");
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,24,75, ReefAngel.PWM.ExpansionChannel[1]);
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,41,74, ":");
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,45,75, ReefAngel.PWM.ExpansionChannel[2]);
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,66,75, "|");
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,70,75, ReefAngel.PWM.ExpansionChannel[3]);
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,87,74, ":");
ReefAngel.LCD.DrawText(COLOR_CORNFLOWERBLUE,255,91,75, ReefAngel.PWM.ExpansionChannel[4]);
}
*/
//*****************************************************************************************************************************************************************************
//---------------------------------------------------------- Display Main and Expansion Relay Box -----------------------------------------------------------------------------
TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
ReefAngel.LCD.DrawCircleOutletBox(10,90, TempRelay);
pingSerial();
TempRelay2 = ReefAngel.Relay.RelayDataE[0];
TempRelay2 &= ReefAngel.Relay.RelayMaskOffE[0];
TempRelay2 |= ReefAngel.Relay.RelayMaskOnE[0];
ReefAngel.LCD.DrawCircleOutletBox(40,90, TempRelay2);
pingSerial();
//***************************************************************************************************************************************************************************
}
void DrawCustomGraph()
{}
//***************************************************************************************************************************************************************************
void setup()
{
// This must be the first line
ReefAngel.Init(); //Initialize controller
ReefAngel.SetTemperatureUnit( Celsius ); // set to Celsius Temperature
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = 0;
ReefAngel.FeedingModePortsE[0] = 0;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port2Bit | Port3Bit | Port4Bit | Port5Bit | Port6Bit;
ReefAngel.WaterChangePortsE[0] = Port1Bit | Port2Bit | Port3Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = 0;
ReefAngel.LightsOnPortsE[0] = Port4Bit;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port5Bit | Port6Bit;
ReefAngel.OverheatShutoffPortsE[0] = 0;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Ports that are always on
ReefAngel.Relay.On( Port1 );
ReefAngel.Relay.On( Port4 );
ReefAngel.Relay.On( Port7 );
ReefAngel.Relay.On( Port8 );
ReefAngel.Relay.On( Box1_Port1 );
ReefAngel.Relay.On( Box1_Port2 );
ReefAngel.Relay.On( Box1_Port3 );
ReefAngel.Relay.On( Box1_Port7 );
ReefAngel.Relay.On( Box1_Port8 );
}
void loop()
{
ReefAngel.Relay.DelayedOn( Port2 );
ReefAngel.StandardHeater( Port5 );
ReefAngel.StandardHeater( Port6 );
ReefAngel.StandardATO( Box1_Port5 );
ReefAngel.MoonLights( Box1_Port4 );
//***************************************************************************************************************************************************************************
//------------------------------------------------------------------ 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
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//----------------------------------------------------------------- Start RF Daytime Control ------------------------------------------------------------------------------
if (!fOverrideRF)
{
if (hour() >8 && hour() < 14)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(Smart_NTM,80,7);
vtechmode = Smart_NTM;
}
else if (hour() >14 && hour() < 22)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(Random2,60,7);
vtechmode = Random2;
}
//--------------------------------------------------------------- Start RF Nightmode Control -----------------------------------------------------------------------------
else if (hour()>=22 || hour()<8) // Defining "Nightmode" hours for VorTech = between 10 PM and 8 AM
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(Night,10,0);
vtechmode = Night;
}
else
{
ReefAngel.RF.SetMode(Feeding_Stop,0,0); //Temp fix for coming out of Night mode
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(Smart_NTM,80,7);
vtechmode = Smart_NTM;
ReefAngel.RF.SetMode(vtechmode, InternalMemory.RFSpeed_read(), InternalMemory.RFDuration_read());
}
}
else
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(vtechmode, InternalMemory.RFSpeed_read(), InternalMemory.RFDuration_read());
}
//***************************************************************************************************************************************************************************
// This should always be the last line
ReefAngel.Portal( "JNieuwenhuizen" );
ReefAngel.ShowInterface();
}
//***************************************************************************************************************************************************************************
Re: My almost completed pde
You are missing one line in the setup() section:
Code: Select all
ReefAngel.InitMenu(pgm_read_word(&(menu_items[0])),SIZE(menu_items));
Roberto.
- JNieuwenhuizen
- Posts: 96
- Joined: Thu Feb 16, 2012 12:39 am
- Location: South Africa
Re: My almost completed pde
Thanx Roberto!