Speedwave, wp40, and feed mode

Do you have a question on how to do something.
Ask in here.
Post Reply
Drs1210

Speedwave, wp40, and feed mode

Post by Drs1210 »

I was thinking about getting one of those speedwave pumps for my return once the new ones come out. I was wondering if anybody had a code for the speedwave to run as their return? What I want was that when I hit feed mode, the speedwave and the wp40 would slow down to a predetermined speed for a certain length of time
rimai
Posts: 12857
Joined: Fri Mar 18, 2011 6:47 pm

Re: Speedwave, wp40, and feed mode

Post by rimai »

Try this:

Code: Select all

if (ReefAngel.DisplayedMenu==FEEDING_MODE)
ReefAngel.PWM.SetActinic(30);
Sent from my Galaxy S3 using Tapatalk 2
Roberto.
Drs1210

Re: Speedwave, wp40, and feed mode

Post by Drs1210 »

Thanks Roberto! How would it work if i wanted it to automatically go into feeding mode a couple of times a day?
rimai
Posts: 12857
Joined: Fri Mar 18, 2011 6:47 pm

Re: Speedwave, wp40, and feed mode

Post by rimai »

Try this:

Code: Select all

if (now()%86400==36000) ReefAngel.FeedingModeStart(); // 36000 is number of seconds from midnight
Roberto.
Drs1210

Re: Speedwave, wp40, and feed mode

Post by Drs1210 »

So would that come on at 10:00 A.M.? If I wanted two feeding times would I just use the same line and just change the seconds?
Drs1210

Re: Speedwave, wp40, and feed mode

Post by Drs1210 »

I was wanting to use this code but I wanted to have two feedings a day instead of one

Code: Select all

if (now()%86400==36000) ReefAngel.FeedingModeStart(); // 36000 is number of seconds from midnight
Could I just add this for a second feeding?

Code: Select all

if (now()%86400==61200) ReefAngel.FeedingModeStart(); // 61200 is number of seconds from midnight
This is my current code. How would I incoperate those two lines into mine? I also want it to slow down my wp40, and my future dc return pump while it is in feed mode, then return back to normal.

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>

// Define Relay Ports by Name
#define KalkDoser          1
#define WCEmpty            2
#define Autotopoff         3
#define Refugium           4
#define KalkStirrer        5
#define WCFill             6
#define Heater             7
#define Return             8

#define RODIValve          Box1_Port1
#define Skimmer            Box1_Port2
#define GACReactor         Box1_Port3
#define GFOReactor         Box1_Port4
#define Unused             Box1_Port5
#define Unused             Box1_Port6
#define Unused             Box1_Port7
#define Unused             Box1_Port8

