Page 2 of 9

Re: PaulTurner911 Code

Posted: Sun Jun 23, 2013 4:33 pm
by lnevo
Paul I had an error in the feeding mode section that I fixed in my post above. Can you try it and let me know. If it doesn't work, I'll have to relook at the logic, but the error I had could have caused it to f up :)

Re: PaulTurner911 Code

Posted: Wed Jun 26, 2013 6:06 pm
by Paulturner911
I'm having the same results with the newer code. The night mode doesn't activate and once feedmode has been activated the wp never resumes, it in theory should activate NTM at 1800s on the feedmode countdown. I'd appreciate any help, no rush!!!

Thanks

Re: PaulTurner911 Code

Posted: Wed Jun 26, 2013 6:57 pm
by lnevo
Hmmm

Re: PaulTurner911 Code

Posted: Thu Jun 27, 2013 5:41 am
by lnevo
I see where I went wrong. When we get to NTM mode we never reset the speed. Lots of other issues. I'm fairly confident in this rework. Please give it a try.

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
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = Port1Bit | Port2Bit | Port7Bit | Port8Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port1Bit | Port2Bit | Port7Bit | Port8Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = Port2Bit | Port3Bit | Port7Bit | Port8Bit;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port3Bit | Port7Bit | Port8Bit;
// 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

////// Place additional initialization code below here


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

void loop()
{
ReefAngel.DayLights( Port1 ); // Return Pump
ReefAngel.StandardFan( Port2 ); // Canopy Fans
ReefAngel.ActinicLights( Port3 ); // Actinic LEDS
//Port4 Kalk/ATO
//Port5 Kalk Stir
//Port 6 NOT USED (Possibly Skimmer)
ReefAngel.DayLights( Port7 ); // MH 1
ReefAngel.DayLights( Port8 ); //MH 2
//Moonlight Phase 9pm-10am (CH4-CH5)
if ( (hour() >=10) && (hour() <21) ) 
ReefAngel.PWM.SetChannel( 4,(0) );
else 
ReefAngel.PWM.SetChannel( 4, MoonPhase() );
if ( (hour() >=10) && (hour() <21) ) 
ReefAngel.PWM.SetChannel( 5,(0) );
else
ReefAngel.PWM.SetChannel( 5, MoonPhase() );

//Over Flow Protection
if (ReefAngel.HighATO.IsActive())
ReefAngel.Relay.On(Port1);
else
ReefAngel.Relay.Off(Port1);

//ATO Protection
if (ReefAngel.LowATO.IsActive())
ReefAngel.Relay.On(Port4);
else
ReefAngel.Relay.Off(Port4);

//Kalk Dose 50sec @ 8pm-12pm (every 15min)
if (hour() >=20 || hour() < 12)
ReefAngel.Relay.Set(Port4, now()%900<50);
else
ReefAngel.Relay.Off(Port4);

//Kalk Stir 12pm-1pm
if (hour() >=12 & hour() < 13)
ReefAngel.Relay.On(Port5);
else
ReefAngel.Relay.Off(Port5);


ReefAngel.DCPump.UseMemory = true;
ReefAngel.DCPump.DaylightChannel = Sync;
////// Place your custom code below here

///// Place your custom code below here

// Add random mode if we set to Mode to 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, TidalSwell, ShortPulse, NutrientTransport };

if (now()%SECS_PER_DAY==0 || changeMode==true) { // Change at midnight or if controller rebooted
rmode=random(100)%sizeof(modes); // Change the mode once per day to pick from our array
changeMode=false;
}

if (now()-feeding<=1800) { 
  // 30 minutes after feeding mode. Pump is off
  ReefAngel.DCPump.UseMemory=false;
  ReefAngel.DCPump.Speed=ReefAngel.DCPump.FeedingSpeed;
} else if (now()-feeding<=(1800+3600)) { 
  // First 30 minutes pump is off, Next 60 is NTM
  ReefAngel.DCPump.UseMemory=false;
  ReefAngel.DCPump.Mode=NutrientTransport;
  ReefAngel.DCPump.Speed=InternalMemory.DCPumpSpeed_read(); // Resume previous speed
} else if (now()%SECS_PER_DAY<30600 || now()%SECS_PER_DAY>=81000) { // 8:30am / 10:30pm
  // Night mode (go to 30%)
  ReefAngel.DCPump.UseMemory=false;
  ReefAngel.DCPump.Speed=30;
} else if (InternalMemory.DCPumpMode_read()==11) { 
  // Custom Mode and nothing else going on
  ReefAngel.DCPump.UseMemory=false;
  ReefAngel.DCPump.Mode=modes[rmode];  // Set 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
}

// Set timer when in feeding mode
static unsigned long feeding;
if (ReefAngel.DisplayedMenu==FEEDING_MODE) {
feeding = now();
}

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

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

void DrawCustomMain()
{
int x,y;
char text[10];
// Dimming Expansion
x = 15;
y = 2;
for ( int a=0;a<6;a++ )
{
if ( a>2 ) x = 75;
if ( a==3 ) y = 2;
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x,y,"Ch :" );
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x+12,y,a );
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x+24,y,ReefAngel.PWM.GetChannelValue(a) );
y += 10;
}
pingSerial();

