DmnYnkee's Code

Share you PDE file with our community
Post Reply
DmnYnkee
Posts: 83
Joined: Mon Aug 11, 2014 6:45 am
Location: Clermont, Florida

Re: DmnYnkee's Code

Post by DmnYnkee »

It is working out well. I did have to modify the coding just a bit. Every couple of days, 1 or the other would turn on at switchover time, and would not shut off. By adding the Relay.Off coding, this issue has been eliminated. Thankfully, it did not cause a disaster.

Code: Select all

   
if ((hour()>=20 || hour()<=8) && (ReefAngel.Params.PH < 830))
{
 ReefAngel.SingleATO(false,Port5,180,0);   //  Sump switch. Kalk schedule 8pm - 8am if pH < 8.3  If ATO/Kalk runs for 180 seconds, then shut off and send alert.
 ReefAngel.Relay.Off(Port8);
}
 else   
{
 ReefAngel.SingleATO(false,Port8,180,0);   //  Sump switch.  If ATO/RoDi runs for 180 seconds, then shut off and send alert.
 ReefAngel.Relay.Off(Port5);
}

Image
DmnYnkee
Posts: 83
Joined: Mon Aug 11, 2014 6:45 am
Location: Clermont, Florida

Re: DmnYnkee's Code

Post by DmnYnkee »

Current full code as of 1/1/16.

Recent changes:
Adjusted monthly temperatures
Adjusted Flow speeds
Added auto feeding

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>
#include <SunLocation.h>
#include <Tide.h>
#include <Moon.h>
#include <WiFiAlert.h>


////// Place global variable code below here
  
  SunLocation sl;
  
  int avgph[10];
    unsigned long totalavgph=0;
    byte avgindex=0;

void DrawCustomMain()
    {
      byte x;
      byte y = 2;
      char text[7];

      // *********** CHANGE TEMP READOUT COLOR DEPENDENT ON FAN AND HEATER STATUS ***********
      int TempColor;                                    // Color for drawing temperature
      boolean HeatOn = ReefAngel.Relay.Status(Port6);   // Get the status of the heater relay
      if (HeatOn) 
      {
        TempColor = COLOR_NAVY;                         // Blue text, too cold, heater is on
      }

      if (!HeatOn) 
      {
          TempColor = COLOR_GREEN;                      // Green text, no fan or heater on
      }
      // ***********************************************************************************
           int pHColor;                                 // Color for drawing pH
      boolean LowpH = (ReefAngel.Params.PH < 780) ;     // Check for Low pH Value
      boolean HighpH = (ReefAngel.Params.PH > 850);     // Check for High pH Value
      if (LowpH) 
      {
        pHColor = COLOR_NAVY;                          // Blue text, Low pH value
      }
      if (HighpH)   
      {
        pHColor = COLOR_RED;                           // Red text, High pH value
      }
      if (!LowpH && !HighpH) 
      {
        pHColor = COLOR_GREEN;                         // Green text, pH acceptable
      }
      // ***********************************************************************************
      ReefAngel.LCD.DrawLargeText(COLOR_DARKSLATEBLUE,DefaultBGColor, 6, 3, " Thunder Reef",Font8x8);   // Put a banner at the top
      ReefAngel.LCD.DrawDate(6, 119);                                                                   // Put the date and time at the bottom
      ReefAngel.LCD.Clear(COLOR_BLACK, 1, 12, 132, 12);                                                 // Draw a black line under the banner
      x = 6;
      y += MENU_START_ROW*1.4;                                                                          // MENU_START_ROW is 10, according to globals.h, so y=2+10+1=13
      ReefAngel.LCD.DrawLargeText(COLOR_BLUE, COLOR_WHITE, x, y+1, " Temp      pH");

      ConvertNumToString(text, ReefAngel.Params.Temp[T1_PROBE], 10);                                    // Get T1 temp and convert
      x = 2;
      y += MENU_START_ROW*1.6;
      ReefAngel.LCD.DrawHugeNumbers(COLOR_BLACK, TempColor, x, y, text);                                // Draw the temperature, white numbers on a colored background
      ConvertNumToString(text, ReefAngel.Params.PH, 100);                                               // Get pH reading and convert
      x = 2;
      y = MENU_START_ROW*2.6;
      ReefAngel.LCD.DrawHugeNumbers(COLOR_YELLOW, pHColor, x+65, y+6, text);                            // Put pH on the screen
     
      x += 6;
      y += MENU_START_ROW*3.3;
  ReefAngel.LCD.DrawLargeText(COLOR_INDIGO,DefaultBGColor,25,y,"Sump Level",Font8x8);      // Draw the Sump Float switch status
  if (ReefAngel.HighATO.IsActive())
  {ReefAngel.LCD.FillCircle(15,y+3,7,COLOR_RED);
  }
  else
  {
  ReefAngel.LCD.FillCircle(15,y+3,7,COLOR_GREEN);
  }
  x += 6;
  y += MENU_START_ROW*2.0;
  ReefAngel.LCD.DrawLargeText(COLOR_INDIGO,DefaultBGColor,25,y,"Skimmer Cup",Font8x8);     // Draw the Skimmer Cup Float switch status
  if (ReefAngel.LowATO.IsActive()) {ReefAngel.LCD.FillCircle(15,y+3,7,COLOR_GREEN);
  }
  else
  {
  ReefAngel.LCD.FillCircle(15,y+3,7,COLOR_RED);
  }
      
      
      byte TempRelay = ReefAngel.Relay.RelayData;                                          // Code for drawing the relay box
      TempRelay &= ReefAngel.Relay.RelayMaskOff;
      TempRelay |= ReefAngel.Relay.RelayMaskOn;
      ReefAngel.LCD.DrawOutletBox(12, 100, TempRelay);
   }
