My code - now with RAnet
-
- Posts: 151
- Joined: Wed Mar 13, 2013 5:36 pm
Re: My code
oh my god. I just can't win. port 1 on my relay box is not working now. you can hear the relay clicking when you change it from off/on or on/off via portal or android but no power is coming from the outlet.
-
- Posts: 151
- Joined: Wed Mar 13, 2013 5:36 pm
Re: My code
I ran the controller tester sketch as well and that confirms port one doesn't work. what else can I try?
had to move my heater to port 3.
had to move my heater to port 3.
-
- Posts: 151
- Joined: Wed Mar 13, 2013 5:36 pm
Re: My code
how do I code temp probe 2 to turn on port 3 at 76 and off at 77?
it's for a second tank.
it's for a second tank.
My code
StandardHeater(Port3,76,77);
Oh wait..you need it for probe 2...one minute..
Oh wait..you need it for probe 2...one minute..
My code
void StandardHeater2(byte HeaterRelay, int LowTemp, int HighTemp)
{
if (ReefAngel.Params.Temp[T2_PROBE] == 0) return; // Don't turn the heater on if the temp is reading 0
if (ReefAngel.Params.Temp[T2_PROBE] <= LowTemp && ReefAngel.Params.Temp[T2_PROBE] > 0) ReefAngel.Relay.On(HeaterRelay); // If sensor 2 temperature <= LowTemp - turn on heater
if (ReefAngel.Params.Temp[T2_PROBE] >= HighTemp) ReefAngel.Relay.Off(HeaterRelay); // If sensor 2 temperature >= HighTemp - turn off heater
}
{
if (ReefAngel.Params.Temp[T2_PROBE] == 0) return; // Don't turn the heater on if the temp is reading 0
if (ReefAngel.Params.Temp[T2_PROBE] <= LowTemp && ReefAngel.Params.Temp[T2_PROBE] > 0) ReefAngel.Relay.On(HeaterRelay); // If sensor 2 temperature <= LowTemp - turn on heater
if (ReefAngel.Params.Temp[T2_PROBE] >= HighTemp) ReefAngel.Relay.Off(HeaterRelay); // If sensor 2 temperature >= HighTemp - turn off heater
}
-
- Posts: 151
- Joined: Wed Mar 13, 2013 5:36 pm
Re: My code
will try this, thank you!lnevo wrote:void StandardHeater2(byte HeaterRelay, int LowTemp, int HighTemp)
{
if (ReefAngel.Params.Temp[T2_PROBE] == 0) return; // Don't turn the heater on if the temp is reading 0
if (ReefAngel.Params.Temp[T2_PROBE] <= LowTemp && ReefAngel.Params.Temp[T2_PROBE] > 0) ReefAngel.Relay.On(HeaterRelay); // If sensor 2 temperature <= LowTemp - turn on heater
if (ReefAngel.Params.Temp[T2_PROBE] >= HighTemp) ReefAngel.Relay.Off(HeaterRelay); // If sensor 2 temperature >= HighTemp - turn off heater
}
-
- Posts: 151
- Joined: Wed Mar 13, 2013 5:36 pm
Re: My code
sorry for stupid question: where do I put this in my 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 <ReefAngel.h>
/*
#define Heater 1
#define Return 2
#define Skimmer 3
#define Vortech1 5
#define Vortech2 6
#define ATO 7
*/
////// Place global variable code below here
byte vtechmode;
////// 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 | Port5Bit | Port6Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port7Bit | Port4Bit | Port5Bit | Port6Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = 0;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port1Bit | Port2Bit | Port7Bit | Port4Bit | Port5Bit | Port6Bit;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Ports that are always on
ReefAngel.Relay.On( Port2 );
ReefAngel.Relay.On( Port5 );
ReefAngel.Relay.On( Port6 );
////// Place additional initialization code below here
// Hardcode calibrations
ReefAngel.PHMin=576; // PH7.0
ReefAngel.PHMax=842; // PH10.0
ReefAngel.SalMax=3000; // 35ppt
////// Place additional initialization code above here
}
void loop()
{
ReefAngel.StandardHeater( Port1,796,802 );
ReefAngel.WaterLevelATO( Port7,120,58,60 ); // If water level less than 58, turn on auto top off relay; else, keep it off
ReefAngel.PWM.SetChannel( 0,PWMSlope(21,30,8,0,15,31,10,15) );
ReefAngel.PWM.Channel1PWMSlope();
ReefAngel.PWM.Channel2PWMSlope();
ReefAngel.PWM.Channel3PWMSlope();
ReefAngel.PWM.Channel4PWMSlope();
// ReefAngel.SingleATOLow(Port2);
if ( ReefAngel.HighATO.IsActive())
{
ReefAngel.Relay.On(Port2);
}
else
{
ReefAngel.Relay.Off(Port2);
}
if (hour() >=8 && hour() < 21)
{
if (ReefAngel.RF.Mode==Night) ReefAngel.RF.SetMode(Feeding_Stop,0,0);
ReefAngel.RF.UseMemory=true;
ReefAngel.Relay.Off(Port8);
}
else
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(Night,15,0);
ReefAngel.Relay.On(Port8);
}
// This should always be the last line
ReefAngel.Portal( "bencollinz" );
ReefAngel.ShowInterface();
}
void DrawCustomMain()
{
char text[7];
// Date and Time
ReefAngel.LCD.DrawDate( 6, 2 );
ReefAngel.LCD.Clear(COLOR_BLACK, 1, 11, 132, 11);
pingSerial();
ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 6, 90, "--------------------");
ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 6, 126, "--------------------");
for (byte Left=93; Left < 133; Left+=10)
{
ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 2, Left, "|");
ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 126, Left, "|");
}
ReefAngel.LCD.DrawText(0,255,18,12,"EcoSmart Vortech");
ReefAngel.LCD.Clear(255, 1, 19, 128, 29);
if (vtechmode == 0) ReefAngel.LCD.DrawLargeText(COLOR_LIMEGREEN,255,35,21,"Constant");
else if(vtechmode == 1) ReefAngel.LCD.DrawLargeText(COLOR_GOLD,255,42,21,"Lagoon");
else if (vtechmode == 2) ReefAngel.LCD.DrawLargeText(COLOR_GOLD,255,25,21,"Reef Crest");
else if (vtechmode == 3) ReefAngel.LCD.DrawLargeText(COLOR_CORNFLOWERBLUE,255,22,21,"Short Pulse");
else if (vtechmode == 4) ReefAngel.LCD.DrawLargeText(COLOR_PINK,255,25,21,"Long Pulse");
else if (vtechmode == 5) ReefAngel.LCD.DrawLargeText(COLOR_MAGENTA,255,8,21,"Nutrient Trnsp.");
else if (vtechmode == 6) ReefAngel.LCD.DrawLargeText(COLOR_MAGENTA,255,23,21,"Tidal Swell");
else if (vtechmode == 9) ReefAngel.LCD.DrawLargeText(COLOR_WHITE,0,45,21,"Night");
ReefAngel.LCD.DrawText(0,255,10,30,"Temp");
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, 85, 40, text, Num8x8);
pingSerial();
ReefAngel.LCD.DrawText(0,255,43,48,"Salinity");
ConvertNumToString(text, ReefAngel.Params.Salinity, 10);
ReefAngel.LCD.DrawLargeText(COLOR_LIMEGREEN, 255, 49, 58, text, Num8x8);
pingSerial();
// Main Relay Box
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
ReefAngel.LCD.DrawOutletBox( 12, 77, TempRelay );
pingSerial();
// water level
ReefAngel.LCD.DrawText(0,255,8,68,"WL:");
ReefAngel.LCD.DrawText( COLOR_CORNFLOWERBLUE,255, 40, 68, ReefAngel.WaterLevel.GetLevel() );
pingSerial();
}
void DrawCustomGraph()
{
}
Re: My code
You can put that block ("void StandardHeater2(byte HeaterRelay, int LowTemp, int HighTemp) ......") at the bottom of your file, beneath:
And you'll need to call the new function from within your loop, probably on the line after:
like:
^^^ I'm not sure about the range of the temperatures there. (i.e., should it be in "degrees F" or "degrees F times 10" ?)
FYI, I happened to run across this in the ReefAngel class:
Not sure if that would be a problem for running a second tank? lnevo, did you take this into account?
In the end, I'd say something like:
Code: Select all
void DrawCustomGraph()
{
}
Code: Select all
ReefAngel.StandardHeater( Port1,796,802 );
Code: Select all
StandardHeater2( Port3, 76, 77 );
FYI, I happened to run across this in the ReefAngel class:
Code: Select all
OverheatProbe = T2_PROBE;
In the end, I'd say something like:
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 <ReefAngel.h>
/*
#define Heater 1
#define Return 2
#define Skimmer 3
#define Vortech1 5
#define Vortech2 6
#define ATO 7
*/
////// Place global variable code below here
byte vtechmode;
////// 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 | Port5Bit | Port6Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port7Bit | Port4Bit | Port5Bit | Port6Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = 0;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port1Bit | Port2Bit | Port7Bit | Port4Bit | Port5Bit | Port6Bit;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Ports that are always on
ReefAngel.Relay.On( Port2 );
ReefAngel.Relay.On( Port5 );
ReefAngel.Relay.On( Port6 );
////// Place additional initialization code below here
// Hardcode calibrations
ReefAngel.PHMin=576; // PH7.0
ReefAngel.PHMax=842; // PH10.0
ReefAngel.SalMax=3000; // 35ppt
////// Place additional initialization code above here
}
void loop()
{
ReefAngel.StandardHeater( Port1,796,802 );
StandardHeater2( Port3, 76, 77 ); // YOU SHOULD VERIFY THE TEMPERATURE VALUES HERE... I'M BASING THIS ON OTHER POSTS FROM THE FORUM.
ReefAngel.WaterLevelATO( Port7,120,58,60 ); // If water level less than 58, turn on auto top off relay; else, keep it off
ReefAngel.PWM.SetChannel( 0,PWMSlope(21,30,8,0,15,31,10,15) );
ReefAngel.PWM.Channel1PWMSlope();
ReefAngel.PWM.Channel2PWMSlope();
ReefAngel.PWM.Channel3PWMSlope();
ReefAngel.PWM.Channel4PWMSlope();
// ReefAngel.SingleATOLow(Port2);
if ( ReefAngel.HighATO.IsActive())
{
ReefAngel.Relay.On(Port2);
}
else
{
ReefAngel.Relay.Off(Port2);
}
if (hour() >=8 && hour() < 21)
{
if (ReefAngel.RF.Mode==Night) ReefAngel.RF.SetMode(Feeding_Stop,0,0);
ReefAngel.RF.UseMemory=true;
ReefAngel.Relay.Off(Port8);
}
else
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(Night,15,0);
ReefAngel.Relay.On(Port8);
}
// This should always be the last line
ReefAngel.Portal( "bencollinz" );
ReefAngel.ShowInterface();
}
void DrawCustomMain()
{
char text[7];
// Date and Time
ReefAngel.LCD.DrawDate( 6, 2 );
ReefAngel.LCD.Clear(COLOR_BLACK, 1, 11, 132, 11);
pingSerial();
ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 6, 90, "--------------------");
ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 6, 126, "--------------------");
for (byte Left=93; Left < 133; Left+=10)
{
ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 2, Left, "|");
ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 126, Left, "|");
}
ReefAngel.LCD.DrawText(0,255,18,12,"EcoSmart Vortech");
ReefAngel.LCD.Clear(255, 1, 19, 128, 29);
if (vtechmode == 0) ReefAngel.LCD.DrawLargeText(COLOR_LIMEGREEN,255,35,21,"Constant");
else if(vtechmode == 1) ReefAngel.LCD.DrawLargeText(COLOR_GOLD,255,42,21,"Lagoon");
else if (vtechmode == 2) ReefAngel.LCD.DrawLargeText(COLOR_GOLD,255,25,21,"Reef Crest");
else if (vtechmode == 3) ReefAngel.LCD.DrawLargeText(COLOR_CORNFLOWERBLUE,255,22,21,"Short Pulse");
else if (vtechmode == 4) ReefAngel.LCD.DrawLargeText(COLOR_PINK,255,25,21,"Long Pulse");
else if (vtechmode == 5) ReefAngel.LCD.DrawLargeText(COLOR_MAGENTA,255,8,21,"Nutrient Trnsp.");
else if (vtechmode == 6) ReefAngel.LCD.DrawLargeText(COLOR_MAGENTA,255,23,21,"Tidal Swell");
else if (vtechmode == 9) ReefAngel.LCD.DrawLargeText(COLOR_WHITE,0,45,21,"Night");
ReefAngel.LCD.DrawText(0,255,10,30,"Temp");
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, 85, 40, text, Num8x8);
pingSerial();
ReefAngel.LCD.DrawText(0,255,43,48,"Salinity");
ConvertNumToString(text, ReefAngel.Params.Salinity, 10);
ReefAngel.LCD.DrawLargeText(COLOR_LIMEGREEN, 255, 49, 58, text, Num8x8);
pingSerial();
// Main Relay Box
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
ReefAngel.LCD.DrawOutletBox( 12, 77, TempRelay );
pingSerial();
// water level
ReefAngel.LCD.DrawText(0,255,8,68,"WL:");
ReefAngel.LCD.DrawText( COLOR_CORNFLOWERBLUE,255, 40, 68, ReefAngel.WaterLevel.GetLevel() );
pingSerial();
}
void DrawCustomGraph()
{
}
void StandardHeater2(byte HeaterRelay, int LowTemp, int HighTemp)
{
if (ReefAngel.Params.Temp[T2_PROBE] == 0)
return; // Don't turn the heater on if the temp is reading 0
if (ReefAngel.Params.Temp[T2_PROBE] <= LowTemp && ReefAngel.Params.Temp[T2_PROBE] > 0)
ReefAngel.Relay.On(HeaterRelay); // If sensor 2 temperature <= LowTemp - turn on heater
if (ReefAngel.Params.Temp[T2_PROBE] >= HighTemp)
ReefAngel.Relay.Off(HeaterRelay); // If sensor temperature >= HighTemp - turn off heater
}
Current setup:
60g 24" custom cube (fish and softies right now)
AI Sol Blue, Ecotech MP-10wES
Coralife skimmer
100% customer controller, transitioning to ReefAngel
60g 24" custom cube (fish and softies right now)
AI Sol Blue, Ecotech MP-10wES
Coralife skimmer
100% customer controller, transitioning to ReefAngel
My code
Overheat probe can be set to whatever...and yes the values are temp times 10...
So 77.5 would be 775.
Lee
So 77.5 would be 775.
Lee
My code
Overheat probe can be set to whatever...and yes the values are temp times 10...
So 77.5 would be 775.
Lee
So 77.5 would be 775.
Lee
-
- Posts: 151
- Joined: Wed Mar 13, 2013 5:36 pm
Re: My code
Thank you both. Will try it out.
-
- Posts: 151
- Joined: Wed Mar 13, 2013 5:36 pm
Re: My code
I would like my mp10s to go into feeding mode when I choose feeding mode from the menu...how would I go about doing that?
-
- Posts: 151
- Joined: Wed Mar 13, 2013 5:36 pm
Re: My code
oh. cool. didn't know that. I'm on 1.03, haven't updated for awhile...it will still do that?rimai wrote:it does it automatically.
-
- Posts: 151
- Joined: Wed Mar 13, 2013 5:36 pm
Re: My code
yes it does, just tried it out. very cool!bencollinz wrote:oh. cool. didn't know that. I'm on 1.03, haven't updated for awhile...it will still do that?rimai wrote:it does it automatically.
-
- Posts: 151
- Joined: Wed Mar 13, 2013 5:36 pm
Re: My code
ok, so feeding mode isn't strong enough flow. How do I tell it to go to short pulse 53% @ 25 duration when I go into feeding mode?
Re: My code
You can change the feeding mode speed on the Ecotech driver without having to do any code change. I believe it keeps the mode that you are in.
You can adjust the speed and duration for this mode using the EcoSmart Configuration mode. See Section 4.5: Configuration Mode for instructions on how to do this. The default speed is set to 50% slower than the lowest speed of the pump for a duration of 10 minutes.
You can adjust the speed and duration for this mode using the EcoSmart Configuration mode. See Section 4.5: Configuration Mode for instructions on how to do this. The default speed is set to 50% slower than the lowest speed of the pump for a duration of 10 minutes.
Re: My code
Setting 1: Barely Spinning
Setting 2: 50% lower than lowest speed of pump
Setting 3: lowest speed of pump
Setting 4: 25% speed of pump
Setting 5: 50% speed of pump
Setting 2: 50% lower than lowest speed of pump
Setting 3: lowest speed of pump
Setting 4: 25% speed of pump
Setting 5: 50% speed of pump
Re: My code
The only reason I suggest this route is that I like to see my drivers blinking in feeding mode You could certainly set it in code, but then you lose the nice light show
-
- Posts: 151
- Joined: Wed Mar 13, 2013 5:36 pm
Re: My code
ok, I'll look into that possibility. thank you.
-
- Posts: 151
- Joined: Wed Mar 13, 2013 5:36 pm
Re: My code
wow, your code is insane! I tried to pick through it to figure out NTM mode after exiting feeding mode for a set amount of time and just got entirely lost. is there an easier way?lnevo wrote:The only reason I suggest this route is that I like to see my drivers blinking in feeding mode You could certainly set it in code, but then you lose the nice light show
Re: My code
It's actually pretty straight forward, but my code does a lot...
So during feeding mode, I update a variable with the current time. When feeding mode stops that variable stops getting updated and I know when feeding mode ends.
Then during each pass of loop() you can check that varaible and run NTM for whatever amount of time you want:
I left the ... in place of whatever you want to do. Keep in mind if you have other scheduling overrides and modes happening, you'll need to make that if part of that loop or do it after... this is where my stuff gets more complex and will probably similar in your code.
So during feeding mode, I update a variable with the current time. When feeding mode stops that variable stops getting updated and I know when feeding mode ends.
Code: Select all
static unsigned long feeding;
if (ReefAngel.DisplayedMenu==FEEDING_MODE) {
feeding=now();
}
Code: Select all
if (now()-feeding > 1 && now()-feeding < 3600) { // 1 second after feeding mode until 60 minutes after feeding mode.
... // Run your smart_ntm here.
}
-
- Posts: 151
- Joined: Wed Mar 13, 2013 5:36 pm
Re: My code
like this?
Code: Select all
void_loop(){
if (hour() >=8 && hour() < 22)
{
if (ReefAngel.RF.Mode==Night) ReefAngel.RF.SetMode(Feeding_Stop,0,0);
ReefAngel.RF.UseMemory=true;
if (ReefAngel.DisplayedMenu==FEEDING_MODE)
{
feeding=now();
}
if (now()-feeding > 1 && now()-feeding < 3600) { // 1 second after feeding mode until 60 minutes after feeding mode.
ReefAngel.RF.SetMode(vtMode,vtSpeed,vtDuration);
}
ReefAngel.Relay.Off(Port8);
}
else
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(Night,15,0);
ReefAngel.Relay.On(Port8);
}
// This should always be the last line
ReefAngel.Portal( "bencollinz" );
ReefAngel.ShowInterface();
}
-
- Posts: 151
- Joined: Wed Mar 13, 2013 5:36 pm
Re: My code
sorry. i have no programming skills whatsover.
Re: My code
I see that No worries. I'll see what I can do on the trainride home for you.
Re: My code
Actually it looks like you got it. The only thing you need to add is to set UseMemory false if you are doing SetMode like that. Otherwise it looks good.
Don't forget to declare the feeding variable...the static unsigned long feeding; statement. It can be inside the loop function, as long as its before the test.
Good work!
Don't forget to declare the feeding variable...the static unsigned long feeding; statement. It can be inside the loop function, as long as its before the test.
Good work!
-
- Posts: 151
- Joined: Wed Mar 13, 2013 5:36 pm
Re: My code
ok, but I want it to function as follows...lnevo wrote:Actually it looks like you got it. The only thing you need to add is to set UseMemory false if you are doing SetMode like that. Otherwise it looks good.
Don't forget to declare the feeding variable...the static unsigned long feeding; statement. It can be inside the loop function, as long as its before the test.
Good work!
between 8am and 10pm I want it to use whatever setting from memory (ie. portal)
if between 8am and 10pm I go into feeding mode then for 1 hour afterwards it does NTM mode
otherwise it's nite mode ie. ReefAngel.RF.UseMemory=false; ReefAngel.RF.SetMode(Night,15,0);
is that making sense? or am I misunderstanding how this works?
-
- Posts: 151
- Joined: Wed Mar 13, 2013 5:36 pm
Re: My code
or like this?
Code: Select all
void_loop(){
if (hour() >=8 && hour() < 22)
{
if (ReefAngel.RF.Mode==Night) ReefAngel.RF.SetMode(Feeding_Stop,0,0);
ReefAngel.RF.UseMemory=true;
if (ReefAngel.DisplayedMenu==FEEDING_MODE)
{
feeding=now();
}
if (now()-feeding > 1 && now()-feeding < 3600) { // 1 second after feeding mode until 60 minutes after feeding mode.
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(vtMode,vtSpeed,vtDuration);
}
ReefAngel.Relay.Off(Port8);
}
else
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(Night,15,0);
ReefAngel.Relay.On(Port8);
}
// This should always be the last line
ReefAngel.Portal( "bencollinz" );
ReefAngel.ShowInterface();
}
-
- Posts: 151
- Joined: Wed Mar 13, 2013 5:36 pm
Re: My code
testing it now. thank you so so so so much for helping me!lnevo wrote:Yeah exactly.