Icecap Module


Posts: 250
Joined: Wed Jan 28, 2015 5:17 pm
PostPosted: Sat Mar 05, 2016 5:54 pm
Here is my latest 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 <Tide.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 <PAR.h>
#include <ReefAngel.h>



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


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

Tide tide;

void setup()
{
  // This must be the first line
  ReefAngel.Init();  //Initialize controller
  ReefAngel.Use2014Screen();  // Let's use 2014 Screen
  ReefAngel.DDNS("Damien");
  ReefAngel.AddMultiChannelWaterLevelExpansion();  // Multi-Channel Water Level Expanion Module
  // Ports toggled in Feeding Mode
  ReefAngel.FeedingModePorts = Port1Bit | Port6Bit;
  // Ports toggled in Water Change Mode
  ReefAngel.WaterChangePorts = Port1Bit | Port2Bit | Port3Bit | Port4Bit | Port6Bit | Port7Bit | Port8Bit;
  // Ports toggled when Lights On / Off menu entry selected
  ReefAngel.LightsOnPorts = Port5Bit;
  // Ports turned off when Overheat temperature exceeded
  ReefAngel.OverheatShutoffPorts = Port3Bit;
  // Use T1 probe as temperature and overheat functions
  ReefAngel.TempProbe = T1_PROBE;
  ReefAngel.OverheatProbe = T1_PROBE;
  ReefAngel.Relay.Set(Port8, now()%6*SECS_PER_HOUR<30*SECS_PER_MIN);
  // Set the Overheat temperature setting
  InternalMemory.OverheatTemp_write( 800 );
  InternalMemory.WaterLevelMax_write(1800);       


  // Feeeding and Water Change mode speed


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

  tide.Init(55,10,30);
  tide.SetWaveLength(12+SECS_PER_HOUR);
  ////// Place additional initialization code below here


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

void loop()
{
  ReefAngel.StandardHeater( Port3,780,785 );
  ReefAngel.WaterLevelATO(4,Port4,240,28,31);



  ////// Place your custom code below here

  if (ReefAngel.WaterLevel.GetLevel(1)<5) //Disable the port until overriden manually
    ReefAngel.Relay.Override(Port8,0);    //Saltwater Reservoir
  if (ReefAngel.WaterLevel.GetLevel(1)>80)   // Set port back to auto
    ReefAngel.Relay.Override(Port8,2);

  if (ReefAngel.WaterLevel.GetLevel(2)>80) //Overflow
    ReefAngel.Relay.Off(Port1);
  else
    ReefAngel.Relay.On(Port1);

  if (ReefAngel.WaterLevel.GetLevel(3)>87) //ATO Reservoir
    ReefAngel.Relay.Off(Port5);
  if (ReefAngel.WaterLevel.GetLevel(3)<1)
    ReefAngel.Relay.On(Port5);

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

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



byte setMaxspect(byte minSpeed, byte maxSpeed, boolean PulseSync)
{
  int reverse_speed=0;
  int forward_speed=45;
 
   // swap between forward and reverse every X seconds
   reverse_speed = ShortPulseMode(0,100,ReefAngel.DCPump.Duration*2,true);
   if (reverse_speed == 100) {
     //
     // while we are going in reverse increase the speed by 10
     forward_speed = ShortPulseMode(35+10, 60+10,ReefAngel.DCPump.Duration,true);
   } else {
     //
     // while we are going forward set speed to 25-40 to keep
     // from blowing corals off the rocks
     forward_speed = ShortPulseMode(35,70, ReefAngel.DCPump.Duration, true);
  }

  if (PulseSync) {
    return forward_speed;
  } else {
    return reverse_speed;
  }
}
Image
User avatar
Posts: 5337
Joined: Fri Jul 20, 2012 9:42 am
PostPosted: Sun Mar 06, 2016 12:54 pm
You added the function but you have to call it. Same with the tide you set. We have to tie them together now.

You need to add the following now to set your dimming channels.

I need to be on the computer to give you the right code. I also made some mistakes that I need to fix in the setMaspect function.

Posts: 250
Joined: Wed Jan 28, 2015 5:17 pm
PostPosted: Tue Mar 08, 2016 1:58 pm
I bought a stereo audio cable for forward and reverse. How many wires should be in it? I cut the end off and there are three, a red, blue and white.
Image
User avatar
Posts: 5337
Joined: Fri Jul 20, 2012 9:42 am
PostPosted: Tue Mar 08, 2016 6:02 pm
One should be ground and the other two would be for your two signals. If you are wiring to the dimming leads you'll share the ground.

Posts: 250
Joined: Wed Jan 28, 2015 5:17 pm
PostPosted: Tue Mar 08, 2016 6:28 pm
lnevo wrote:You added the function but you have to call it. Same with the tide you set. We have to tie them together now.

You need to add the following now to set your dimming channels.

I need to be on the computer to give you the right code. I also made some mistakes that I need to fix in the setMaspect function.


Did you ever get a chance to look into this more?
Image
User avatar
Posts: 5337
Joined: Fri Jul 20, 2012 9:42 am
PostPosted: Tue Mar 08, 2016 7:30 pm
No, i got swamped this weeken. I'll probably have a chance friday if you can hang in...

Posts: 250
Joined: Wed Jan 28, 2015 5:17 pm
PostPosted: Wed Mar 09, 2016 1:44 am
No problem
Image
User avatar
Posts: 5337
Joined: Fri Jul 20, 2012 9:42 am
PostPosted: Sun Mar 20, 2016 7:44 am
Ok, this should do it. I've set the min speed to 1/2 the Tidal speed and used the Tidal speed as the max speed. As discussed the tidal speed will vary +/- depending on the range you gave which means 55 (+/-5 during quarter moons and half moon, versus +/-15 during newmoon and full moon) It will also vary throughout the day based on the wavelength you have set.. which is currently 72 minutes... tide.SetWaveLength(12+SECS_PER_HOUR); The default is 12 hours which would be 12*SECS_PER_HOUR. Anyway below is the code that will set the Actinic/Daylight to the value of the the setMaxspect function using the tide class as an input. I also included the change I made in your RO/Valve post

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 <Tide.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 <PAR.h>
#include <ReefAngel.h>



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


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

Tide tide;

void setup()
{
  // This must be the first line
  ReefAngel.Init();  //Initialize controller
  ReefAngel.Use2014Screen();  // Let's use 2014 Screen
  ReefAngel.DDNS("Damien");
  ReefAngel.AddMultiChannelWaterLevelExpansion();  // Multi-Channel Water Level Expanion Module
  // Ports toggled in Feeding Mode
  ReefAngel.FeedingModePorts = Port1Bit | Port6Bit;
  // Ports toggled in Water Change Mode
  ReefAngel.WaterChangePorts = Port1Bit | Port2Bit | Port3Bit | Port4Bit | Port6Bit | Port7Bit | Port8Bit;
  // Ports toggled when Lights On / Off menu entry selected
  ReefAngel.LightsOnPorts = Port5Bit;
  // Ports turned off when Overheat temperature exceeded
  ReefAngel.OverheatShutoffPorts = Port3Bit;
  // Use T1 probe as temperature and overheat functions
  ReefAngel.TempProbe = T1_PROBE;
  ReefAngel.OverheatProbe = T1_PROBE;
  // Set the Overheat temperature setting
  InternalMemory.OverheatTemp_write( 800 );
  InternalMemory.WaterLevelMax_write(1800);       


  // Feeeding and Water Change mode speed


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

  tide.Init(55,10,30);
  tide.SetWaveLength(12+SECS_PER_HOUR);
  ////// Place additional initialization code below here


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

void loop()
{
  ReefAngel.StandardHeater( Port3,780,785 );
  ReefAngel.WaterLevelATO(4,Port4,240,28,31);
  ReefAngel.Relay.Set(Port8, (now()%(6*SECS_PER_HOUR))<(30*SECS_PER_MIN));

  ////// Place your custom code below here

  if (ReefAngel.WaterLevel.GetLevel(1)<5) //Disable the port until overriden manually
    ReefAngel.Relay.Override(Port8,0);    //Saltwater Reservoir
  if (ReefAngel.WaterLevel.GetLevel(1)>80)   // Set port back to auto
    ReefAngel.Relay.Override(Port8,2);

  if (ReefAngel.WaterLevel.GetLevel(2)>80) //Overflow
    ReefAngel.Relay.Off(Port1);
  else
    ReefAngel.Relay.On(Port1);

  ReefAngel.Relay.Off(Port5); // Set Default to off
  if (ReefAngel.WaterLevel.GetLevel(3)>87) //ATO Reservoir
    ReefAngel.Relay.Off(Port5);
  if (ReefAngel.WaterLevel.GetLevel(3)<1)
    ReefAngel.Relay.On(Port5);

  ////// Place your custom code above here
  ReefAngel.PWM.SetDaylight(setMaxspect(tide.GetSpeed(),tide.GetSpeed()/2,true)); // Set the Speed
  ReefAngel.PWM.SetActinic(setMaxspect(tide.GetSpeed(),tide.GetSpeed()/2,false)); // Set the direction - speeds here are irrelevant actually.

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



byte setMaxspect(byte minSpeed, byte maxSpeed, boolean PulseSync)
{
  int reverse_speed=0;
  int forward_speed=45;
 
   // swap between forward and reverse every X seconds
   reverse_speed = ShortPulseMode(0,100,ReefAngel.DCPump.Duration*2,true);
   if (reverse_speed == 100) {
     //
     // while we are going in reverse increase the speed by 10
     forward_speed = ShortPulseMode(minSpeed+10, maxSpeed+10,ReefAngel.DCPump.Duration,true);
   } else {
     //
     // while we are going forward set speed to 25-40 to keep
     // from blowing corals off the rocks
     forward_speed = ShortPulseMode(minSpeed,maxSpeed, ReefAngel.DCPump.Duration, true);
  }

  if (PulseSync) {
    return forward_speed;
  } else {
    return reverse_speed;
  }
}

Posts: 250
Joined: Wed Jan 28, 2015 5:17 pm
PostPosted: Sun Mar 20, 2016 10:59 am
Thanks for taking the time and correcting my code. I appreciate it.
Image

Posts: 102
Joined: Wed Nov 18, 2015 9:16 pm
PostPosted: Fri Feb 10, 2017 12:42 pm
I know this is an old thread. But I wanted to check before moving forward. Icecap just came out with their gyre pump as a license off maxspect. If i get their gyre pump and the ice cap module will this work with the DC pump codes? i current have two jeabo but would like to swap out to two opposing gyres. I have the jebaos set up to randomly select the wave pattern for the day. would this still be relevant for the gyre control? along with feed mode?
PreviousNext

Return to Ask anything here

Who is online

Users browsing this forum: No registered users and 4 guests

cron