void DrawCustomGraph()
{
}

////// 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 
    ReefAngel.FeedingModePorts = Port1Bit | Port5Bit | Port6Bit | Port7Bit | Port8Bit;       // Ports toggled in Feeding Mode
    ReefAngel.WaterChangePorts = Port1Bit | Port5Bit | Port6Bit | Port7Bit | Port8Bit;       // Ports toggled in Water Change Mode
    ReefAngel.LightsOnPorts = Port2Bit | Port3Bit | Port4Bit;                                // Ports toggled when Lights On / Off menu entry selected
    ReefAngel.OverheatShutoffPorts = Port2Bit | Port3Bit | Port4Bit | Port6Bit | Port7Bit;   // Ports turned off when Overheat temperature exceeded
    ReefAngel.TempProbe = T1_PROBE;                                                          // Use T1 probe as temperature and overheat functions
    ReefAngel.OverheatProbe = T1_PROBE;
    InternalMemory.OverheatTemp_write( 830 );                                                // Set the Overheat temperature setting

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

    // Ports that are always on
    ReefAngel.Relay.On( Port1 );
    
    // Delayed start for skimmer to allow sump level to return to normal after water change or feed mode
    ReefAngel.Relay.DelayedOn( Port7,4 );

    ////// Place additional initialization code below here
   
    sl.Init(28.5708, -81.6995);    // Lat/long for Clermont, FL
    sl.SetOffset(-3,0,-3,0);       // rise_hour, rise_seconds, set_hour, set_seconds (set 1 hr later for better viewing time)

    randomSeed(now()%SECS_PER_DAY);
      
      //Custom Variable [0] =  Month/Season
    
    ReefAngel.CustomLabels[0]="Return";  
    ReefAngel.CustomLabels[1]="Daylights";  
    ReefAngel.CustomLabels[2]="Actinics";  
    ReefAngel.CustomLabels[3]="Fuge Light";  
    ReefAngel.CustomLabels[4]="ATO Kalk";  
    ReefAngel.CustomLabels[5]="Heater";  
    ReefAngel.CustomLabels[6]="Skimmer";  
    ReefAngel.CustomLabels[7]="ATO RoDi";  
    

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

