Howaboutme's Code

Share you PDE file with our community

Posts: 187
Joined: Tue Jan 28, 2014 11:10 am
Location: Northern VA
PostPosted: Sun Jun 08, 2014 4:44 am
For the record and so I can link to this on threads.

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 <PH.h>
        #include <WaterLevel.h>
        #include <Humidity.h>
        #include <DCPump.h>
        #include <ReefAngel.h>

        ////// Place global variable code below here


        ////// Place global variable code above here


        void setup()
        {
            // This must be the first line
            ReefAngel.Init();  //Initialize controller
            ReefAngel.Use2014Screen();  // Let's use 2014 Screen
            // Ports toggled in Feeding Mode
            ReefAngel.FeedingModePorts = Port1Bit | Port5Bit;
            // Ports toggled in Water Change Mode
            ReefAngel.WaterChangePorts = Port1Bit | Port2Bit | Port5Bit | Port6Bit | Port8Bit;
            // Ports toggled when Lights On / Off menu entry selected
            ReefAngel.LightsOnPorts = Port3Bit | Port4Bit;
            // Ports turned off when Overheat temperature exceeded
            ReefAngel.OverheatShutoffPorts = Port8Bit;
            // Use T1 probe as temperature and overheat functions
            ReefAngel.TempProbe = T1_PROBE;
            ReefAngel.OverheatProbe = T1_PROBE;

            // Feeeding and Water Change mode speed
            ReefAngel.DCPump.FeedingSpeed=0;
            ReefAngel.DCPump.WaterChangeSpeed=0;
           

            // Ports that are always on
            ReefAngel.Relay.On( Port2 );

            ////// Place additional initialization code below here
                   
        ReefAngel.CustomLabels[0]="ATO Pump";
        ReefAngel.CustomLabels[1]="Skimmer";
        ReefAngel.CustomLabels[2]="LEDWhite";
        ReefAngel.CustomLabels[3]="LEDBlue";
        ReefAngel.CustomLabels[4]="WP25";
        ReefAngel.CustomLabels[5]="DoserAlk";
        ReefAngel.CustomLabels[6]="Unused";
        ReefAngel.CustomLabels[7]="Heater"; 

            ////// Place additional initialization code above here
        }

        void loop()
        {
            ReefAngel.SingleATOLow( Port1 );
            ReefAngel.DayLights( Port3 );
            ReefAngel.ActinicLights( Port4 );
            ReefAngel.Relay.DelayedOn( Port5 );
            ReefAngel.DosingPumpRepeat1( Port6 );
            ReefAngel.StandardHeater( Port8 );
            ReefAngel.DCPump.UseMemory = true;
            ReefAngel.DCPump.DaylightChannel = None;
            ReefAngel.DCPump.ActinicChannel = Sync;
            ////// Place your custom code below here
            if (ReefAngel.DCPump.Mode==Custom)
              {
              if ( (now()%SECS_PER_DAY >= 77400) || (now()%SECS_PER_DAY<= 34200) )
              {
                ReefAngel.PWM.SetActinic(32); // Constant at 32% on sync mode
              }
              else if ( (now()%SECS_PER_DAY >= 34200) && (now()%SECS_PER_DAY<= 48600) )
              {
                ReefAngel.PWM.SetActinic(36); // Constant at 36% on sync mode
              }
              else if ( (now()%SECS_PER_DAY >= 48600) && (now()%SECS_PER_DAY<= 77400) )
              {
                ReefAngel.PWM.SetActinic( ElseMode(41,8,true));   // Else on sync mode, 41 +/- 8%
              }
            }
           
            ////DoserAlk Schedule
              if ((hour() > 10) && (hour() < 22)) { // Between 10am and 10pm we will disable Port 6
              ReefAngel.Relay.Off(Port6);
            }
            ////Water change delay for Port 1
          static time_t wcTimer;
          if (ReefAngel.DisplayedMenu == WATERCHANGE_MODE) wcTimer=now();
          if (now()-wcTimer > 0 && now()-wcTimer < 600) {
          ReefAngel.Relay.Off(Port1);
          }
          else {ReefAngel.SingleATOLow (Port1 );
          }

            ////// Place your custom code above here

            // This should always be the last line
            ReefAngel.Portal( "howaboutme" );
            ReefAngel.ShowInterface();
       }

        byte ElseMode( byte MidPoint, byte Offset, boolean WaveSync )
        {
          // Static's only initialize the first time they are called
          static unsigned long LastChange=millis();        // Set the inital time that the last change occurred
          static int Delay = random( 500, 3000);           // Set the initial delay
          static int NewSpeed = MidPoint;                  // Set the initial speed
          static int AntiSpeed = MidPoint;                 // Set the initial anti sync speed
          if ((millis()-LastChange) > Delay)               // Check if the delay has elapsed
          {
            Delay=random(500,5000);                        // If so, come up with a new delay
            int ChangeUp = random(Offset);                 // Amount to go up or down
            if (random(100)<50)                            // 50/50 chance of speed going up or going down
            {
              NewSpeed = MidPoint - ChangeUp;
              AntiSpeed = MidPoint + ChangeUp;
            }
            else
            {
              NewSpeed = MidPoint + ChangeUp;
              AntiSpeed = MidPoint - ChangeUp;
            }
            LastChange=millis();                           // Reset the time of the last change
          }
          if (WaveSync)
          {
            return NewSpeed;
          }
          else
          {
            return AntiSpeed;
          }
        }