// Parameters
#if defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 43, ReefAngel.Params,
ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue() );
#else // defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 43, ReefAngel.Params );
#endif // defined DisplayLEDPWM && ! defined RemoveAllLights
pingSerial();

// Main Relay Box
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
ReefAngel.LCD.DrawOutletBox( 12, 84, TempRelay );
pingSerial();

// Date and Time
ReefAngel.LCD.DrawDate( 6, 122 );
pingSerial();
}

void DrawCustomGraph()
{
}

Re: PaulTurner911 Code

Posted: Fri Jun 28, 2013 8:23 am
by Paulturner911
Awesome! Ill try tonight and let you know! I really appreciate the help Lee.

Thank You

Re: PaulTurner911 Code

Posted: Sat Jun 29, 2013 4:53 pm
by Paulturner911
I had to move

// Set timer when in feeding mode
static unsigned long feeding;
if (ReefAngel.DisplayedMenu==FEEDING_MODE) {
feeding = now();

ABOVE

if (now()-feeding<=1800) {

b/c I was getting an error for feeding being undefined, when I switched them it worked.

However I am in the same boat, or even worse with the NTP/Feedmode. It still does not activate at the 1800s mark nor after feedmode has timed out. The only difference is before I could go in the portal and activate any mode, now it is unresponsive. Meaning the WP will not run in any mode right now.....Please help :)

Re: PaulTurner911 Code

Posted: Sat Jun 29, 2013 7:39 pm
by lnevo
Well go back to your older code..gonna take me a while to figure it out.

Re: PaulTurner911 Code

Posted: Sat Jun 29, 2013 8:08 pm
by Paulturner911
It eventually turned back on, just not in or right after feedmode. I looked in the portal after feedmode timed out and it read NTM instead of custom, BUT it read a speed of ZERO at that time. Now its seems to be running "night mode, in NTM" at 30 in stead of nightmode constant 30....its pulsing. Keep me posted, Thanks

Re: PaulTurner911 Code

Posted: Sat Jun 29, 2013 9:08 pm
by lnevo
Oh ok thats cool..we can figure some of that out...

Also just an fyi can you confirm your feeding mode time...how long your return pump is off for..

Right now it goes:

Feeding mode start 00:00
Feeding mode finish 15:00???
Wavemaker at 0 till 45:00
Ntm at usual speed till 1:45

The extended wavemaker off used to be 30 minutes total but now its 45 minutes.. I can fix that but just making sure you are expecting the right thing.

Re: PaulTurner911 Code

Posted: Sat Jun 29, 2013 10:17 pm
by lnevo
So it looks like you reset your controller at around 3:30..mode was in NTM from that point on..which is part of your random rotation... At about 7:05 you went into feeding mode. Your speed was at 0 and mode still at NTM... until 8:14 when it went back to 60. You were still in NTM mode...now forced (ignoring custom mode) until 10:30 when night mode kicked in staying in NTM at 30%.

This is based on the charts below. Keep in mind 0 values do not show on the graph...but note the gap between 7:04 and 8:14.

Speed
http://forum.reefangel.com/status/chart ... filter=DCS

Mode
http://forum.reefangel.com/status/chart ... filter=DCM

So it looks like everything is working except the following which I've fixed below:

Change extension of feeding mode to 15 minutes so total duration is 30. Feel free to make the 900 back to 1800.

Fixed the timer issue you had as well...sorry bout that one.
Force night mode to Constant instead of whatever is default mode (NTM was today's mode.)

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
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = Port1Bit | Port2Bit | Port7Bit | Port8Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port1Bit | Port2Bit | Port7Bit | Port8Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = Port2Bit | Port3Bit | Port7Bit | Port8Bit;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port3Bit | Port7Bit | Port8Bit;
// 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

////// Place additional initialization code below here


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

void loop()
{
ReefAngel.DayLights( Port1 ); // Return Pump
ReefAngel.StandardFan( Port2 ); // Canopy Fans
ReefAngel.ActinicLights( Port3 ); // Actinic LEDS
//Port4 Kalk/ATO
//Port5 Kalk Stir
//Port 6 NOT USED (Possibly Skimmer)
ReefAngel.DayLights( Port7 ); // MH 1
ReefAngel.DayLights( Port8 ); //MH 2
//Moonlight Phase 9pm-10am (CH4-CH5)
if ( (hour() >=10) && (hour() <21) ) 
ReefAngel.PWM.SetChannel( 4,(0) );
else 
ReefAngel.PWM.SetChannel( 4, MoonPhase() );
if ( (hour() >=10) && (hour() <21) ) 
ReefAngel.PWM.SetChannel( 5,(0) );
else
ReefAngel.PWM.SetChannel( 5, MoonPhase() );

//Over Flow Protection
if (ReefAngel.HighATO.IsActive())
ReefAngel.Relay.On(Port1);
else
ReefAngel.Relay.Off(Port1);

//ATO Protection
if (ReefAngel.LowATO.IsActive())
ReefAngel.Relay.On(Port4);
else
ReefAngel.Relay.Off(Port4);

//Kalk Dose 50sec @ 8pm-12pm (every 15min)
if (hour() >=20 || hour() < 12)
ReefAngel.Relay.Set(Port4, now()%900<50);
else
ReefAngel.Relay.Off(Port4);

//Kalk Stir 12pm-1pm
if (hour() >=12 & hour() < 13)
ReefAngel.Relay.On(Port5);
else
ReefAngel.Relay.Off(Port5);


ReefAngel.DCPump.UseMemory = true;
ReefAngel.DCPump.DaylightChannel = Sync;
////// Place your custom code below here

///// Place your custom code below here

// Add random mode if we set to Mode to 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, TidalSwell, ShortPulse, NutrientTransport };

if (now()%SECS_PER_DAY==0 || changeMode==true) { // Change at midnight or if controller rebooted
rmode=random(100)%sizeof(modes); // Change the mode once per day to pick from our array
changeMode=false;
}

// Set timer when in feeding mode
static unsigned long feeding;
if (ReefAngel.DisplayedMenu==FEEDING_MODE) {
feeding = now();
}

if (now()-feeding<=900) { 
  // 30 minutes after feeding mode. Pump is off
  ReefAngel.DCPump.UseMemory=false;
  ReefAngel.DCPump.Speed=0;
} else if (now()-feeding<=(900+3600)) { 
  // First 30 minutes pump is off, Next 60 is NTM
  ReefAngel.DCPump.UseMemory=false;
  ReefAngel.DCPump.Mode=NutrientTransport;
  ReefAngel.DCPump.Speed=InternalMemory.DCPumpSpeed_read(); // Resume previous speed
} else if (now()%SECS_PER_DAY<30600 || now()%SECS_PER_DAY>=81000) { // 8:30am / 10:30pm
  // Night mode (go to 30%)
  ReefAngel.DCPump.UseMemory=false;
  ReefAngel.DCPump.Mode=Constant;
  ReefAngel.DCPump.Speed=30;
} else if (InternalMemory.DCPumpMode_read()==11) { 
  // Custom Mode and nothing else going on
  ReefAngel.DCPump.UseMemory=false;
  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

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

void DrawCustomMain()
{
int x,y;
char text[10];
// Dimming Expansion
x = 15;
y = 2;
for ( int a=0;a<6;a++ )
{
if ( a>2 ) x = 75;
if ( a==3 ) y = 2;
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x,y,"Ch :" );
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x+12,y,a );
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x+24,y,ReefAngel.PWM.GetChannelValue(a) );
y += 10;
}
pingSerial();

// Parameters
#if defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 43, ReefAngel.Params,
ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue() );
#else // defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 43, ReefAngel.Params );
#endif // defined DisplayLEDPWM && ! defined RemoveAllLights
pingSerial();

// Main Relay Box
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
ReefAngel.LCD.DrawOutletBox( 12, 84, TempRelay );
pingSerial();

// Date and Time
ReefAngel.LCD.DrawDate( 6, 122 );
pingSerial();
}