void loop()
{
  

    // seasonal temperatures
    SeasonalTemps();

    ReefAngel.DayLights( Port2 );             // ATI DayLights (White+Purple)  On 120 min after sunrise, off 120 min before sunset.
    ReefAngel.ActinicLights( Port3 );         // ATI Actinic+ Lights (Blues).   On at sunrise, off at sunset.
    ReefAngel.MoonLights( Port4 );            // Refugium light.  On 120 min before sunset, off 120 min after sunrise.
  
    
    ////// Place your custom code below here
    
if (hour()>=8 && hour()<10)
{
 ReefAngel.PWM.SetDaylight( LongPulseMode(0,70,4,true) ); // Long pulse at 70% with 4s pulse on sync mode
 ReefAngel.PWM.SetActinic( LongPulseMode(0,70,4,false) ); // Long pulse at 70% with 4s pulse on Anti-sync mode
}
else if (hour()>=10 && hour()<11)
{
 ReefAngel.PWM.SetDaylight( LongPulseMode(0,73,2,true) ); // Long pulse at 73% with 2s pulse on sync mode
 ReefAngel.PWM.SetActinic( LongPulseMode(0,73,2,false) ); // Long pulse at 73% with 2s pulse on Anti-sync mode
}
else if (hour()>=11 && hour()<12)
{
 ReefAngel.PWM.SetDaylight( ShortPulseMode(0,78,408,true) ); // Short pulse at 78% with 408ms pulse on sync mode (3/4" surface wave)
 ReefAngel.PWM.SetActinic( ShortPulseMode(0,78,408,false) ); // Short pulse at 78% with 408ms pulse on Anti-sync mode (3/4" surface wave)
}
else if (hour()>=12 && hour()<13)
{
 ReefAngel.PWM.SetDaylight( ShortPulseMode(0,85,408,true) ); // Short pulse at 85% with 408ms pulse on sync mode (1" surface wave)
 ReefAngel.PWM.SetActinic( ShortPulseMode(0,85,408,false) ); // Short pulse at 85% with 408ms pulse on Anti-sync mode (1" surface wave) 
}
else if (hour()>=13 && hour()<14)
{
 ReefAngel.PWM.SetDaylight( ShortPulseMode(30,90,408,true) ); // Short pulse at 30%/90% with 408ms pulse on sync mode (1" surface wave)
 ReefAngel.PWM.SetActinic( ShortPulseMode(30,90,408,false) ); // Short pulse at 30%/90% with 408ms pulse on Anti-sync mode (1" surface wave)  
}
else if (hour()>=14 && hour()<15)
{
 ReefAngel.PWM.SetDaylight( ShortPulseMode(0,85,408,true) ); // Short pulse at 85% with 408ms pulse on sync mode (1" surface wave)
 ReefAngel.PWM.SetActinic( ShortPulseMode(0,85,408,false) ); // Short pulse at 85% with 408ms pulse on Anti-sync mode (1" surface wave)
}
else if (hour()>=15 && hour()<17)
{
 ReefAngel.PWM.SetDaylight( ShortPulseMode(0,80,408,true) ); // Short pulse at 80% with 408ms pulse on sync mode (3/4" surface wave)
 ReefAngel.PWM.SetActinic( ShortPulseMode(0,80,408,false) ); // Short pulse at 80% with 408ms pulse on Anti-sync mode (3/4" surface wave)
}
else if (hour()>=17 && hour()<18)
{
 ReefAngel.PWM.SetDaylight( ShortPulseMode(0,75,408,true) ); // Short pulse at 75% with 408ms pulse on sync mode (1/2" surface wave
 ReefAngel.PWM.SetActinic( ShortPulseMode(0,75,408,false) ); // Short pulse at 75% with 408ms pulse on Anti-sync mode (1/2" surface wave)
}
else if (hour()>=18 && hour()<19)
{
 ReefAngel.PWM.SetDaylight( LongPulseMode(38,89,3,true) ); // Long pulse at 38%/89% with 3s pulse on sync mode (Nutrient transport mode)
 ReefAngel.PWM.SetActinic( LongPulseMode(38,89,3,false) ); // Long pulse at 38%/89% with 3s pulse on Anti-sync mode (Nutrient transport mode)
}
else if (hour()>=19 && hour()<20)
{
 ReefAngel.PWM.SetDaylight( LongPulseMode(0,75,2,true) ); // Long pulse at 75% with 2s pulse on sync mode
 ReefAngel.PWM.SetActinic( LongPulseMode(0,75,2,false) ); // Long pulse at 75% with 2s pulse on Anti-sync mode
}
else
{
 ReefAngel.PWM.SetDaylight( ReefCrestMode(60,15,true) ); // reefcrest at 60% +/- 15% on sync mode       (night Mode)
 ReefAngel.PWM.SetActinic( ReefCrestMode(60,15,false) ); // reefcrest at 60% +/- 15% on Anti-sync mode  (night mode)
}
 
if( ReefAngel.DisplayedMenu==FEEDING_MODE )
{
 ReefAngel.PWM.SetActinic( LongPulseMode(0,60,1,false) );
 ReefAngel.PWM.SetDaylight( LongPulseMode(0,60,1,true) );
}

if( ReefAngel.DisplayedMenu==WATERCHANGE_MODE )
{
 ReefAngel.PWM.SetActinic(35);
 ReefAngel.PWM.SetDaylight(35);
}

// enter feeding mode at 11:30am & 5pm
 if ( (hour()==11 && minute()==30 && second()==0) || (hour()==17 && minute()==0 && second()==0))
 {
 ReefAngel.FeedingModeStart(); // turn on feeding mode
 }
   
if(ReefAngel.LowATO.IsActive())           //  Float switch in Skimmer Locker
{
ReefAngel.Relay.DelayedOn( Port7,4 );
}
 else
{
 ReefAngel.Relay.Off(Port7);               //  Turn off Skimmer when locker full.
}

if ((hour()>=20 || hour()<=8) && (ReefAngel.Params.PH < 830))
{
 ReefAngel.SingleATO(false,Port5,210,0);   //  Sump switch. Kalk schedule 8pm - 8am if pH < 8.3  If ATO/Kalk runs for 210 seconds, then shut off and send alert.
 ReefAngel.Relay.Off(Port8);
}
 else   
{
 ReefAngel.SingleATO(false,Port8,210,0);   //  Sump switch.  If ATO/RoDi runs for 210 seconds, then shut off and send alert.
 ReefAngel.Relay.Off(Port5);
}

 
  { 
    sl.CheckAndUpdate();  // handle updating sunrise and sunset values
  }
 
    ////// Place your custom code above here

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

 void SeasonalTemps ()
 {
  static int heatArray[][2] = { {802,806},// default in case of error in month=0 (June)
                    {783,787},//January (winter)
                    {786,790},//February (winter)
                    {789,793},//March (early spring)
                    {794,798},//April (spring)
                    {798,802},//May (spring)
                    {802,806},//June (early summer)
                    {806,810},//July (summer)
                    {810,814},//August (summer)
                    {806,810},//September (early fall)
                    {799,803},//October (fall)
                    {794,798},//November (fall)
                    {788,792} };//December (early winter)
                    
               
  ReefAngel.StandardHeater( Port6,heatArray[month()][0],heatArray[month()][1]);
 }//end seasonalTemps
Image
slm222
Posts: 105
Joined: Wed Nov 18, 2015 9:16 pm

Re: DmnYnkee's Code

Post by slm222 »

Great. I am trying it tonight with my reactor!
slm222
Posts: 105
Joined: Wed Nov 18, 2015 9:16 pm

Re: DmnYnkee's Code

Post by slm222 »

I don't understand how this is working for you.. I put it in my code and now neither pump is working. did you include anything else than

if ((hour()>=20 && hour()<=8) && (ReefAngel.Params.PH < 825))
{
ReefAngel.SingleATO( true,Port7,480,0 ); // Sump switch. Kalk schedule 8pm - 8am if pH < 8.3 If ATO/Kalk runs for 210 seconds, then shut off and send alert.
ReefAngel.Relay.Off(Port7);
}
else
{
ReefAngel.SingleATO( true,Port8,480,0 ); // Sump switch. If ATO/RoDi runs for 210 seconds, then shut off and send alert.
ReefAngel.Relay.Off(Port8);
}
User avatar
lnevo
Posts: 5430
Joined: Fri Jul 20, 2012 9:42 am

Re: DmnYnkee's Code

Post by lnevo »

See my comment on your other thread
DmnYnkee
Posts: 83
Joined: Mon Aug 11, 2014 6:45 am
Location: Clermont, Florida

Re: DmnYnkee's Code

Post by DmnYnkee »

if ((hour()>=20 || hour()<=8) && (ReefAngel.Params.PH < 830))

you need the ||.
Image
Post Reply