////// Place global variable code below here
byte wpMode;
int WCstatus;
////// Place global variable code above here
void setup()
{
  // This must be the first line
  InternalMemory.LCDID_write(0);
  ReefAngel.Init();  //Initialize controller
  ReefAngel.AddDateTimeMenu(); 
  ReefAngel.AddStandardMenu();  // Add Standard Menu
  ReefAngel.PHMin=546;//PH7.0
  ReefAngel.PHMax=734;//PH10.0
  // Ports toggled in Feeding Mode
  ReefAngel.FeedingModePorts = 0;
  // Ports toggled in Water Change Mode
  ReefAngel.WaterChangePorts = Port1Bit | Port3Bit | Port7Bit | Port8Bit;
  ReefAngel.WaterChangePortsE[0] = Port3Bit | Port4Bit;
  // Ports toggled when Lights On / Off menu entry selected
  ReefAngel.LightsOnPorts = Port4Bit;
  // Ports turned off when Overheat temperature exceeded
  ReefAngel.OverheatShutoffPorts = Port7Bit;
  // Use T1 probe as temperature and overheat functions
  ReefAngel.TempProbe = T1_PROBE;
  ReefAngel.OverheatProbe = T1_PROBE;
  // Set the Overheat temperature setting
  InternalMemory.OverheatTemp_write( 810 );
  ReefAngel.Timer[1].SetInterval(180);

  // Ports that are always on
  ReefAngel.Relay.On( Return ); 
  ReefAngel.Relay.On( Skimmer ); 
  ReefAngel.Relay.On( GACReactor );
  ReefAngel.Relay.On( GFOReactor );

    ////// Place additional initialization code below here
  ////// Place additional initialization code above here
}
void loop()
{
  ////// Place your custom code below here
  CheckPower();           // Monitor for power outages

  ReefAngel.PWM.SetChannel( 0, PWMSlope(9,30,21,30,17,100,60,0) );
  ReefAngel.PWM.SetChannel( 1, PWMSlope(9,30,21,30,17,100,60,0) );
  ReefAngel.PWM.SetChannel( 2, PWMSlope(9,30,21,30,17,100,60,0) );
  ReefAngel.PWM.SetChannel( 3, PWMSlope(9,30,21,30,17,100,60,0) );
  ReefAngel.PWM.SetChannel( 4, PWMSlope(9,30,21,30,17,100,60,0) );
  ReefAngel.PWM.SetChannel( 5, PWMSlope(9,30,21,30,17,100,60,0) );

  ReefAngel.WaterLevelATO(Port3,180,54,56);
  if (ReefAngel.LowATO.IsActive()) ReefAngel.Relay.On(RODIValve);
  if (!ReefAngel.HighATO.IsActive()) ReefAngel.Relay.Off(RODIValve);
  ReefAngel.DosingPumpRepeat( Port1,0,45,6 );
  if (ReefAngel.Params.PH>=850) ReefAngel.Relay.Off(KalkDoser);
  ReefAngel.StandardLights( Port4,20,0,8,0 );
  ReefAngel.Relay.Set(Port5,now()%7200<900);
  ReefAngel.StandardHeater( Port7,780,785 );

    if (hour()>=6 && hour()<8)
    {
      ReefAngel.PWM.SetDaylight( TidalSwellMode(70,true) ); // Tidal Swell at 70% on sync mode
      ReefAngel.PWM.SetActinic( TidalSwellMode(70,false) ); // Tidal Swell at 70% on anti-sync mode
      wpMode=0;
    }

    else if (hour()>=8 && hour()<9)
    {
      ReefAngel.PWM.SetDaylight( ReefCrestMode(65,20,true) ); // ReefCrest at 65% +/- 20 on sync mode
      ReefAngel.PWM.SetActinic( ReefCrestMode(65,20,false) ); // ReefCrest at 65% +/- 20 on anti-sync mode
      wpMode=1;
    }

    else if (hour()>=9 && hour()<13)
    {
      ReefAngel.PWM.SetDaylight( ElseMode(60,30,true )); // ElseMode on sync mode, 60 +/- 30%
      ReefAngel.PWM.SetActinic( ElseMode(60,30,false )); // ElseMode on anti-sync mode, 60 +/- 30%
      wpMode=3;
    }

    else if (hour()>=13 && hour()<16)
    {
      ReefAngel.PWM.SetDaylight( NutrientTransportMode(75,90,2000,true) ); // Nutrient Transport on sync mode
      ReefAngel.PWM.SetActinic( NutrientTransportMode(75,90,2000,false) ); // Nutrient Transport on anti-sync mode
      wpMode=2;
    }

    else if (hour()>=16 && hour()<20)
    {
      ReefAngel.PWM.SetDaylight( ElseMode(60,30,true )); // ElseMode on sync mode, 60 +/- 30%
      ReefAngel.PWM.SetActinic( ElseMode(60,30,false )); // ElseMode on anti-sync mode, 60 +/- 30%
      wpMode=3;
    }

    else if (hour()>=20 && hour()<21)
    {
      ReefAngel.PWM.SetDaylight( ReefCrestMode(65,20,true) ); // ReefCrest at 65% +/- 20 on sync mode
      ReefAngel.PWM.SetActinic( ReefCrestMode(65,20,false) ); // ReefCrest at 65% +/- 20 on anti-sync mode
      wpMode=1;
    }

    else if (hour()>=21 && hour()<23)
    {
      ReefAngel.PWM.SetDaylight( TidalSwellMode(70,true) ); // Tidal Swell at 70% on sync mode
      ReefAngel.PWM.SetActinic( TidalSwellMode(70,false) ); // Tidal Swell at 70% on anti-sync mode
      wpMode=0;
    }

    else
    {
      ReefAngel.PWM.SetDaylight( SineMode(40,55,30,true) ); // Sine at 40% 55% with for 30s on sync mode
      ReefAngel.PWM.SetActinic( SineMode(40,55,30,false) ); // Sine at 40% 55% with for 30s on anti sync mode
      wpMode=4;
    }

  if (ReefAngel.DisplayedMenu==WATERCHANGE_MODE)
  {
    if (WCstatus==-1) 
    {
      ReefAngel.Timer[1].Start();
      WCstatus=0;
    }
    if ( ReefAngel.Timer[1].IsTriggered() )
    {
      ReefAngel.Relay.On(WCEmpty);
      WCstatus=1;
    }
    if (ReefAngel.WaterLevel.GetLevel()<=30 && WCstatus>0 && WCstatus<10) WCstatus++;
    if (ReefAngel.WaterLevel.GetLevel()<=30 && WCstatus==10)
    {
      WCstatus=11;
      ReefAngel.Relay.Off(WCEmpty);
      ReefAngel.Relay.On(WCFill);
    }
    if (ReefAngel.WaterLevel.GetLevel()<=79 && WCstatus>10 && WCstatus<20) WCstatus++;
    if (ReefAngel.WaterLevel.GetLevel()>79 && WCstatus==20) 
    {
      ReefAngel.Relay.Off(WCFill);
      ButtonPress++;
    }
  }
  else 
  {
    WCstatus=-1;
    ReefAngel.Relay.Off(WCEmpty);
    ReefAngel.Relay.Off(WCFill); 
  } 
  ReefAngel.Portal("Drs1210");
  ReefAngel.ShowInterface(); // Display everything on the LCD screen
}
void CheckPower() {
  static boolean powerOutage=false;


  // Power Outage - turn off everything
  if (!ReefAngel.Relay.IsRelayPresent(EXP1_RELAY)) // Expansion Relay NOT present
  {
    powerOutage=true;
    ReefAngel.Relay.Off(KalkDoser); 
    ReefAngel.Relay.Off(WCEmpty); 
    ReefAngel.Relay.Off(Refugium); 
    ReefAngel.Relay.Off(KalkStirrer);
    ReefAngel.Relay.Off(WCFill);
    ReefAngel.Relay.Off(Heater);
    ReefAngel.Relay.Off(RODIValve); 
    ReefAngel.Relay.Off(Skimmer);
    ReefAngel.Relay.Off(GACReactor);
    ReefAngel.Relay.Off(GFOReactor); 

  }

  // Power Restored - Turn things back on
  if (powerOutage && ReefAngel.Relay.IsRelayPresent(EXP1_RELAY))
  {
    LastStart=now();
    powerOutage=false;
    ReefAngel.Relay.On(Return); 
    ReefAngel.Relay.On(Skimmer); 
    ReefAngel.Relay.On(GACReactor);
    ReefAngel.Relay.On(GFOReactor);

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

  ReefAngel.LCD.DrawDate(6, 3);
  ReefAngel.LCD.Clear(COLOR_BLACK, 1, 11, 132, 11);
  pingSerial();

  ReefAngel.LCD.DrawText(COLOR_BLACK,255,56,83, "Res");
  ReefAngel.LCD.DrawText(COLOR_GREEN,255, 45, 83, "H");
  ReefAngel.LCD.DrawText(COLOR_GREEN,255, 45, 91, "I");
  ReefAngel.LCD.DrawText(COLOR_RED,255, 77, 83, "L");
  ReefAngel.LCD.DrawText(COLOR_RED,255, 77, 91, "O");

  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 6, 75, "--------------------");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 6, 98, "--------------------");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 2, 78, "|");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 2, 86, "|");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 2, 95, "|");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 126, 78, "|");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 126, 86, "|");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 126, 95, "|");

  ReefAngel.LCD.DrawText(0,255,10,30,"Tank");
  ConvertNumToString(text, ReefAngel.Params.Temp[T1_PROBE], 10);
  ReefAngel.LCD.DrawLargeText(COLOR_INDIANRED, 255, 10, 40, text, Num8x8);
  pingSerial();

  ReefAngel.LCD.DrawText(0,255,100,30,"pH");
  ConvertNumToString(text, ReefAngel.Params.PH, 100);
  ReefAngel.LCD.DrawLargeText(COLOR_PLUM, 255, 91, 40, text, Num8x8);
  pingSerial();

  ReefAngel.LCD.DrawText(0,255,43,48,"Salinity");
  ConvertNumToString(text, ReefAngel.Params.Salinity, 100);
  ReefAngel.LCD.DrawLargeText(COLOR_LIMEGREEN, 255, 49, 58, text, Num8x8);
  pingSerial();

  ReefAngel.LCD.DrawText(0,255,8,68,"WC");
  ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T3_PROBE], COLOR_CHOCOLATE, 25, 68, 10);
  pingSerial();

  ReefAngel.LCD.DrawText(0,255,66,68,"Room");
  ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T2_PROBE], COLOR_MEDIUMORCHID, 94, 68, 10);
  pingSerial();

  ReefAngel.LCD.DrawText(0,255,15,83,"WL");
  ConvertNumToString(text, ReefAngel.WaterLevel.GetLevel(),1);
  ReefAngel.LCD.DrawLargeText(COLOR_BLUE, 255, 10, 91, text, Num8x8);
  ReefAngel.LCD.DrawText(0,255,26,91," %");
  pingSerial();

  // WP40 Mode

  ReefAngel.LCD.DrawText(0,255,18,12,"Jebao WP40 Mode:");
  ReefAngel.LCD.Clear(COLOR_WHITE, 1, 21, 132, 21); 
  if (wpMode == 0) ReefAngel.LCD.DrawLargeText(COLOR_LIMEGREEN,255, 23, 21,"Tidal Swell");
  else if (wpMode == 1) ReefAngel.LCD.DrawLargeText(COLOR_MAGENTA,255, 25, 21,"Reef Crest");
  else if (wpMode == 2) ReefAngel.LCD.DrawLargeText(COLOR_GOLD,255, 8, 21,"Nutrient Trnsp.");
  else if (wpMode == 3) ReefAngel.LCD.DrawLargeText(COLOR_CORNFLOWERBLUE,255, 30, 21,"Else Mode");
  else if (wpMode == 4) ReefAngel.LCD.DrawLargeText(COLOR_RED,255, 30, 21,"Sine Mode");

  ReefAngel.LCD.DrawText(0,255,96,83,"WP40");
  ConvertNumToString(text, ReefAngel.PWM.GetActinicValue(),1);
  ReefAngel.LCD.DrawLargeText(COLOR_OLIVE, 255, 99, 91, text, Num8x8);
  ReefAngel.LCD.DrawText(0,255,115,91," %");
  pingSerial();

  // Main Relay box
  byte TempRelay = ReefAngel.Relay.RelayData;
  TempRelay &= ReefAngel.Relay.RelayMaskOff;
  TempRelay |= ReefAngel.Relay.RelayMaskOn;
  ReefAngel.LCD.DrawOutletBox(14, 106, TempRelay);
  pingSerial();

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

  if (ReefAngel.HighATO.IsActive())
    ReefAngel.LCD.FillCircle(57,94,3,COLOR_RED);
  else
    ReefAngel.LCD.FillCircle(57,94,3,COLOR_GREEN);

  if (ReefAngel.LowATO.IsActive())
    ReefAngel.LCD.FillCircle(70,94,3,COLOR_RED);
  else
    ReefAngel.LCD.FillCircle(70,94,3,COLOR_GREEN);

}
void DrawCustomGraph()
{
}

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;
  }
}
Would this code work for what I'm wanting to do