void DrawCustomGraph()
{
}


Re: PaulTurner911 Code

Posted: Sun Jun 30, 2013 7:22 am
by Paulturner911
Sorry I didnt get back to you last night. I have feed mode set to 3600, thats when the return pumps should activate. I was wanting NTM to activate at 1800 in feed mode.

Feedmode activated:
Countdown timer now reads 3600 all pumps OFF
Countdown timer reads 1800 activate NTM for 60min
Feedmode complete activate return pumps and continue running NTM for 30min


It seems you have everything working, I was just misunderstanding the scheduling of it. Could you set the times to the above schedule? Thanks.

Re: PaulTurner911 Code

Posted: Sun Jun 30, 2013 8:28 am
by lnevo
I dont understand your scheduling...

For the record the timer stays at 0 during feeding mode so it doesn't start incrementing until feeding mode is over.

So whatever number is set is plus your feeding mode time already...

You want ntm running while your return pumps are off??? So confused..

If i recall we shortened feed mode to 15 minutes and extended the wavemaker time so that wavemakers were off for 30 minutes but returns kicked back on before. Once that was done we kicked in NTM. What you describe sounds way different

Re: PaulTurner911 Code

Posted: Sun Jun 30, 2013 12:59 pm
by Paulturner911
I was wanting NTM to stir up uneaten food and what not then the return pump to turn on and remove from display tank. Ill shorten feed mode to 15 and run it, maybe Ill like your way better :)

