My almost completed pde

Share you PDE file with our community
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: My almost completed pde

Post by rimai »

Let me check during the weekend.
Roberto.
User avatar
JNieuwenhuizen
Posts: 96
Joined: Thu Feb 16, 2012 12:39 am
Location: South Africa

Re: My almost completed pde

Post by JNieuwenhuizen »

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

Code: Select all

ReefAngel.PWM.SetChannel( 5, MoonPhase() );
If I try adding times toit like the Parabola code, or PWMslop code, it gives me errors.
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: My almost completed pde

Post by rimai »

Code: Select all

  if (hour()>=22 || hour()<6)
    ReefAngel.PWM.SetChannel( 5, MoonPhase() );
  else
    ReefAngel.PWM.SetChannel( 5, 0);
Roberto.
User avatar
JNieuwenhuizen
Posts: 96
Joined: Thu Feb 16, 2012 12:39 am
Location: South Africa

Re: My almost completed pde

Post by JNieuwenhuizen »

Its working now

Thank You
pilonstar
Posts: 64
Joined: Tue Mar 20, 2012 2:56 am

Re: My almost completed pde

Post by pilonstar »

JNieuwenhuizen wrote:Its working now

Thank You
Can you post the code working please? also can you post any pics of the controller?
thank you
Slow down to speed up
Image
Image
User avatar
JNieuwenhuizen
Posts: 96
Joined: Thu Feb 16, 2012 12:39 am
Location: South Africa

Re: My almost completed pde

Post by JNieuwenhuizen »

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
User avatar
JNieuwenhuizen
Posts: 96
Joined: Thu Feb 16, 2012 12:39 am
Location: South Africa

Re: My almost completed pde

Post by JNieuwenhuizen »

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

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();
}
//***************************************************************************************************************************************************************************


rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: My almost completed pde

Post by rimai »

You are missing one line in the setup() section:

Code: Select all

  ReefAngel.InitMenu(pgm_read_word(&(menu_items[0])),SIZE(menu_items));
Roberto.
User avatar
JNieuwenhuizen
Posts: 96
Joined: Thu Feb 16, 2012 12:39 am
Location: South Africa

Re: My almost completed pde

Post by JNieuwenhuizen »

Thanx Roberto!
Post Reply