Code: Select all

if (hour()>=6 && hour()<8)
{
  ReefAngel.PWM.SetActinic( TidalSwellMode(70,false) ); // Tidal Swell at 70% on anti-sync mode
  wpMode=0;
}

else if (hour()>=8 && hour()<9)
{
  ReefAngel.PWM.SetActinic( ReefCrestMode(65,20,false) ); // ReefCrest at 65% +/- 20 on anti-sync mode
  wpMode=1;
}

else if (hour()>=9 && hour()<13)
{
  ReefAngel.PWM.SetActinic( ElseMode(60,30,false )); // ElseMode on anti-sync mode, 60 +/- 30%
  wpMode=3;
}

else if (hour()>=13 && hour()<16)
{
  ReefAngel.PWM.SetActinic( NutrientTransportMode(75,90,2000,false) ); // Nutrient Transport on anti-sync mode
  wpMode=2;
}

else if (hour()>=16 && hour()<20)
{
  ReefAngel.PWM.SetActinic( ElseMode(60,30,false )); // ElseMode on anti-sync mode, 60 +/- 30%
  wpMode=3;
}

else if (hour()>=20 && hour()<21)
{
  ReefAngel.PWM.SetActinic( ReefCrestMode(65,20,false) ); // ReefCrest at 65% +/- 20 on anti-sync mode
  wpMode=1;
}