Re: PaulTurner911 Code

Posted: Tue Jul 09, 2013 1:49 pm
by Paulturner911
Any idea why my actinic channel is showing values?

Re: PaulTurner911 Code

Posted: Tue Jul 09, 2013 2:01 pm
by lnevo
Its only showing a value since Saturday. I dont' see any reference to the Actinic channel in the last code posted... Your PWMD looks nice though :)

Is it possible you overrode it somewhere or changed something in your code?

Re: PaulTurner911 Code

Posted: Wed Jul 17, 2013 12:32 pm
by Paulturner911
My WP40 seems to zero out at some point and I reboot the controller to get it working. After a few days, its at zero again. ANy help would be great.

Re: PaulTurner911 Code

Posted: Wed Jul 17, 2013 1:33 pm
by lnevo
This seems to not be an uncommon problem...

Re: PaulTurner911 Code

Posted: Wed Jul 24, 2013 7:34 pm
by Paulturner911
lnevo wrote:I dont understand your scheduling...

For the record the timer stays at 0 during feeding mode so it doesn't start incrementing until feeding mode is over.

So whatever number is set is plus your feeding mode time already...

You want ntm running while your return pumps are off??? So confused..

If i recall we shortened feed mode to 15 minutes and extended the wavemaker time so that wavemakers were off for 30 minutes but returns kicked back on before. Once that was done we kicked in NTM. What you describe sounds way different
Revisiting this, I would like to switch the order in which the two pumps are activated. I WOULD like NTM to turn on 15min before the return pump comes on. The reason is when I spot feed my corals I feed heavy and the fish come back out once the pumps kick on to eat what's being stirred up. To recap when I activate my feedmode it runs for 15min with no flow, then 15min in to the NTM the returns should kick on.


