Re: Wave patterns
Posted: Mon Jan 27, 2014 8:37 am
Great,
Appreciate your help.
Appreciate your help.
Community discussion about Reef Angel Controllers and reefing related subjects
https://forum.reefangel.com/
Code: Select all
if (hour()>=10 && hour()<20)
Code: Select all
if (now()%SECS_PER_DAY>=36000 && now()%SECS_PER_DAY<72000)
ReeferBee wrote:tomek77pl wrote:Hi Is it possible to have a both wave patters for one pump? I want it to run nutrition export for 2 hrs a day then go back into the reef crest mode. Is this possible? If yes how can this be done? Thanks
Yep you can. Which wave patterns are you trying to run, and at what times?
Here's an example. I have different modes run throughout the day.
Code: Select all
if (hour()>=8 && hour()<11) { vtechmode=6; ReefAngel.PWM.SetDaylight( TidalSwellMode(40,true) ); // Tidal Swell at 40% on sync mode ReefAngel.PWM.SetActinic( TidalSwellMode(40,false) ); // Tidal Swell at 40% on anti-sync mode } else if (hour()>=11 && hour()<12) { vtechmode=2; ReefAngel.PWM.SetDaylight( ReefCrestMode(50,20,true) ); // ReefCrest at 50% + - 20 on sync mode ReefAngel.PWM.SetActinic( ReefCrestMode(50,20,false) ); // ReefCrest at 50% + - 20 on anti-sync mode } else if (hour()>=12 && hour()<13) { vtechmode=0; ReefAngel.PWM.SetDaylight( millis()%1000>800?80:0); // WaveMode on sync mode ReefAngel.PWM.SetActinic( ElseMode(70,30,true) ); // ElseMode at 70 on anti-sync mode } else if (hour()>=13 && hour()<14) { vtechmode=2; ReefAngel.PWM.SetDaylight( ReefCrestMode(70,20,true) ); // ReefCrest at 70% + - 20 on sync mode ReefAngel.PWM.SetActinic( ReefCrestMode(70,20,false) ); // ReefCrest at 70% + - 20 on anti-sync mode } else if (hour()>=15 && hour()<18) { vtechmode=0; ReefAngel.PWM.SetDaylight( ElseMode(70,30,true) ); // Else on sync mode ReefAngel.PWM.SetActinic( millis()%1000>800?80:0); // Wave on anti-sync mode } else if (hour()>=18 && hour()<21) { vtechmode=5; ReefAngel.PWM.SetDaylight( NutrientTransportMode(77,90,3000,true) ); // Nutrient Transport on sync mode ReefAngel.PWM.SetActinic( NutrientTransportMode(77,90,3000,false) ); // Nutrient Transport on anti-sync mode } else if (hour()>=21 && hour()<24) { vtechmode=1; ReefAngel.PWM.SetDaylight( millis()%1000>800?70:0); // Wave on sync mode ReefAngel.PWM.SetActinic( ElseMode(70,30,true) ); // Else on anti-sync mode } else { vtechmode=4; ReefAngel.PWM.SetDaylight( LongPulseMode(40,40,10,true) ); // Long pulse at 40% with 10s pulse on syncy mode ReefAngel.PWM.SetActinic( LongPulseMode(40,40,10,false) ); // Long pulse at 40% with 10s pulse on on anti-sync mode } if (ReefAngel.DisplayedMenu==FEEDING_MODE) { ReefAngel.PWM.SetActinic(0); ReefAngel.PWM.SetDaylight(0); } if (ReefAngel.DisplayedMenu==WATERCHANGE_MODE) { ReefAngel.PWM.SetActinic(0); ReefAngel.PWM.SetDaylight(0); }
Code: Select all
int vtechmode;
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
ReefAngel.AddSalinityExpansion(); // Salinity Expansion Module
ReefAngel.AddWaterLevelExpansion(); // Water Level Expansion Module
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = Port1Bit | Port2Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port1Bit | Port2Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = 0;
// 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;
// Feeeding and Water Change mode speed
ReefAngel.DCPump.FeedingSpeed=0;
ReefAngel.DCPump.WaterChangeSpeed=0;
// Ports that are always on
ReefAngel.Relay.On( Port1 );
ReefAngel.Relay.On( Port4 );
ReefAngel.Relay.On( Port6 );
ReefAngel.Relay.On( Port7 );
ReefAngel.Relay.On( Port8 );
ReefAngel.Relay.On( Box1_Port1 );
////// Place additional initialization code below here
////// Place additional initialization code above here
}
void loop()
{
ReefAngel.Relay.DelayedOn( Port2 );
ReefAngel.StandardHeater( Port3 );
ReefAngel.Wavemaker1( Port5 );
ReefAngel.StandardATO( Box1_Port2 );
ReefAngel.CO2Control( Box1_Port3 );
ReefAngel.PHControl( Box1_Port4 );
ReefAngel.PWM.Channel0PWMSlope();
ReefAngel.PWM.Channel1PWMSlope();
ReefAngel.PWM.Channel2PWMSlope();
ReefAngel.PWM.Channel3PWMSlope();
ReefAngel.DCPump.UseMemory = true;
ReefAngel.DCPump.DaylightChannel = Sync;
ReefAngel.DCPump.ActinicChannel = None;
ReefAngel.DCPump.ExpansionChannel[0] = None;
ReefAngel.DCPump.ExpansionChannel[1] = None;
ReefAngel.DCPump.ExpansionChannel[2] = None;
ReefAngel.DCPump.ExpansionChannel[3] = None;
ReefAngel.DCPump.ExpansionChannel[4] = None;
ReefAngel.DCPump.ExpansionChannel[5] = None;
////// Place your custom code below here
if (hour()>=8 && hour()<11)
{
vtechmode=6;
ReefAngel.PWM.SetDaylight( TidalSwellMode(40,true) ); // Tidal Swell at 40% on sync mode
}
else if (hour()>=11 && hour()<12)
{
vtechmode=2;
ReefAngel.PWM.SetDaylight( ReefCrestMode(50,20,true) ); // ReefCrest at 50% + - 20 on sync mode
}
else if (hour()>=12 && hour()<13)
{
vtechmode=0;
ReefAngel.PWM.SetDaylight( millis()%1000>800?80:0); // WaveMode on sync mode
}
else if (hour()>=13 && hour()<14)
{
vtechmode=2;
ReefAngel.PWM.SetDaylight( ReefCrestMode(70,20,true) ); // ReefCrest at 70% + - 20 on sync mode
}
else if (hour()>=15 && hour()<18)
{
vtechmode=0;
ReefAngel.PWM.SetDaylight( ElseMode(70,30,true) ); // Else on sync mode
}
else if (hour()>=18 && hour()<21)
{
vtechmode=5;
ReefAngel.PWM.SetDaylight( NutrientTransportMode(77,90,3000,true) ); // Nutrient Transport on sync mode
}
else if (hour()>=21 && hour()<24)
{
vtechmode=1;
ReefAngel.PWM.SetDaylight( millis()%1000>800?70:0); // Wave on sync mode
}
else
{
vtechmode=4;
ReefAngel.PWM.SetDaylight( LongPulseMode(40,40,10,true) ); // Long pulse at 40% with 10s pulse on syncy mode
}
if (ReefAngel.DisplayedMenu==FEEDING_MODE)
{
ReefAngel.PWM.SetDaylight(0);
}
if (ReefAngel.DisplayedMenu==WATERCHANGE_MODE)
{
ReefAngel.PWM.SetDaylight(0);
}
////// Place your custom code above here
// This should always be the last line
ReefAngel.Portal( "ademster" );
ReefAngel.ShowInterface();
}
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
ReefAngel.AddSalinityExpansion(); // Salinity Expansion Module
ReefAngel.AddWaterLevelExpansion(); // Water Level Expansion Module
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = Port1Bit | Port2Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port1Bit | Port2Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = 0;
// 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;
// Feeding and Water Change mode speed
ReefAngel.DCPump.FeedingSpeed=0;
ReefAngel.DCPump.WaterChangeSpeed=0;
// Ports that are always on
ReefAngel.Relay.On( Port1 );
ReefAngel.Relay.On( Port4 );
ReefAngel.Relay.On( Port6 );
ReefAngel.Relay.On( Port7 );
ReefAngel.Relay.On( Port8 );
ReefAngel.Relay.On( Box1_Port1 );
////// Place additional initialization code below here
////// Place additional initialization code above here
}
void loop() {
ReefAngel.Relay.DelayedOn( Port2 );
ReefAngel.StandardHeater( Port3 );
ReefAngel.Wavemaker1( Port5 );
ReefAngel.StandardATO( Box1_Port2 );
ReefAngel.CO2Control( Box1_Port3 );
ReefAngel.PHControl( Box1_Port4 );
ReefAngel.PWM.Channel0PWMSlope();
ReefAngel.PWM.Channel1PWMSlope();
ReefAngel.PWM.Channel2PWMSlope();
ReefAngel.PWM.Channel3PWMSlope();
ReefAngel.DCPump.UseMemory = true;
ReefAngel.DCPump.DaylightChannel = Sync;
ReefAngel.DCPump.ActinicChannel = None;
ReefAngel.DCPump.ExpansionChannel[0] = None;
ReefAngel.DCPump.ExpansionChannel[1] = None;
ReefAngel.DCPump.ExpansionChannel[2] = None;
ReefAngel.DCPump.ExpansionChannel[3] = None;
ReefAngel.DCPump.ExpansionChannel[4] = None;
ReefAngel.DCPump.ExpansionChannel[5] = None;
////// Place your custom code below here
if (hour()>=8 && hour()<11) {
ReefAngel.PWM.SetDaylight( TidalSwellMode(40,true) ); // Tidal Swell at 40% on sync mode
}
else if (hour()>=11 && hour()<12) {
ReefAngel.PWM.SetDaylight( ReefCrestMode(50,20,true) ); // ReefCrest at 50% + - 20 on sync mode
}
else if (hour()>=12 && hour()<13) {
ReefAngel.PWM.SetDaylight( millis()%1000>800?80:0); // WaveMode on sync mode
}
else if (hour()>=13 && hour()<14) {
ReefAngel.PWM.SetDaylight( ReefCrestMode(70,20,true) ); // ReefCrest at 70% + - 20 on sync mode
}
else if (hour()>=15 && hour()<18) {
ReefAngel.PWM.SetDaylight( ElseMode(70,30,true) ); // Else on sync mode
}
else if (hour()>=18 && hour()<21) {
ReefAngel.PWM.SetDaylight( NutrientTransportMode(77,90,3000,true) ); // Nutrient Transport on sync mode
}
else if (hour()>=21 && hour()<24) {
ReefAngel.PWM.SetDaylight( millis()%1000>800?70:0); // Wave on sync mode
}
else {
ReefAngel.PWM.SetDaylight( LongPulseMode(40,40,10,true) ); // Long pulse at 40% with 10s pulse on sync mode
}
if (ReefAngel.DisplayedMenu==FEEDING_MODE) {
ReefAngel.PWM.SetDaylight(0);
}
if (ReefAngel.DisplayedMenu==WATERCHANGE_MODE) {
ReefAngel.PWM.SetDaylight(0);
}
////// Place your custom code above here
// This should always be the last line
ReefAngel.Portal("ademster");
ReefAngel.ShowInterface();
}
Code: Select all
if (PulseSync)
{
if (speed <= 15)
{
return = 0;
}
else if ((speed > 15) && (speed < 30))
{
return 30;
}
else
{
return speed;
}
}
else
{
if (anti_speed <= 15)
{
return = 0;
}
else if ((anti_speed > 15) && (anti_speed < 30))
{
return 30;
}
else
{
return anti_speed;
}
Take a look at the code in my signature.Ademster wrote:how do I code all of the different pump options to cycle randomly. but also during feed mode to drop to 15 % .
running a wp-25 will be connected to the relay box dimming port.
Thanks for the information. Yeah, I figured they would be too high and would need to be turned down. I was thinking, incorrectly it sounds like, that I could just power them down then reuse in a larger tank later. From what you are saying in regards to their power two 40's it is. Plus I will save a few bucks to spend on the cables.Sacohen wrote:I have not seen the RW series personally, but I believe it is the same connection as the WP pumps.
Yes 1 cable per power head without some modifications.
2 60's in a 40 gallon is way to much power.
Go with 2 40's.
I actually had a 40 and 25 running in my 55 gallon and even then they were at 50% speed.
Nope, you explained it perfectly and I'll be ordering two cablesSacohen wrote:Personally it think the 60's even powered down will be to strong for a 40 gallon.
The Jebao WP pumps had an issue that they would lock up if they went below a certain percentage.
With the WP-40's it seemed to be 30% and with the WP 25's it seemed to be 25% (or I have that reversed).
Maybe I misunderstood you or you misunderstood me. but you need 1 Jebao cable for each of the pumps.
It may be able to be done with 1 cable, but you would have to modify the cable quite a bit and it wouldn't be worth it.