else if (hour()>=21 && hour()<23)
{
  ReefAngel.PWM.SetActinic( TidalSwellMode(70,false) ); // Tidal Swell at 70% on anti-sync mode
  wpMode=0;
}

else
{
  ReefAngel.PWM.SetActinic( SineMode(40,55,30,false) ); // Sine at 40% 55% with for 30s on anti sync mode
  wpMode=4;
}

// If we are feeding override the schedule


if (now()%86400==36000) ReefAngel.FeedingModeStart(); // 36000 is number of seconds from midnight
{
  ReefAngel.PWM.SetDaylight(30);
  ReefAngel.PWM.SetActinic(30)
    wpMode=5;
} 
else {
  ReefAngel.PWM.SetDaylight(100);
}


if (now()%86400==61200) ReefAngel.FeedingModeStart(); // 61200 is number of seconds from midnight
{
  ReefAngel.PWM.SetDaylight(30);
  ReefAngel.PWM.SetActinic(30)
    wpMode=5;
} 
else {
  ReefAngel.PWM.SetDaylight(100);
}
Last edited by Drs1210 on Fri Aug 02, 2013 6:31 pm, edited 1 time in total.
Drs1210

Re: Speedwave, wp40, and feed mode

Post by Drs1210 »

Anybody have any ideas? I've tried the code I thought was going to work, but I had a lot of errors in it.
rimai
Posts: 12857
Joined: Fri Mar 18, 2011 6:47 pm

