-
Posts: 278 Joined: Wed Jan 23, 2013 12:36 pm
|
 Posted: Wed Jul 23, 2014 2:43 pm
Current code below. I am having an issue with the 2 DC pumps, sometimes the screen on the controller shows values but the pumps arent working. Its random, maybe an issue with else mode? How can I activate else mode to see? - 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 | Port6Bit | Port7Bit | Port8Bit; // Ports toggled in Water Change Mode ReefAngel.WaterChangePorts = Port1Bit | Port2Bit | Port6Bit | 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 | Port6Bit | 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 ReefAngel.DayLights( Port6 );//Port 6 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; 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[] = { Lagoon, Else, ReefCrest, TidalSwell, 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, 84, 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; } }

|