Key Attributes
- Able to control pump settings via portal
- When in "custom mode": WP-25 is in else mode between 1:30pm and 9:30pm, constant mode at 32% between 9:30pm and 9:30am and 36% between 9:30am and 1:30pm.
- Doses Alk 12 times a day, once per hour between 10:00pm and 10:00am, controlled via portal
- Added ATO Low code to support my Avast ATO.
Last edited by howaboutme on Sat Nov 22, 2014 2:20 pm, edited 2 times in total.

Posts: 32
Joined: Thu Apr 03, 2014 11:37 pm
PostPosted: Thu Sep 11, 2014 5:00 am
howaboutme wrote:For the record and so I can link to this on threads.

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 <PH.h>
        #include <WaterLevel.h>
        #include <Humidity.h>
        #include <DCPump.h>
        #include <ReefAngel.h>

        ////// Place global variable code below here


        ////// Place global variable code above here


        void setup()
        {
            // This must be the first line
            ReefAngel.Init();  //Initialize controller
            ReefAngel.Use2014Screen();  // Let's use 2014 Screen
            // Ports toggled in Feeding Mode
            ReefAngel.FeedingModePorts = Port5Bit;
            // Ports toggled in Water Change Mode
            ReefAngel.WaterChangePorts = Port2Bit | Port5Bit | Port6Bit | Port8Bit;
            // Ports toggled when Lights On / Off menu entry selected
            ReefAngel.LightsOnPorts = Port3Bit | Port4Bit;
            // Ports turned off when Overheat temperature exceeded
            ReefAngel.OverheatShutoffPorts = Port8Bit;
            // Use T1 probe as temperature and overheat functions
            ReefAngel.TempProbe = T1_PROBE;
            ReefAngel.OverheatProbe = T1_PROBE;

            // Feeeding and Water Change mode speed
            ReefAngel.DCPump.FeedingSpeed=0;
            ReefAngel.DCPump.WaterChangeSpeed=0;
           

            // Ports that are always on
            ReefAngel.Relay.On( Port2 );

            ////// Place additional initialization code below here
                   
        ReefAngel.CustomLabels[0]="Unused";
        ReefAngel.CustomLabels[1]="Skimmer";
        ReefAngel.CustomLabels[2]="LEDWhite";
        ReefAngel.CustomLabels[3]="LEDBlue";
        ReefAngel.CustomLabels[4]="WP25";
        ReefAngel.CustomLabels[5]="DoserAlk";
        ReefAngel.CustomLabels[6]="Unused";
        ReefAngel.CustomLabels[7]="Heater"; 

            ////// Place additional initialization code above here
        }

        void loop()
        {
            ReefAngel.DayLights( Port3 );
            ReefAngel.ActinicLights( Port4 );
            ReefAngel.Relay.DelayedOn( Port5 );
            ReefAngel.DosingPumpRepeat1( Port6 );
            ReefAngel.StandardHeater( Port8 );
            ReefAngel.DCPump.UseMemory = true;
            ReefAngel.DCPump.DaylightChannel = None;
            ReefAngel.DCPump.ActinicChannel = Sync;
            ////// Place your custom code below here
            if (ReefAngel.DCPump.Mode==Custom)
              {
              if ( (now()%SECS_PER_DAY >= 77400) || (now()%SECS_PER_DAY<= 34200) )
              {
                ReefAngel.PWM.SetActinic(32); // Constant at 32% on sync mode
              }
              else if ( (now()%SECS_PER_DAY >= 34200) && (now()%SECS_PER_DAY<= 48600) )
              {
                ReefAngel.PWM.SetActinic(36); // Constant at 36% on sync mode
              }
              else if ( (now()%SECS_PER_DAY >= 48600) && (now()%SECS_PER_DAY<= 77400) )
              {
                ReefAngel.PWM.SetActinic( ElseMode(41,8,true));   // Else on sync mode, 41 +/- 8%
              }
            }
           
            ////DoserAlk Schedule
              if ((hour() > 10) && (hour() < 22)) { // Between 10am and 10pm we will disable Port 6
              ReefAngel.Relay.Off(Port6);
            }

            ////// Place your custom code above here

            // This should always be the last line
            ReefAngel.Portal( "howaboutme" );
            ReefAngel.ShowInterface();
       }

        byte ElseMode( byte MidPoint, byte Offset, boolean WaveSync )
        {
          // Static's only initialize the first time they are called
          static unsigned long LastChange=millis();        // Set the inital time that the last change occurred
          static int Delay = random( 500, 3000);           // Set the initial delay
          static int NewSpeed = MidPoint;                  // Set the initial speed
          static int AntiSpeed = MidPoint;                 // Set the initial anti sync speed
          if ((millis()-LastChange) > Delay)               // Check if the delay has elapsed
          {
            Delay=random(500,5000);                        // If so, come up with a new delay
            int ChangeUp = random(Offset);                 // Amount to go up or down
            if (random(100)<50)                            // 50/50 chance of speed going up or going down
            {
              NewSpeed = MidPoint - ChangeUp;
              AntiSpeed = MidPoint + ChangeUp;
            }
            else
            {
              NewSpeed = MidPoint + ChangeUp;
              AntiSpeed = MidPoint - ChangeUp;
            }
            LastChange=millis();                           // Reset the time of the last change
          }
          if (WaveSync)
          {
            return NewSpeed;
          }
          else
          {
            return AntiSpeed;
          }
        }


Key Attributes
- Able to control pump settings via portal
- When in "custom mode": WP-25 is in else mode between 1:30pm and 9:30pm, constant mode at 32% between 9:30pm and 9:30am and 36% between 9:30am and 1:30pm.
- Doses Alk 12 times a day, once per hour between 10:00pm and 10:00am, controlled via portal


WOW, thanks
Ive got it now...

Return to My PDE/INO file

Who is online

Users browsing this forum: No registered users and 2 guests