Reefology's code
Re: Reefology's code
I tried the following in the custom code section instead and it worked:
// kalk reactor
if ( hour(now()) >= 17 && hour(now()) <= 23 ) ReefAngel.Relay.Off( Port7 ); //kalk dosing off 5pm-11pm
else ReefAngel.DosingPumpRepeat2( Port7 );
// kalk reactor
if ( hour(now()) >= 17 && hour(now()) <= 23 ) ReefAngel.Relay.Off( Port7 ); //kalk dosing off 5pm-11pm
else ReefAngel.DosingPumpRepeat2( Port7 );
Re: Reefology's 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 <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
void SeasonalTemps ()
{
static int heatArray[][2] = { {780,784},// default in case of error in month=0 (May)
{764,768},//January (winter)
{768,772},//February (winter)
{772,776},//March (early spring)
{776,780},//April (spring)
{780,784},//May (spring)
{784,788},//June (early summer)
{788,792},//July (summer)
{784,788},//August (summer)
{780,784},//September (early fall)
{776,780},//October (fall)
{772,776},//November (fall)
{768,772} };//December (early winter)
ReefAngel.StandardHeater( Port1,heatArray[month()][0],heatArray[month()][1]);
}//end seasonalTemps
////// 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
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = Port5Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port1Bit | Port3Bit | Port5Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = Port1Bit | Port2Bit;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port1Bit | Port3Bit | Port4Bit;
// 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( Port2 );
ReefAngel.Relay.On( Port5 );
////// Place additional initialization code below here
////// Place additional initialization code above here
}
void loop()
{
SeasonalTemps();
ReefAngel.ActinicLights( Port3 ); //Skimmer
ReefAngel.DayLights( Port4 ); //ATS light
ReefAngel.DosingPumpRepeat1( Port6 );
//ReefAngel.DosingPumpRepeat2( Port7 );
ReefAngel.DosingPumpRepeat3( Port8 );
ReefAngel.PWM.DaylightPWMParabola();
ReefAngel.PWM.ActinicPWMParabola();
ReefAngel.DCPump.UseMemory = true;
ReefAngel.DCPump.LowATOChannel = Sync; // SW 8
ReefAngel.DCPump.HighATOChannel = AntiSync; // SW 8
//ReefAngel.DCPump.AntiSyncOffset = 125; // % (0-255) of main pump (Sync)
////// Place your custom code below here
// koralia 1150
// if (hour()>=23 || hour()<11) ReefAngel.Relay.Off( Port5 );
// else ReefAngel.WavemakerRandom( Port5, 120, 1800 );
// kalk reactor
if ( hour(now()) >= 17 && hour(now()) <= 23 ) ReefAngel.Relay.Off( Port7 ); //kalk dosing off 5pm-11pm
else ReefAngel.DosingPumpRepeat2( Port7 );
// DC pumps
// To run this code must choose Custom in portal
static int rmode;
static boolean changeMode=true;
// These are the modes we can cycle through. You can add more and even repeat...
byte modes[] = { ReefCrest, Lagoon, TidalSwell, ShortPulse, Sine, LongPulse, Else, Gyre, NutrientTransport };
if (now()%3600==0 || changeMode==true) { // Change every 60 mins (3600seconds) or controller reboot
rmode=random(100)%sizeof(modes); // Change the mode by picking from our array
changeMode=false;
}
// Set timer when in feeding mode
static unsigned long feeding;
if (ReefAngel.DisplayedMenu==FEEDING_MODE) feeding=now();
// Continue NutrientTranspot Mode for 30 minutes after feeding
if (now()-feeding<1800) {
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=Else;
ReefAngel.DCPump.Speed=80;
// Night mode (go to 30%)
} else if (now()%SECS_PER_DAY<39600 || now()%SECS_PER_DAY>=82800) { // 11pm to 11am
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=Gyre;
ReefAngel.DCPump.Speed=40;
} else if (InternalMemory.DCPumpMode_read()==11) {
// Custom Mode and nothing else going on
ReefAngel.DCPump.UseMemory=false;
ReefAngel.DCPump.Duration=InternalMemory.DCPumpDuration_read();
ReefAngel.DCPump.Mode=modes[rmode]; // Put the mode to the random mode :)
ReefAngel.DCPump.Speed=InternalMemory.DCPumpSpeed_read(); // Set speed from portal
} else {
ReefAngel.DCPump.UseMemory=true; // Will reset all values from memory
}
////// Place your custom code above here
Re: Reefology's code
hey Roberto, wondering if this would work to turn off kalk reactor according to ph?
ReefAngel.PHControl( Port7 );
add this to the loop section and use it with the above code?
thanks
ReefAngel.PHControl( Port7 );
add this to the loop section and use it with the above code?
thanks
Re: Reefology's code
note to self: add something like this for my fish room fan.
if (ReefAngel.Params.Temp[T3_PROBE] >= 825) ReefAngel.Relay.On(Port6);
if (ReefAngel.Params.Temp[T3_PROBE] <= 805) ReefAngel.Relay.Off(Port6);
if (ReefAngel.Params.Temp[T3_PROBE] >= 825) ReefAngel.Relay.On(Port6);
if (ReefAngel.Params.Temp[T3_PROBE] <= 805) ReefAngel.Relay.Off(Port6);
Re: Reefology's code
My First RA* ino
Tested for a day and have since added;
1. 2nd relay box (original RA+ box) via the relay expansion.
2. calcium reactor (formally controlled via smart bar)
3. Ozone (formally controlled via smart bar)
4. extra temp probes
Code: Select all
#include <Salinity.h>
#include <ReefAngel_Features.h>
#include <Globals.h>
#include <RA_TS.h>
#include <RA_TouchLCD.h>
#include <RA_TFT.h>
#include <RA_TS.h>
#include <Font.h>
#include <RA_Wifi.h>
#include <RA_Wiznet5100.h>
#include <SD.h>
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetDHCP.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <OneWire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <InternalEEPROM.h>
#include <RA_ATO.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 <RA_CustomLabels.h>
#include <RF.h>
#include <IO.h>
#include <ORP.h>
#include <AI.h>
#include <PH.h>
#include <WaterLevel.h>
#include <Humidity.h>
#include <PAR.h>
#include <DCPump.h>
#include <ReefAngel.h>
#include <SoftwareSerial.h>
////// Place global variable code below here
void SeasonalTemps ()
{
static int heatArray[][2] = { {778,784},// default in case of error in month=0 (May)
{762,768},//January (winter)
{766,772},//February (winter)
{770,776},//March (early spring)
{774,780},//April (spring)
{778,784},//May (spring)
{782,788},//June (early summer)
{786,792},//July (summer)
{782,788},//August (summer)
{778,784},//September (early fall)
{772,780},//October (fall)
{770,776},//November (fall)
{766,772} };//December (early winter)
ReefAngel.StandardHeater( Box1_Port1,heatArray[month()][0],heatArray[month()][1]);
}//end seasonalTemps
////// Place global variable code above here
void setup()
{
// This must be the first line
ReefAngel.Init(); //Initialize controller
ReefAngel.Star();
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = 0;
ReefAngel.FeedingModePortsE[0] = Port2Bit;
ReefAngel.FeedingModePortsE[1] = 0;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = 0;
ReefAngel.WaterChangePortsE[0] = Port2Bit;
ReefAngel.WaterChangePortsE[1] = 0;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = 0;
ReefAngel.OverheatShutoffPortsE[0] = Port1Bit | Port3Bit | Port4Bit | Port5Bit;
ReefAngel.OverheatShutoffPortsE[1] = 0;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = 0;
ReefAngel.LightsOnPortsE[0] = Port3Bit;
ReefAngel.LightsOnPortsE[1] = 0;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Set the Overheat temperature setting
InternalMemory.OverheatTemp_write( 820 );
// Ports that default on
ReefAngel.Relay.On( Box1_Port8 );// Return
////// Place additional initialization code below here
////// Place additional initialization code above here
}
void loop()
{
SeasonalTemps();
ReefAngel.ActinicLights( Box1_Port3 ); // Royal blue led strip
ReefAngel.DayLights( Box1_Port4 ); // T5's
ReefAngel.StandardLights( Box1_Port5,23,0,9,0 ); //Sump light
ReefAngel.StandardFan( Box1_Port6 ); // Hood Fan
ReefAngel.StandardLights( Box1_Port7 ); //Radions
boolean buzzer=false;
if ( buzzer ) ReefAngel.BuzzerOn(2); else ReefAngel.BuzzerOff();
////// Place your custom code below here
// Skimmer
if ((ReefAngel.HighATO.IsActive()) || (hour()>=9 && hour()<=19)) ReefAngel.Relay.Off( Box1_Port2); // Turns off when collection container is full or from 9am-7pm
else ReefAngel.Relay.DelayedOn( Box1_Port2,5); //delay start 5 mins
////// Place your custom code above here
ReefAngel.Network.Cloud();
// This should always be the last line
ReefAngel.ShowTouchInterface();
}
1. 2nd relay box (original RA+ box) via the relay expansion.
2. calcium reactor (formally controlled via smart bar)
3. Ozone (formally controlled via smart bar)
4. extra temp probes
Re: Reefology's code
Last night I added this to shut down skimmer if return pump shuts down.
I also define my relay ports by name, but have commented them out until I double check everything.
As well, trying to set up triggers using virtual relays, but am not having much luck. I tried this which reboots my RA*
Then I tried to simplify with this:
...same result.
According to the coding assistant in the webwizard, the delay function is the issue but not sure how to fix this?
If anyone has a work around, would love to hear it.
Code: Select all
// turn off skimmer if return pump is off
if (!ReefAngel.Relay.Status(Box1_Port8)) ReefAngel.Relay.Override(Box1_Port2,0); // Turn off skimmer
As well, trying to set up triggers using virtual relays, but am not having much luck. I tried this which reboots my RA*
Code: Select all
// Virtual relay to purge Co2 from calcium reactor
if (ReefAngel.Relay.Status(Box3_Port1)) {
// Turn off Co2 and recirculation pump
ReefAngel.Relay.Off(Box2_Port2);
ReefAngel.Relay.Off(Box2_Port3);
// Delay for 2 minutes
delay(120000); // 120000 milliseconds = 2 minutes
// Turn on feed pump for 10 minutes
ReefAngel.Relay.On(Box2_Port1);
delay(600000); // 600000 milliseconds = 10 minutes
// Turn off Box3_Port1
ReefAngel.Relay.Off(Box3_Port1);
}
Code: Select all
// Virtual relay test
if (ReefAngel.Relay.Status(Box3_Port8)) {
// Turn on fan
ReefAngel.Relay.On(Box1_Port6);
// Delay for 2 minutes
delay(30000); // 30000 milliseconds = 30 seconds
// Turn off Virtual switch
ReefAngel.Relay.Off(Box3_Port8);
}
According to the coding assistant in the webwizard, the delay function is the issue but not sure how to fix this?
If anyone has a work around, would love to hear it.
Re: Reefology's code
You typically don't want to use delays in codes as it will halt all other code below the delay statements. You can use the millis() instead to keep track of the time passed and execute lines bases on the time passed. Here is an example below
Place in global Variables
Place in Void Loop
Place in global Variables
Code: Select all
enum State {
IDLE,
TURN_OFF_CO2_AND_PUMP,
WAIT_TO_FEED_PUMP,
TURN_ON_FEED_PUMP,
WAIT_TO_TURN_OFF_FEED_PUMP,
COMPLETE_CYCLE
};
State currentState = IDLE; // Initial state
unsigned long lastUpdateTime = 0; // Last update time
Code: Select all
unsigned long currentMillis = millis();
// Check if the condition to start the sequence is true
if (ReefAngel.Relay.Status(Box3_Port1) && currentState == IDLE) {
currentState = TURN_OFF_CO2_AND_PUMP;
}
switch (currentState) {
case TURN_OFF_CO2_AND_PUMP:
// Turn off CO2 and recirculation pump
ReefAngel.Relay.Off(Box2_Port2);
ReefAngel.Relay.Off(Box2_Port3);
lastUpdateTime = currentMillis; // Reset the timer
currentState = WAIT_TO_FEED_PUMP;
break;
case WAIT_TO_FEED_PUMP:
// Wait for 2 minutes before turning on the feed pump
if (currentMillis - lastUpdateTime >= 120000) { // 120000 milliseconds = 2 minutes
currentState = TURN_ON_FEED_PUMP;
}
break;
case TURN_ON_FEED_PUMP:
// Turn on the feed pump
ReefAngel.Relay.On(Box2_Port1);
lastUpdateTime = currentMillis; // Reset the timer
currentState = WAIT_TO_TURN_OFF_FEED_PUMP;
break;
case WAIT_TO_TURN_OFF_FEED_PUMP:
// Wait for 10 minutes before turning off the feed pump
if (currentMillis - lastUpdateTime >= 600000) { // 600000 milliseconds = 10 minutes
currentState = COMPLETE_CYCLE;
}
break;
case COMPLETE_CYCLE:
// Turn off Box3_Port1
ReefAngel.Relay.Off(Box3_Port1);
currentState = IDLE; // Reset the state to IDLE
break;
case IDLE:
// Do nothing or handle other tasks
break;
}
Sincerely, Brennyn
Re: Reefology's code
Thanks Brennyn, I'll give that a try later and let you know how it went.
I also tried the code below. And though it didn't reboot, it simply shut off the relays and nothing else
I also tried the code below. And though it didn't reboot, it simply shut off the relays and nothing else
Code: Select all
//Virtual relay to purge Co2 from calcium reactor
unsigned long startTime = 0;
unsigned long delayDuration = 0;
int state = 0;
// Check if co2purge is on
if (ReefAngel.Relay.Status(co2purge)) {
switch (state) {
case 0:
// Turn off Co2, feed pump and recirculation pump
ReefAngel.Relay.Off(co2);
ReefAngel.Relay.Off(cafeed);
ReefAngel.Relay.Off(carecirc);
startTime = millis();
delayDuration = 60000; // 1 minute
state = 1;
break;
case 1:
// Check if 2 minutes delay has passed
if (millis() - startTime >= delayDuration) {
// Turn on feed pump for 10 minutes
ReefAngel.Relay.On(cafeed);
startTime = millis();
delayDuration = 600000; // 10 minutes
state = 2;
}
break;
case 2:
// Check if 10 minutes delay has passed
if (millis() - startTime >= delayDuration) {
// Turn off Box3_Port1
ReefAngel.Relay.Off(co2purge);
state = 0;
}
break;
}
}
Re: Reefology's code
Unfortunately nothing happens.
Heres the code I tried. Maybe you'll see something I don't. Thanks
Heres the code I tried. Maybe you'll see something I don't. Thanks
Code: Select all
#include <Salinity.h>
#include <ReefAngel_Features.h>
#include <Globals.h>
#include <RA_TS.h>
#include <RA_TouchLCD.h>
#include <RA_TFT.h>
#include <RA_TS.h>
#include <Font.h>
#include <RA_Wifi.h>
#include <RA_Wiznet5100.h>
#include <SD.h>
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetDHCP.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <OneWire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <InternalEEPROM.h>
#include <RA_ATO.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 <RA_CustomLabels.h>
#include <RF.h>
#include <IO.h>
#include <ORP.h>
#include <AI.h>
#include <PH.h>
#include <WaterLevel.h>
#include <Humidity.h>
#include <PAR.h>
#include <DCPump.h>
#include <ReefAngel.h>
#include <SoftwareSerial.h>
// Define Relay Ports by Name
#define heaters Box1_Port1
#define skimmer Box1_Port2
#define actinics Box1_Port3
#define t5 Box1_Port4
#define sumplight Box1_Port5
#define fan Box1_Port6
#define radions Box1_Port7
#define return Box1_Port8
#define cafeed Box2_Port1 // CaRx Feed Pump
#define co2 Box2_Port2 // Co2 Solenoid
#define carecirc Box2_Port3 // CaRx Recirculation Pump
#define dosing1 Box2_Port4
#define ozone Box2_Port5
#define dosing2 Box2_Port6
#define powerheads Box2_Port7
#define dosing3 Box2_Port8
// Virtual Relays
#define co2purge Box3_Port1
////// Place global variable code below here
void SeasonalTemps ()
{
static int heatArray[][2] = { {778,784},// default in case of error in month=0 (May)
{762,768},//January (winter)
{766,772},//February (winter)
{770,776},//March (early spring)
{774,780},//April (spring)
{778,784},//May (spring)
{782,788},//June (early summer)
{786,792},//July (summer)
{782,788},//August (summer)
{778,784},//September (early fall)
{772,780},//October (fall)
{770,776},//November (fall)
{766,772} };//December (early winter)
ReefAngel.StandardHeater( heaters,heatArray[month()][0],heatArray[month()][1]);
}//end seasonalTemps
//co2purge
enum State {
IDLE,
TURN_OFF_CO2_AND_PUMPS,
WAIT_TO_FEED_PUMP,
TURN_ON_FEED_PUMP,
WAIT_TO_TURN_OFF_FEED_PUMP,
COMPLETE_CYCLE
};
State currentState = IDLE; // Initial state
unsigned long lastUpdateTime = 0; // Last update time
//end co2purge
////// Place global variable code above here
void setup()
{
// This must be the first line
ReefAngel.Init(); //Initialize controller
ReefAngel.Star();
ReefAngel.AddExtraTempProbes(); // Adds 3 More Temp Probes
ReefAngel.AddHumidityExpansion(); // Humidity Expansion
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = 0;
ReefAngel.FeedingModePortsE[0] = Port8Bit;
ReefAngel.FeedingModePortsE[1] = Port7Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = 0;
ReefAngel.WaterChangePortsE[0] = Port8Bit;
ReefAngel.WaterChangePortsE[1] = Port7Bit;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = 0;
ReefAngel.OverheatShutoffPortsE[0] = Port2Bit | Port3Bit | Port4Bit | Port7Bit;
ReefAngel.OverheatShutoffPortsE[1] = 0;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = 0;
ReefAngel.LightsOnPortsE[0] = Port5Bit | Port7Bit;
ReefAngel.LightsOnPortsE[1] = 0;
// Use T2 probe as temperature and overheat functions
ReefAngel.TempProbe = T2_PROBE;
ReefAngel.OverheatProbe = T3_PROBE;
// Set the Overheat temperature setting
InternalMemory.OverheatTemp_write( 820 );
// Ports that default on
ReefAngel.Relay.On( return );// Return
ReefAngel.Relay.On( powerheads ); // DC power heads on smart bar
// Ports that default off
ReefAngel.Relay.Off( heaters ); // Heaters
ReefAngel.Relay.Off( dosing1 ); // Dosing Pump 1
ReefAngel.Relay.Off( dosing2 ); // Dosing Pump 2
ReefAngel.Relay.Off( dosing3 ); // Dosing Pump 3
//Virtual Relays
ReefAngel.Relay.Off( co2purge );// Purge Co2 from Calcium Reactor
ReefAngel.Relay.Off( Box3_Port2 );
ReefAngel.Relay.Off( Box3_Port3 );
ReefAngel.Relay.Off( Box3_Port4 );
ReefAngel.Relay.Off( Box3_Port5 );
ReefAngel.Relay.Off( Box3_Port6 );
ReefAngel.Relay.Off( Box3_Port7 );
ReefAngel.Relay.Off( Box3_Port8 );//Test Virtual Switch
////// Place additional initialization code below here
////// Place additional initialization code above here
}
void loop()
{
SeasonalTemps();
ReefAngel.ActinicLights( actinics ); // Royal blue led strip
ReefAngel.DayLights( t5 ); // T5's
ReefAngel.StandardLights( sumplight,23,0,9,0 ); //Sump light
ReefAngel.StandardFan( fan ); // Hood Fan
ReefAngel.StandardLights( radions,1,30,9,30 ); //Radions
ReefAngel.StandardLights( co2,12,35,23,30 ); // Co2 Solenoid
ReefAngel.StandardLights( carecirc,12,30,23,55 ); // CaRx Recirculation Pump
ReefAngel.DosingPumpRepeat1( dosing1 );
ReefAngel.DosingPumpRepeat( ozone,180,1440,1200 ); // Ozone, on 3am=180mins offset from midnight, 1440=every 1440 mins (once a day), for 20 mins=1200 sec's
ReefAngel.DosingPumpRepeat2( dosing2 );
ReefAngel.DosingPumpRepeat3( dosing3 );
// Dimming Channels
ReefAngel.PWM.DaylightPWMParabola();
ReefAngel.PWM.ActinicPWMParabola(14,15,21,45,0,100,0);
ReefAngel.PWM.Daylight2PWMParabola();
ReefAngel.PWM.Actinic2PWMParabola();
boolean buzzer=false;
if ( buzzer ) ReefAngel.BuzzerOn(2); else ReefAngel.BuzzerOff();
////// Place your custom code below here
// Turn off skimmer if return pump is off
if (!ReefAngel.Relay.Status(return)) {
ReefAngel.Relay.Override(skimmer, 0); // Turn off skimmer
} else {
ReefAngel.Relay.DelayedOn(skimmer,5); // Delay start skimmer when return pump is back on
}
// Skimmer
if ((ReefAngel.HighATO.IsActive()) || (hour()>=9 && hour()<=18)) ReefAngel.Relay.Off( skimmer); // Turns off when collection container is full or from 9am-7pm
else ReefAngel.Relay.DelayedOn( skimmer,5); //delay start 5 mins
// CaRx Feed Pump
if ((hour() == 6 && minute() <=10) || (hour()>=13 && hour()<23) || (hour() == 23 && minute() <50)) ReefAngel.Relay.On(cafeed);//On from 6-6:10am and 1-11:50pm
else ReefAngel.Relay.Off(cafeed);
//start co2purge
unsigned long currentMillis = millis();
// Check if the condition to start the sequence is true
if (ReefAngel.Relay.Status(co2purge) && currentState == IDLE) {
currentState = TURN_OFF_CO2_AND_PUMPS;
}
switch (currentState) {
case TURN_OFF_CO2_AND_PUMPS:
// Turn off CO2 and Calcium Reactor pumps
ReefAngel.Relay.Off(co2);
ReefAngel.Relay.Off(carecirc);
ReefAngel.Relay.Off(cafeed);
lastUpdateTime = currentMillis; // Reset the timer
currentState = WAIT_TO_FEED_PUMP;
break;
case WAIT_TO_FEED_PUMP:
// Wait for 1 minute before turning on the feed pump
if (currentMillis - lastUpdateTime >= 60000) { // 60000 milliseconds = 1 minute
currentState = TURN_ON_FEED_PUMP;
}
break;
case TURN_ON_FEED_PUMP:
// Turn on the feed pump
ReefAngel.Relay.On(cafeed);
lastUpdateTime = currentMillis; // Reset the timer
currentState = WAIT_TO_TURN_OFF_FEED_PUMP;
break;
case WAIT_TO_TURN_OFF_FEED_PUMP:
// Wait for 10 minutes before turning off the feed pump
if (currentMillis - lastUpdateTime >= 600000) { // 600000 milliseconds = 10 minutes
currentState = COMPLETE_CYCLE;
}
break;
case COMPLETE_CYCLE:
// Turn off Box3_Port1
ReefAngel.Relay.Off(co2purge);
currentState = IDLE; // Reset the state to IDLE
break;
case IDLE:
// Do nothing or handle other tasks
break;
}
//end co2purge
//light mover
//if (hour()>=9 && hour()<=21) ReefAngel.DosingPumpRepeat( Port6,0,90,2 ); // from 9am - 9pm, with 0 minutes offset from midnight moves every 90 minutes 2 seconds
//else ReefAngel.Relay.Off( Port6);
//carbon dosing
//if (hour()>=6 && hour()<23) ReefAngel.DosingPumpRepeat1( Port8 );
//else ReefAngel.Relay.Off( Port8);
//kalk dosing
//if ((hour()>13 && hour()<20) || (ReefAngel.Params.PH > 845)) ReefAngel.Relay.Off( Port7); // Kalk off 1pm - 8pm & if pH is > 8.45
// else ReefAngel.PHControl( Port7 );
////// Place your custom code above here
ReefAngel.Network.Cloud();
// This should always be the last line
ReefAngel.ShowTouchInterface();
}
// RA_STRING1=4rBCB5aEN369IDJFYl/ESQ==::NTdkYmJkMzM0ODdmMmE0NA==
// RA_STRING2=null
// RA_STRING3=null
// RA_LABEL LABEL_TEMP1=FishRoom
// RA_LABEL LABEL_TEMP2=Sump
// RA_LABEL LABEL_TEMP3=OverFlow
// RA_LABEL LABEL_TEMP4=LightCanopy
// RA_LABEL LABEL_TEMP5=Cabinet
// RA_LABEL LABEL_TEMP6=NotInUse
// RA_LABEL LABEL_DAYLIGHT=Daylight
// RA_LABEL LABEL_ACTINIC=Actinic
// RA_LABEL LABEL_ACTINIC2=Actinic 2
// RA_LABEL LABEL_DAYLIGHT2=Daylight 2
// RA_LABEL LABEL_PORT11=Heaters
// RA_LABEL LABEL_PORT12=Skimmer
// RA_LABEL LABEL_PORT13=Blue Leds
// RA_LABEL LABEL_PORT14=T5's
// RA_LABEL LABEL_PORT15=Sump Light
// RA_LABEL LABEL_PORT16=Fan
// RA_LABEL LABEL_PORT17=Radions
// RA_LABEL LABEL_PORT18=Return
// RA_LABEL LABEL_PORT21=Ca Feed
// RA_LABEL LABEL_PORT22=Co2 Sol
// RA_LABEL LABEL_PORT23=Ca Recir
// RA_LABEL LABEL_PORT24=Doser1
// RA_LABEL LABEL_PORT25=Ozone
// RA_LABEL LABEL_PORT26=Doser2
// RA_LABEL LABEL_PORT27=Power Heads
// RA_LABEL LABEL_PORT28=Doser3
// RA_LABEL LABEL_PORT31=Purge Co2
// RA_LABEL LABEL_PORT32=Virtual
// RA_LABEL LABEL_PORT33=Virtual
// RA_LABEL LABEL_PORT34=Virtual
// RA_LABEL LABEL_PORT35=Virtual
// RA_LABEL LABEL_PORT36=Virtual
// RA_LABEL LABEL_PORT37=Virtual
// RA_LABEL LABEL_PORT38=Test
//
Re: Reefology's code
I've continued to try make this work using coding assistant with the following:
in Globals:
in void loop:
It completes all tasks with the exception of turning off co2purge virtual relay. After numerous attempts, I can't seem to make anymore progress!
in Globals:
Code: Select all
bool co2PurgeActive = false;
unsigned long co2PurgeStartTime = 0;
Code: Select all
// Check if the co2purge virtual relay is turned on
if (ReefAngel.Relay.Status(co2purge)) {
// Step 1: Turn off co2, cafeed, and carecirc
ReefAngel.Relay.Off(co2);
ReefAngel.Relay.Off(cafeed);
ReefAngel.Relay.Off(carecirc);
// Step 2: Use millis() to turn on cafeed after 30 seconds
if (!co2PurgeActive) {
co2PurgeActive = true;
co2PurgeStartTime = millis();
}
if (co2PurgeActive && millis() - co2PurgeStartTime >= 30000) { // 30 seconds
ReefAngel.Relay.On(cafeed);
}
// Step 3: Turn off cafeed after 10 minutes
if (co2PurgeActive && millis() - co2PurgeStartTime >= 60000) { // 10 minutes
ReefAngel.Relay.Off(cafeed);
co2PurgeActive = false;
co2PurgeStartTime = 0; // Reset the start time
}
ReefAngel.Relay.Off(co2purge);
}