Feeding Mode + Wavemakers On

Do you have a question on how to do something.
Ask in here.
Post Reply
chase
Posts: 101
Joined: Fri Sep 16, 2011 8:26 am

Feeding Mode + Wavemakers On

Post by chase »

Currently I have my WM sent on random via the following code:

Code: Select all

 ReefAngel.WavemakerRandom( Port5,10,15 );
ReefAngel.Relay.Set(Port6,!ReefAngel.Relay.Status(Port5));
I would like to 'override' the toggling function while in feeding mode so the pellets get blown around the tank and not just dumped off in one corner. To accomplish this I thought I could put the wavemaker code inside a feeding mode loop with something like this

Code: Select all

if ( ((hour() == 12) && (minute() == 05) && (second() == 00) ) )
        {
        ReefAngel.FeedingModeStart();
        ReefAngel.Relay.On (Port5);
        ReefAngel.Relay.On (Port6);
        }
      else
	  {
	ReefAngel.WavemakerRandom( Port5,10,15 );
        ReefAngel.Relay.Set(Port6,!ReefAngel.Relay.Status(Port5));
	   }
The wavemakers still toggle while in feeding mode though, any thoughts?
Image
rimai
Posts: 12857
Joined: Fri Mar 18, 2011 6:47 pm

Re: Feeding Mode + Wavemakers On

Post by rimai »

Try this:

Code: Select all

if ( ((hour() == 12) && (minute() == 05) && (second() == 00) ) )
{
  ReefAngel.FeedingModeStart();
}

if (ReefAngel.DisplayedMenu=FEEDING_MODE)
{
  ReefAngel.Relay.On (Port5);
  ReefAngel.Relay.On (Port6);
}
else
{
  ReefAngel.WavemakerRandom( Port5,10,15 );
  ReefAngel.Relay.Set(Port6,!ReefAngel.Relay.Status(Port5));
}

Roberto.
chase
Posts: 101
Joined: Fri Sep 16, 2011 8:26 am

Re: Feeding Mode + Wavemakers On

Post by chase »

Perfect, thanks Roberto!
Image
chase
Posts: 101
Joined: Fri Sep 16, 2011 8:26 am

Re: Feeding Mode + Wavemakers On

Post by chase »

Ah, spoke to soon. Initially it worked, but I changed the time and now when I load the ino file the screen turns white and both pumps stay on, along with my ato port (without being triggered by the float switch). If I comment out the code and upload it everything seems okay. Here's my ino with the autofeed commented out. When I loaded the autofeed code I did comment out the original wavemaker stuff so I don't think that's what caused the problem.

Code: Select all