Re: Speedwave, wp40, and feed mode

Post by rimai »

What kind of errors?
Roberto.
Drs1210

Re: Speedwave, wp40, and feed mode

Post by Drs1210 »

Well here is the code I tried. I was getting a lot of 'else' without a previous 'if' along with some others.

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>

// Define Relay Ports by Name
#define KalkDoser          1
#define WCEmpty            2
#define Autotopoff         3
#define Refugium           4
#define KalkStirrer        5
#define WCFill             6
#define Heater             7
#define Return             8

#define RODIValve          Box1_Port1
#define Skimmer            Box1_Port2
#define Unused             Box1_Port3
#define Unused             Box1_Port4
#define Unused             Box1_Port5
#define Unused             Box1_Port6
#define Unused             Box1_Port7
#define Unused             Box1_Port8

////// Place global variable code below here
byte wpMode;
int WCstatus;
////// Place global variable code above here
void setup()
{
  // This must be the first line
  InternalMemory.LCDID_write(0);
  ReefAngel.Init();  //Initialize controller
  ReefAngel.AddDateTimeMenu(); 
  ReefAngel.AddStandardMenu();  // Add Standard Menu
  ReefAngel.PHMin=546;//PH7.0
  ReefAngel.PHMax=734;//PH10.0
  // Ports toggled in Feeding Mode
  ReefAngel.FeedingModePorts = 0;
  // Ports toggled in Water Change Mode
  ReefAngel.WaterChangePorts = Port1Bit | Port3Bit | Port7Bit | Port8Bit;
  // Ports toggled when Lights On / Off menu entry selected
  ReefAngel.LightsOnPorts = Port4Bit;
  // Ports turned off when Overheat temperature exceeded
  ReefAngel.OverheatShutoffPorts = Port7Bit;
  // Use T1 probe as temperature and overheat functions
  ReefAngel.TempProbe = T1_PROBE;
  ReefAngel.OverheatProbe = T1_PROBE;
  // Set the Overheat temperature setting
  InternalMemory.OverheatTemp_write( 810 );
  ReefAngel.Timer[1].SetInterval(180);

  // Ports that are always on
  ReefAngel.Relay.On( Return ); // Return Pump
  ReefAngel.Relay.On( Skimmer ); // Skimmer

    ////// Place additional initialization code below here
  ////// Place additional initialization code above here
}
void loop()
{
  ////// Place your custom code below here
  CheckPower();           // Monitor for power outages

  ReefAngel.PWM.SetChannel( 0, PWMSlope(9,30,21,30,17,100,60,0) );
  ReefAngel.PWM.SetChannel( 1, PWMSlope(9,30,21,30,17,100,60,0) );
  ReefAngel.PWM.SetChannel( 2, PWMSlope(9,30,21,30,17,100,60,0) );
  ReefAngel.PWM.SetChannel( 3, PWMSlope(9,30,21,30,17,100,60,0) );
  ReefAngel.PWM.SetChannel( 4, PWMSlope(9,30,21,30,17,100,60,0) );
  ReefAngel.PWM.SetChannel( 5, PWMSlope(9,30,21,30,17,100,60,0) );

  ReefAngel.WaterLevelATO(Port3,120,43,45);
  if (ReefAngel.LowATO.IsActive()) ReefAngel.Relay.On(RODIValve);
  if (!ReefAngel.HighATO.IsActive()) ReefAngel.Relay.Off(RODIValve);
  ReefAngel.DosingPumpRepeat( Port1,0,45,6 );
  if (ReefAngel.Params.PH>=850) ReefAngel.Relay.Off(KalkDoser);
  ReefAngel.StandardLights( Port4,20,0,8,0 );
  ReefAngel.Relay.Set(Port5,now()%7200<900);
  ReefAngel.StandardHeater( Port7,780,785 );

   if (hour()>=6 && hour()<8)
{
  ReefAngel.PWM.SetActinic( TidalSwellMode(70,false) ); // Tidal Swell at 70% on anti-sync mode
  wpMode=0;
}

else if (hour()>=8 && hour()<9)
{
  ReefAngel.PWM.SetActinic( ReefCrestMode(65,20,false) ); // ReefCrest at 65% +/- 20 on anti-sync mode
  wpMode=1;
}

else if (hour()>=9 && hour()<13)
{
  ReefAngel.PWM.SetActinic( ElseMode(60,30,false )); // ElseMode on anti-sync mode, 60 +/- 30%
  wpMode=3;
}

else if (hour()>=13 && hour()<16)
{
  ReefAngel.PWM.SetActinic( NutrientTransportMode(75,90,2000,false) ); // Nutrient Transport on anti-sync mode
  wpMode=2;
}

else if (hour()>=16 && hour()<20)
{
  ReefAngel.PWM.SetActinic( ElseMode(60,30,false )); // ElseMode on anti-sync mode, 60 +/- 30%
  wpMode=3;
}

else if (hour()>=20 && hour()<21)
{
  ReefAngel.PWM.SetActinic( ReefCrestMode(65,20,false) ); // ReefCrest at 65% +/- 20 on anti-sync mode
  wpMode=1;
}

else if (hour()>=21 && hour()<23)
{
  ReefAngel.PWM.SetActinic( TidalSwellMode(70,false) ); // Tidal Swell at 70% on anti-sync mode
  wpMode=0;
}

else
{
  ReefAngel.PWM.SetActinic( SineMode(40,55,30,false) ); // Sine at 40% 55% with for 30s on anti sync mode
  wpMode=4;
}

// If we are feeding override the schedule


if (now()%86400==36000) ReefAngel.FeedingModeStart(); // 36000 is number of seconds from midnight
{
  ReefAngel.PWM.SetDaylight(30);
  ReefAngel.PWM.SetActinic(30)
    wpMode=5;
} 
else {
  ReefAngel.PWM.SetDaylight(100);
}


if (now()%86400==61200) ReefAngel.FeedingModeStart(); // 61200 is number of seconds from midnight
{
  ReefAngel.PWM.SetDaylight(30);
  ReefAngel.PWM.SetActinic(30)
    wpMode=5;
} 
else {
  ReefAngel.PWM.SetDaylight(100);
}

  if (ReefAngel.DisplayedMenu==WATERCHANGE_MODE)
  {
    if (WCstatus==-1) 
    {
      ReefAngel.Timer[1].Start();
      WCstatus=0;
    }
    if ( ReefAngel.Timer[1].IsTriggered() )
    {
      ReefAngel.Relay.On(WCEmpty);
      WCstatus=1;
    }
    if (ReefAngel.WaterLevel.GetLevel()<=15 && WCstatus>0 && WCstatus<10) WCstatus++;
    if (ReefAngel.WaterLevel.GetLevel()<=15 && WCstatus==10)
    {
      WCstatus=11;
      ReefAngel.Relay.Off(WCEmpty);
      ReefAngel.Relay.On(WCFill);
    }
    if (ReefAngel.WaterLevel.GetLevel()<=81 && WCstatus>10 && WCstatus<20) WCstatus++;
    if (ReefAngel.WaterLevel.GetLevel()>81 && WCstatus==20) 
    {
      ReefAngel.Relay.Off(WCFill);
      ButtonPress++;
    }
  }
  else 
  {
    WCstatus=-1;
    ReefAngel.Relay.Off(WCEmpty);
    ReefAngel.Relay.Off(WCFill); 
  } 
  ReefAngel.Portal("Drs1210");
  ReefAngel.ShowInterface(); // Display everything on the LCD screen
}
void CheckPower() {
  static boolean powerOutage=false;


  // Power Outage - turn off everything
  if (!ReefAngel.Relay.IsRelayPresent(EXP1_RELAY)) // Expansion Relay NOT present
  {
    powerOutage=true;
    ReefAngel.Relay.Off(KalkDoser); 
    ReefAngel.Relay.Off(WCEmpty); 
    ReefAngel.Relay.Off(Refugium); 
    ReefAngel.Relay.Off(KalkStirrer);
    ReefAngel.Relay.Off(WCFill);
    ReefAngel.Relay.Off(Heater);
    ReefAngel.Relay.Off(RODIValve); 
    ReefAngel.Relay.Off(Skimmer); 

  }

  // Power Restored - Turn things back on
  if (powerOutage && ReefAngel.Relay.IsRelayPresent(EXP1_RELAY))
  {
    LastStart=now();
    powerOutage=false;
    ReefAngel.Relay.On(Return); 
    ReefAngel.Relay.On(Skimmer); 

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

  ReefAngel.LCD.DrawDate(6, 3);
  ReefAngel.LCD.Clear(COLOR_BLACK, 1, 11, 132, 11);
  pingSerial();

  ReefAngel.LCD.DrawText(COLOR_BLACK,255,56,83, "Res");
  ReefAngel.LCD.DrawText(COLOR_GREEN,255, 45, 83, "H");
  ReefAngel.LCD.DrawText(COLOR_GREEN,255, 45, 91, "I");
  ReefAngel.LCD.DrawText(COLOR_RED,255, 77, 83, "L");
  ReefAngel.LCD.DrawText(COLOR_RED,255, 77, 91, "O");

  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 6, 75, "--------------------");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 6, 98, "--------------------");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 2, 78, "|");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 2, 86, "|");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 2, 95, "|");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 126, 78, "|");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 126, 86, "|");
  ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 126, 95, "|");

  ReefAngel.LCD.DrawText(0,255,10,30,"Tank");
  ConvertNumToString(text, ReefAngel.Params.Temp[T1_PROBE], 10);
  ReefAngel.LCD.DrawLargeText(COLOR_INDIANRED, 255, 10, 40, text, Num8x8);
  pingSerial();

  ReefAngel.LCD.DrawText(0,255,100,30,"pH");
  ConvertNumToString(text, ReefAngel.Params.PH, 100);
  ReefAngel.LCD.DrawLargeText(COLOR_PLUM, 255, 91, 40, text, Num8x8);
  pingSerial();

  ReefAngel.LCD.DrawText(0,255,43,48,"Salinity");
  ConvertNumToString(text, ReefAngel.Params.Salinity, 100);
  ReefAngel.LCD.DrawLargeText(COLOR_LIMEGREEN, 255, 49, 58, text, Num8x8);
  pingSerial();

  ReefAngel.LCD.DrawText(0,255,8,68,"WC");
  ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T3_PROBE], COLOR_CHOCOLATE, 25, 68, 10);
  pingSerial();

  ReefAngel.LCD.DrawText(0,255,66,68,"Room");
  ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T2_PROBE], COLOR_MEDIUMORCHID, 94, 68, 10);
  pingSerial();

  ReefAngel.LCD.DrawText(0,255,15,83,"WL");
  ConvertNumToString(text, ReefAngel.WaterLevel.GetLevel(),1);
  ReefAngel.LCD.DrawLargeText(COLOR_BLUE, 255, 10, 91, text, Num8x8);
  ReefAngel.LCD.DrawText(0,255,26,91," %");
  pingSerial();

  // WP40 Mode

  ReefAngel.LCD.DrawText(0,255,18,12,"Jebao WP40 Mode:");
  ReefAngel.LCD.Clear(COLOR_WHITE, 1, 21, 132, 21); 
  if (wpMode == 0) ReefAngel.LCD.DrawLargeText(COLOR_LIMEGREEN,255, 23, 21,"Tidal Swell");
  else if (wpMode == 1) ReefAngel.LCD.DrawLargeText(COLOR_MAGENTA,255, 25, 21,"Reef Crest");
  else if (wpMode == 2) ReefAngel.LCD.DrawLargeText(COLOR_GOLD,255, 8, 21,"Nutrient Trnsp.");
  else if (wpMode == 3) ReefAngel.LCD.DrawLargeText(COLOR_CORNFLOWERBLUE,255, 30, 21,"Else Mode");
  else if (wpMode == 4) ReefAngel.LCD.DrawLargeText(COLOR_RED,255, 30, 21,"Sine Mode");

  ReefAngel.LCD.DrawText(0,255,96,83,"WP40");
  ConvertNumToString(text, ReefAngel.PWM.GetActinicValue(),1);
  ReefAngel.LCD.DrawLargeText(COLOR_OLIVE, 255, 99, 91, text, Num8x8);
  ReefAngel.LCD.DrawText(0,255,115,91," %");
  pingSerial();

  // Main Relay box
  byte TempRelay = ReefAngel.Relay.RelayData;
  TempRelay &= ReefAngel.Relay.RelayMaskOff;
  TempRelay |= ReefAngel.Relay.RelayMaskOn;
  ReefAngel.LCD.DrawOutletBox(14, 106, TempRelay);
  pingSerial();

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

  if (ReefAngel.HighATO.IsActive())
    ReefAngel.LCD.FillCircle(57,94,3,COLOR_RED);
  else
    ReefAngel.LCD.FillCircle(57,94,3,COLOR_GREEN);

  if (ReefAngel.LowATO.IsActive())
    ReefAngel.LCD.FillCircle(70,94,3,COLOR_RED);
  else
    ReefAngel.LCD.FillCircle(70,94,3,COLOR_GREEN);

}
void DrawCustomGraph()
{
}

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;
  }
}
rimai
Posts: 12857
Joined: Fri Mar 18, 2011 6:47 pm

Re: Speedwave, wp40, and feed mode

Post by rimai »

The error should tell you exactly which line is the offending line.
It should also highlight the first one.
Just take a look at the error code and at the offending line.
Most are pretty easy to figure out.
The first error I got from your code is this "sketch_jul13a:161: error: expected `;' before 'wpMode'"
So, on line 161, it is saying that it was expecting a ; sign before the variable wpMode.
In your code, here is line 159,160 and 161:

Code: Select all

  ReefAngel.PWM.SetDaylight(30);
  ReefAngel.PWM.SetActinic(30)
    wpMode=5;
It is saying that you are missing a ; sign. Can you spot where the missing ; sing is supposed to be?
Roberto.
Drs1210

Re: Speedwave, wp40, and feed mode

Post by Drs1210 »

Yeah right after the ReefAngel.PWM.SetActinic(30)
Post Reply