-
Posts: 278 Joined: Wed Jan 23, 2013 12:36 pm
|
 Posted: Wed Nov 05, 2014 6:56 pm
- Code: Select all
// This must be the first line ReefAngel.Init(); //Initialize controller // Ports toggled in Feeding Mode ReefAngel.FeedingModePorts = Port1Bit | Port2Bit | Port6Bit | Port7Bit ; // Ports toggled in Water Change Mode ReefAngel.WaterChangePorts = Port1Bit | Port2Bit | Port6Bit | Port7Bit ; // Ports toggled when Lights On / Off menu entry selected ReefAngel.LightsOnPorts = Port3Bit | Port7Bit ; // Ports turned off when Overheat temperature exceeded ReefAngel.OverheatShutoffPorts = Port1Bit | Port3Bit | Port6Bit | Port7Bit ; // 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( Port6 ); ////// Place additional initialization code below here
////// Place additional initialization code above here }
void loop() { ReefAngel.DayLights( Port1 ); // Return Pump //Port 2 Chiller ReefAngel.ActinicLights( Port3 ); // Actinic LEDS //Port4 Kalk/ATO //Port5 Kalk Stir ReefAngel.DayLights( Port6 );// Skimmer ReefAngel.DayLights( Port7 ); // White LEDS //Port8 Empty //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<65); 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; ReefAngel.DCPump.ActinicChannel = AntiSync; ////// 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;
// Add Else Mode definition.. const int Else=16;
// These are the modes we can cycle through. You can add more and even repeat... byte modes[] = { Else, Lagoon, Else, ReefCrest, ShortPulse, LongPulse, 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) { // First 15 minutes after feeding mode stops. Return Pump is off ReefAngel.Relay.Off(Port1); // First 15 minutes after feeding mode stops. Smart_NTM ReefAngel.DCPump.UseMemory=false; ReefAngel.DCPump.Mode=NutrientTransport; } else if (now()-feeding<4500) { // 15 minutes plus 1 hour // Continue NTM for the next 60 minutes (75 minutes total) ReefAngel.DCPump.UseMemory=false; ReefAngel.DCPump.Mode=NutrientTransport; } 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.Duration=InternalMemory.DCPumpDuration_read(); if (modes[rmode]==Else) { ReefAngel.DCPump.UseMemory=false; ReefAngel.DCPump.Mode=Constant; ReefAngel.DCPump.Speed=ElseMode(InternalMemory.DCPumpSpeed_read(),25,true ); // ElseMode on sync mode, Portal Speed Setting +/- 25% } else { 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, 80, TempRelay ); pingSerial();
// Date and Time ReefAngel.LCD.DrawDate( 6, 122 ); pingSerial(); }
void DrawCustomGraph() { } byte ElseMode( byte MidPoint, byte Offset, boolean WaveSync ) { // Static's only initialize the first time they are called static unsigned long LastChange=millis(); // Set the inital time that the last change occurred static int Delay = random( 500, 3000); // Set the initial delay static int NewSpeed = MidPoint; // Set the initial speed static int AntiSpeed = MidPoint; // Set the initial anti sync speed if ((millis()-LastChange) > Delay) // Check if the delay has elapsed { Delay=random(500,5000); // If so, come up with a new delay int ChangeUp = random(Offset); // Amount to go up or down if (random(100)<50) // 50/50 chance of speed going up or going down { NewSpeed = MidPoint - ChangeUp; AntiSpeed = MidPoint + ChangeUp; } else { NewSpeed = MidPoint + ChangeUp; AntiSpeed = MidPoint - ChangeUp; } LastChange=millis(); // Reset the time of the last change } if (WaveSync) { return NewSpeed; } else { return AntiSpeed; } }

|