/* Features
#define SIMPLE_MENU
#define InstalledRelayExpansionModules 1
#define WATERLEVELEXPANSION
#define RelayExp
#define SaveRelaysPresent
#define ENABLE_EXCEED_FLAGS
#define CUSTOM_VARIABLES
#define CUSTOM_MAIN
#define wifi
#define SALINITYEXPANSION
#define DisplayLEDPWM
#define VersionMenu
#define WDT
*/

    #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 <AI.h>
    #include <WaterLevel.h>
    #include <ReefAngel.h>

    ////// Place global variable code below here
    #define Return        Port4
    #define CaDoser       Box1_Port3
    #define AlkDoser      Box1_Port4

    ////// Place global variable code above here
    void setup()
    {
        // This must be the first line
        ReefAngel.Init();  //Initialize controller
        // Ports toggled in Feeding Mode
        ReefAngel.FeedingModePorts = Port4Bit;
        // Ports toggled in Water Change Mode
        ReefAngel.WaterChangePorts = Port2Bit | Port3Bit;
        ReefAngel.WaterChangePortsE[0] = Port8Bit | Port7Bit | Port6Bit | Port5Bit ;
        // Ports toggled when Lights On / Off menu entry selected
        ReefAngel.LightsOnPorts = Port1Bit;
        ReefAngel.LightsOnPortsE[0] = 0;
        // Ports turned off when Overheat temperature exceeded
        ReefAngel.OverheatShutoffPorts = Port3Bit;
        ReefAngel.OverheatShutoffPortsE[0] = 0;
        // Temperature and overheat functions
        ReefAngel.TempProbe = T2_PROBE;
        ReefAngel.OverheatProbe = T3_PROBE;
        // Set the Overheat temperature setting
        InternalMemory.OverheatTemp_write( 830 );
       
        // Ports that are always on
        ReefAngel.Relay.On( Port4 );
        ReefAngel.Relay.On( Box1_Port5 );
        ReefAngel.Relay.On( Box1_Port6 );
        ReefAngel.Relay.On( Box1_Port7 );
        ReefAngel.Relay.On( Box1_Port8 );

        ////// Place additional initialization code below here
         ReefAngel.CustomVar[7]=1;
        
       
        ////// Place additional initialization code above here
    }

    void loop()
    {
        ReefAngel.StandardLights( Port1,9,0,21,0 );
        ReefAngel.SingleATO( true,Port2,360,0 );
        ReefAngel.StandardHeater( Port3,781,785 );
     // Turn Port5 on/off random cycles that lasts from 10 to 15 secs
	ReefAngel.WavemakerRandom( Port5,10,15 );
        ReefAngel.StandardLights( Port7,21,0,23,0 );
        ReefAngel.StandardLights( Port8,21,0,9,0 );
      //  ReefAngel.DosingPumpRepeat( Box1_Port3,0,120,2 );
      //  ReefAngel.DosingPumpRepeat( Box1_Port4,5,120,3 );
  
        ////// Place your custom code below here
  
	// Turn Port6 on/off on opposite cycle as Port 5
	ReefAngel.Relay.Set(Port6,!ReefAngel.Relay.Status(Port5));        
   
	/*AUTOFEED if the hour is 11a, minute is 55 and seconds is 0
              if ( ((hour() == 11) && (minute() == 55) && (second() == 00) ) )
              {
                ReefAngel.FeedingModeStart();
              }  
              if (ReefAngel.DisplayedMenu=FEEDING_MODE)
              {
                ReefAngel.Relay.On (Port5);
                ReefAngel.Relay.On (Port6);
              }
              else
              {
                ReefAngel.WavemakerRandom( Port5,10,15 );
                ReefAngel.Relay.Set(Port6,!ReefAngel.Relay.Status(Port5));
              }
        	*/   
    //Dose Ca

                  if ( ReefAngel.DisplayedMenu == DEFAULT_MENU ) //Ca Doser - Only works if Main screen is showing
                  {
                   /* && = and || = or
                   Hours between 12am and 5am
                   minute must be 0 (top of the hour)
                   seconds less than 2 (up to 2 seconds)
                   */
                   if ( ((hour() >= 0) && (hour() <= 6)) && (minute() == 0) && //dose time
                       (second() < 2) ) //dose duration
                   {
                      ReefAngel.Relay.On(CaDoser);
                   }
                   else
                   {
                      ReefAngel.Relay.Off(CaDoser);
                   }
                }
     
    //Dose Alk
                       if ( ReefAngel.DisplayedMenu == DEFAULT_MENU ) //Alk Doser - Only works if Main screen is showing
                  {
                  /*  && = and || = or
                   Hours between 12:05am and 7:05am
                   minute must be 0 (top of the hour)
                   seconds less than 3 (up to 3 seconds)
                   */
                  if ( ((hour() >= 0) && (hour() <= 7)) && (minute() == 5) && //dose time
                       (second() < 3) ) //dose duration
                   {
                      ReefAngel.Relay.On(AlkDoser);
                   }
                   else
                   {
                      ReefAngel.Relay.Off(AlkDoser);
                   }
                } 
    //Power Outage   
       ReefAngel.CustomVar[0]=ReefAngel.Relay.IsRelayPresent(EXP1_RELAY);
    if (!ReefAngel.Relay.IsRelayPresent(EXP1_RELAY))
      {
        ReefAngel.Relay.Off (Port1);
        ReefAngel.Relay.Off (Port2);
        ReefAngel.Relay.Off (Port3);
        ReefAngel.Relay.Off (Port5);
        ReefAngel.Relay.Off (Port6);
        ReefAngel.Relay.Off (Port7);
        ReefAngel.Relay.Off (Port8);
    /*   
        ReefAngel.Relay.Off (Daylight);   //port 1
        ReefAngel.Relay.Off (AutoTopOff); //port 2
        ReefAngel.Relay.Off (Heater);     //port 3
        ReefAngel.Relay.Off (WavemakerL); //port 5
        ReefAngel.Relay.Off (WavemakerR); //port 6
        ReefAngel.Relay.Off (WavemakerR); //port 7
        ReefAngel.Relay.Off (FugeLight);  //port 8 
    */
      }

    if (!ReefAngel.HighATO.IsActive())
      {
        ReefAngel.Relay.Off( Box1_Port6 ); 
       } 
      else
       {
        ReefAngel.Relay.On( Box1_Port6 ); 
       }
       
   //ATO/HEATER PORTAL PORTAL ALERT    
       if ( InternalMemory.read(ATO_Single_Exceed_Flag) == 1 )
        {
        ReefAngel.CustomVar[1]=1;
        }
        else
        {
        ReefAngel.CustomVar[1]=0;
        }
        if ( InternalMemory.read(Overheat_Exceed_Flag) == 1 )
        {
        ReefAngel.CustomVar[2]=1;
        }
        else
        {
        ReefAngel.CustomVar[2]=0;
        }
    
    ////// Place your custom code above here

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

    void DrawCustomMain()
    {
        int x,y;
        char text[10];
        // Parameters
    #if defined DisplayLEDPWM && ! defined RemoveAllLights
        ReefAngel.LCD.DrawMonitor( 15, 14, ReefAngel.Params,
        ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue() );
    #else // defined DisplayLEDPWM && ! defined RemoveAllLights
        ReefAngel.LCD.DrawMonitor( 15, 14, ReefAngel.Params );
    #endif // defined DisplayLEDPWM && ! defined RemoveAllLights
        pingSerial();

        // Salinity
        ReefAngel.LCD.DrawText( COLOR_DARKKHAKI,DefaultBGColor,15,54, "SAL:" );
        ReefAngel.LCD.DrawText( COLOR_DARKKHAKI,DefaultBGColor,39,54, ReefAngel.Params.Salinity );
        pingSerial();

        // Water Level
        ReefAngel.LCD.DrawText( COLOR_OLIVEDRAB,DefaultBGColor,75,54, "WL:" );
        ReefAngel.LCD.DrawText( COLOR_OLIVEDRAB,DefaultBGColor,94,54, ReefAngel.WaterLevel.GetLevel() );
        pingSerial();
       
        // Main Relay Box
        byte TempRelay = ReefAngel.Relay.RelayData;
        TempRelay &= ReefAngel.Relay.RelayMaskOff;
        TempRelay |= ReefAngel.Relay.RelayMaskOn;
        ReefAngel.LCD.DrawOutletBox( 12, 76, TempRelay );
        pingSerial();

        // Relay Expansion
        TempRelay = ReefAngel.Relay.RelayDataE[0];
        TempRelay &= ReefAngel.Relay.RelayMaskOffE[0];
        TempRelay |= ReefAngel.Relay.RelayMaskOnE[0];
        ReefAngel.LCD.DrawOutletBox( 12, 98, TempRelay );
        pingSerial();

        // Date and Time
        ReefAngel.LCD.DrawDate( 6, 122 );
        pingSerial();
    }

    void DrawCustomGraph()
    {
    }

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

Re: Feeding Mode + Wavemakers On

Post by rimai »

My bad.
Change this:

Code: Select all

if (ReefAngel.DisplayedMenu=FEEDING_MODE)
To this:

Code: Select all

if (ReefAngel.DisplayedMenu==FEEDING_MODE)
Roberto.
chase
Posts: 101
Joined: Fri Sep 16, 2011 8:26 am

Re: Feeding Mode + Wavemakers On

Post by chase »

Yep, that was it thanks again!
Image
Post Reply