I think I could make it work by setting the mem loc for feed time to 30min and making some changes to:
if (now()-feeding<=900) {
  // 30 minutes after feeding mode. Pump is off
  ReefAngel.DCPump.UseMemory=false;
  ReefAngel.DCPump.Speed=0;
} else if (now()-feeding<=(900+3600)) {
  // First 30 minutes pump is off, Next 60 is NTM

I'm just not sure why it says 30min but 900 seconds in that section.?!
Thanks

Re: PaulTurner911 Code

Posted: Wed Jul 24, 2013 8:05 pm
by lnevo
The way the whole feeding timer is written it will not work the way you want. I will need to rework the logic. Right now feeding always equals now during feeding mode. So any check on that number will not reflect how long into feeding mode you are to reenable the return pump. I'll have to re-add the static boolean so that we only update feeding once,.. Give me some time to work on it.l

Re: PaulTurner911 Code

Posted: Wed Jul 24, 2013 8:08 pm
by lnevo
lnevo wrote:
Changed extension of feeding mode to 15 minutes so total duration is 30. Feel free to make the 900 back to 1800.

Fixed the timer issue you had as well...sorry bout that one.
Force night mode to Constant instead of whatever is default mode (NTM was today's mode.)

Re: PaulTurner911 Code

Posted: Thu Jul 25, 2013 6:06 am
by Paulturner911
lnevo wrote:
lnevo wrote:
Changed extension of feeding mode to 15 minutes so total duration is 30. Feel free to make the 900 back to 1800.

Fixed the timer issue you had as well...sorry bout that one.
Force night mode to Constant instead of whatever is default mode (NTM was today's mode.)
Ok, so we changed to 1800 to 900 but never changed the comment line?

Re: PaulTurner911 Code

Posted: Thu Jul 25, 2013 7:51 am
by lnevo
Correct. Was trying to match up with what you were trying to do. I didn't change the comments.

Re: PaulTurner911 Code

Posted: Thu Jul 25, 2013 7:55 am
by Paulturner911
Thanks Bud!!!!

Re: PaulTurner911 Code

Posted: Tue Jul 30, 2013 6:42 pm
by Paulturner911
Any chance you had time to revise the code and implement the boolean?

Re: PaulTurner911 Code

Posted: Tue Jul 30, 2013 7:28 pm
by lnevo
Sorry i haven't yet, it fell off my radar. Give me a bit still, been super busy and tomorrow I am picking up my new mandarin! Nice and fat and trained to eat frozen! So I'll be busy holding the fish bag on the train home :)

Re: PaulTurner911 Code

Posted: Wed Jul 31, 2013 7:09 am
by Paulturner911
Thanks! No rush by any means.
I guess Ive been lucky, my mandrin eats ANYTHING!!
TRAIN?!? Where do you live?

Re: PaulTurner911 Code

Posted: Wed Jul 31, 2013 9:36 am
by lnevo
Long Island Rail Road to manhattan every day. Fun. Not.

Re: PaulTurner911 Code

Posted: Thu Aug 01, 2013 3:04 pm
by lnevo
Ok, so this should do...

0:00 Feeding Mode Start (all pumps off)
0:15 Smart_NTM
0:30 Feeding Mode End (return pump on)
1:15 Smart_NTM end / Resume previous mode

Good Luck, keep me posted.

Code: Select all

// Set timer when in feeding mode
static boolean feedingStarted;
static unsigned long feeding;
if (ReefAngel.DisplayedMenu==FEEDING_MODE && !feedingStarted) {
    feedingStarted=true;
    feeding = now();
} else {
  feedingStarted=false;
}

// Feeding Mode is 30 minutes
if (now()-feeding<=900) { 
  // First 15 minutes after feeding mode. Pump is off
  ReefAngel.DCPump.UseMemory=false;
  ReefAngel.DCPump.Speed=0;
} else if (now()-feeding<=(900+3600)) { 
  // NTM after 15 minutes for the next 60 minutes
  ReefAngel.DCPump.UseMemory=false;
  ReefAngel.DCPump.Mode=NutrientTransport;
  ReefAngel.DCPump.Speed=InternalMemory.DCPumpSpeed_read(); // Resume previous speed

Re: PaulTurner911 Code

Posted: Thu Aug 01, 2013 3:19 pm
by Paulturner911
Im getting an error 'redeclaration of long unsinged in feeding.

Here is my complete 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 <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
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = Port1Bit | Port2Bit | Port7Bit | Port8Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port1Bit | Port2Bit | Port7Bit | Port8Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = Port2Bit | Port3Bit | Port7Bit | Port8Bit;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port3Bit | Port7Bit | Port8Bit;
// 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

////// Place additional initialization code below here


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

void loop()
{
ReefAngel.DayLights( Port1 ); // Return Pump
ReefAngel.StandardFan( Port2 ); // Canopy Fans
ReefAngel.ActinicLights( Port3 ); // Actinic LEDS
//Port4 Kalk/ATO
//Port5 Kalk Stir
//Port 6 NOT USED (Possibly Skimmer)
ReefAngel.DayLights( Port7 ); // MH 1
ReefAngel.DayLights( Port8 ); //MH 2
//Moonlight Phase 9pm-10am (CH4-CH5)
if ( (hour() >=10) && (hour() <21) ) 
ReefAngel.PWM.SetChannel( 4,(0) );
else 
ReefAngel.PWM.SetChannel( 4, MoonPhase() );
if ( (hour() >=10) && (hour() <21) ) 
ReefAngel.PWM.SetChannel( 5,(0) );
else
ReefAngel.PWM.SetChannel( 5, MoonPhase() );

//Over Flow Protection
if (ReefAngel.HighATO.IsActive())
ReefAngel.Relay.On(Port1);
else
ReefAngel.Relay.Off(Port1);

//ATO Protection
if (ReefAngel.LowATO.IsActive())
ReefAngel.Relay.On(Port4);
else
ReefAngel.Relay.Off(Port4);

//Kalk Dose 60sec @ 11pm-12pm (every 15min)
if (hour() >=23 || hour() < 12)
ReefAngel.Relay.Set(Port4, now()%900<60);
else
ReefAngel.Relay.Off(Port4);

//Kalk Stir 12pm-1pm
if (hour() >=12 & hour() < 13)
ReefAngel.Relay.On(Port5);
else
ReefAngel.Relay.Off(Port5);


ReefAngel.DCPump.UseMemory = true;
ReefAngel.DCPump.DaylightChannel = Sync;
////// Place your custom code below here

///// Place your custom code below here

// Add random mode if we set to Mode to 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, TidalSwell, ShortPulse, NutrientTransport };

if (now()%SECS_PER_DAY==0 || changeMode==true) { // Change at midnight or if controller rebooted
rmode=random(100)%sizeof(modes); // Change the mode once per day to pick from our array
changeMode=false;
}

// Set timer when in feeding mode
static unsigned long feeding;
if (ReefAngel.DisplayedMenu==FEEDING_MODE) {
feeding = now();
}

// Set timer when in feeding mode
static boolean feedingStarted;
static unsigned long feeding;
if (ReefAngel.DisplayedMenu==FEEDING_MODE && !feedingStarted) {
    feedingStarted=true;
    feeding = now();
} else {
  feedingStarted=false;
}

// Feeding Mode is 30 minutes
if (now()-feeding<=900) { 
  // First 15 minutes after feeding mode. Pump is off
  ReefAngel.DCPump.UseMemory=false;
  ReefAngel.DCPump.Speed=0;
} else if (now()-feeding<=(900+3600)) { 
  // NTM after 15 minutes for the next 60 minutes
  ReefAngel.DCPump.UseMemory=false;
  ReefAngel.DCPump.Mode=NutrientTransport;
  ReefAngel.DCPump.Speed=InternalMemory.DCPumpSpeed_read(); // Resume previous speed
  // Night mode (go to 30%)
  ReefAngel.DCPump.UseMemory=false;
  ReefAngel.DCPump.Mode=Constant;
  ReefAngel.DCPump.Speed=30;
} else if (InternalMemory.DCPumpMode_read()==11) { 
  // Custom Mode and nothing else going on
  ReefAngel.DCPump.UseMemory=false;
  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

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

void DrawCustomMain()
{
int x,y;
char text[10];
// Dimming Expansion
x = 15;
y = 2;
for ( int a=0;a<6;a++ )
{
if ( a>2 ) x = 75;
if ( a==3 ) y = 2;
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x,y,"Ch :" );
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x+12,y,a );
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,x+24,y,ReefAngel.PWM.GetChannelValue(a) );
y += 10;
}
pingSerial();

// Parameters
#if defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 43, ReefAngel.Params,
ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue() );
#else // defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 43, ReefAngel.Params );
#endif // defined DisplayLEDPWM && ! defined RemoveAllLights
pingSerial();

// Main Relay Box
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
ReefAngel.LCD.DrawOutletBox( 12, 84, TempRelay );
pingSerial();

// Date and Time
ReefAngel.LCD.DrawDate( 6, 122 );
pingSerial();
}

void DrawCustomGraph()
{
}

Re: PaulTurner911 Code

Posted: Thu Aug 01, 2013 3:21 pm
by lnevo
You didn't delete this part...

// Set timer when in feeding mode
static unsigned long feeding;
if (ReefAngel.DisplayedMenu==FEEDING_MODE) {
feeding=now();
}