Wave power is at 80/20 after feeding..why?

Basic / Standard Reef Angel hardware
Post Reply
Smotz
Posts: 412
Joined: Sat Mar 30, 2013 5:02 pm
Location: CT, USA

Wave power is at 80/20 after feeding..why?

Post by Smotz »

'Lo all.

I have this wave routine that sets the power based on time of day, etc. No where do I set 80/20 but that's what it is when I exit feeding mode.
Below is my code..any thoughts?

Code: Select all

// Custom Wave Routine 
// set the wpMode based on what time it is
    if ( (hour() >= 2) && (hour() < 5) ) wpMode=1;       // from 2am - 5am  
    if ( (hour() >= 5) && (hour() < 8) )  wpMode=2;     // from 5am - 8am
    if ( (hour() >= 8) && (hour() < 11) ) wpMode=4;      // from 8am - 11am  Nutrient Transport
    if ( (hour() >= 11) && (hour() < 14) ) wpMode=2;     // from 11a - 2pm
    if ( (hour() >= 14) && (hour() < 17) ) wpMode=1;     // from 2pm - 5pm
    if ( (hour() >= 17) && (hour() < 20) ) wpMode=2;     // from 5pm - 8pm
    if ( (hour() >= 20) && (hour() < 23) ) wpMode=3;     // from 8pm - 11p
    if (hour() >= 23) wpMode=2;                          // from 11pm - midnight 
    if (hour() < 2) wpMode=1;                            // from midnight - 2am
    if (ReefAngel.DisplayedMenu==FEEDING_MODE) wpMode=5;  // Feeding Mode
    if (ReefAngel.DisplayedMenu==WATERCHANGE_MODE) wpMode=6; //Water Change Mode
      
    switch (wpMode) 
    {
    case 1:  wpWavStr=37; wpWavOff=3; break;
    case 2:  wpWavStr=41; wpWavOff=8; break;
    case 3:  wpWavStr=44; wpWavOff=10; break;
    case 4:  wpWavStr=55; wpWavOff=70; break;
    case 5:  wpWavStr=33; wpWavOff=0; break;
    case 6:  wpWavStr=0; wpWavOff=0; break;
    default: wpWavStr=36; wpWavOff=2;
    }
//If 8am - 11am, Nutrient Transport   
    if (wpMode==4)
    {
    ReefAngel.PWM.SetDaylight( NutrientTransportMode(wpWavStr,wpWavOff,7000,true) );
    ReefAngel.PWM.SetActinic ( NutrientTransportMode(wpWavStr,wpWavOff,7000,false) );
    }
    else  
    {
    if (wpMode==5)
    {    
    ReefAngel.PWM.SetDaylight(0);
    ReefAngel.PWM.SetActinic(35);    //// Right wavemaker under feeder
    }
    else
    {
//Set the wave     
    ReefAngel.PWM.SetDaylight( ElseMode(wpWavStr,wpWavOff,true) );
    ReefAngel.PWM.SetActinic( ElseMode(wpWavStr,wpWavOff,false) );
    }}
//end Custom Wave Routine   
Last edited by Smotz on Tue Aug 26, 2014 5:02 am, edited 1 time in total.
Smotz
Posts: 412
Joined: Sat Mar 30, 2013 5:02 pm
Location: CT, USA

Re: Wave power is at 80/20 after feeding..why?

Post by Smotz »

I do have a DC return pump set to my ATO low with the below code - it's power IS set to 80%

Code: Select all

// DC Return Pump using internal memory
    pinMode(lowATOPin,OUTPUT);
    analogWrite(lowATOPin,InternalMemory.LEDPWMActinic_read()*2.55);
// END DC Return Pump
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: Wave power is at 80/20 after feeding..why?

Post by rimai »

I don't see anything out of place. Does it happen all the time?
Roberto.
Smotz
Posts: 412
Joined: Sat Mar 30, 2013 5:02 pm
Location: CT, USA

Re: Wave power is at 80/20 after feeding..why?

Post by Smotz »

rimai wrote:I don't see anything out of place. Does it happen all the time?
Was able to reproduce it three times... then was not able to.

Will test more today. Weird, huh ?
Smotz
Posts: 412
Joined: Sat Mar 30, 2013 5:02 pm
Location: CT, USA

Re: Wave power is at 80/20 DURING LIGHTS ON

Post by Smotz »

Guys, I was able to isolate this further and really need help to figure out why. I have inserted my full code below.
When I turn on "Lights On" which is designated as my fuge light my wave makers (wp -25) go to 20/80% (left & right). When I turn the lights off the wave makers go back to normal.

Further testing / problem isolation:
The wave Strength follows my Actinic PWM value which is what my DC return pump is connected to. I changed Actinic PWM value to 75 and the wave makers went to 20/75 when I turned my "Lights On".



Help me debug please!?

Code: Select all

////  Port 1			Heater
////  Port 2			ATO pump
////  Port 3			Feeder
////  Port 4			Protein Skimmer
////  Port 5			Return Pump
////  Port 6			Wavemakers
////  Port 7                    UV Sterilizer
////  Port 8                    Fan

////  BOX 1 PORT 1              Calcium Doser
////  BOX 1 PORT 2              Alkalinity Doser
////  BOX 1 PORT 8              Fuge Light

#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>

////// Place global variable code below here

#define Heater Port1
#define Topoff Port2
#define Feeder Port3
#define Skimmer Port4
#define Return Port5
#define Wave Port6
#define UVlight Port7
#define Fugelight Port8
#define Fan  Box1_Port8
#define CalcDose  Box1_Port1
#define AlkDose  Box1_Port2

#define FugelightBit   1<<7
#define UVlightBit   1<<6
#define WaveBit   1<<5
#define ReturnBit   1<<4
#define SkimmerBit   1<<3
#define FeederBit   1<<2
#define TopoffBit   1<<1
#define HeaterBit   1<<0

static byte wpMode;
static byte wpWavStr;
static byte wpWavOff;

////// 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 
    ReefAngel.AddMultiChannelWaterLevelExpansion();

// Ports toggled in Feeding Mode
    ReefAngel.FeedingModePorts = SkimmerBit | ReturnBit | TopoffBit | UVlightBit;
// Ports toggled in Water Change Mode
    ReefAngel.WaterChangePorts = HeaterBit | SkimmerBit | ReturnBit | TopoffBit | WaveBit | UVlightBit | FeederBit;
// Ports toggled when Lights On / Off menu entry selected
    ReefAngel.LightsOnPorts = FugelightBit;
// Ports turned off when Overheat temperature exceeded
    ReefAngel.OverheatShutoffPorts = HeaterBit | TopoffBit | SkimmerBit | ReturnBit | WaveBit | UVlightBit | FeederBit;

// Use T1 (SUMP) probe as temperature and overheat functions
    ReefAngel.TempProbe = T1_PROBE;
    ReefAngel.OverheatProbe = T1_PROBE;

// Ports that are always off
    ReefAngel.Relay.Off( Feeder );
    ReefAngel.Relay.Off( Topoff );

// Ports that are always on
    ReefAngel.Relay.On( Box1_Port3 );
    ReefAngel.Relay.On( Box1_Port4 );    
    ReefAngel.Relay.On( Box1_Port5 );
    ReefAngel.Relay.On( Box1_Port6 );
    ReefAngel.Relay.On( Box1_Port7 );  

  ////// Place additional initialization code below here
  
    ReefAngel.CustomLabels[0]="Heater";  
    ReefAngel.CustomLabels[1]="TopOff";  
    ReefAngel.CustomLabels[2]="Feeder";  
    ReefAngel.CustomLabels[3]="Skimmer";  
    ReefAngel.CustomLabels[4]="Return";  
    ReefAngel.CustomLabels[5]="WavePump";  
    ReefAngel.CustomLabels[6]="UV-Light";  
    ReefAngel.CustomLabels[7]="Fuge-Light";
    ReefAngel.CustomLabels[8]="Calc";
    ReefAngel.CustomLabels[9]="Alk";
    ReefAngel.CustomLabels[13]="Fan";
  
  ////// Place additional initialization code above here
}

void loop()
{
    ReefAngel.Relay.On( Return );
    ReefAngel.Relay.On( Wave );
    ReefAngel.Relay.Off( Feeder );
    ReefAngel.StandardHeater( Heater );
    ReefAngel.MoonLights( Fugelight );
    ReefAngel.StandardFan( Fan );
  
////// Place your custom code below here

    ReefAngel.DosingPumpRepeat1( CalcDose );
    ReefAngel.DosingPumpRepeat2( AlkDose );
//// 30,20 = 17.5 ml day
////ReefAngel.DosingPumpRepeat(CalcDose,0,30,20);
////ReefAngel.DosingPumpRepeat(AlkDose,10,30,20);
    
    
    ReefAngel.SalMax=InternalMemory.SalMax_read();  // this allows salinity internal memory changes made one the mobile app to be instant - no reboot needed.
    ReefAngel.PHMin=InternalMemory.PHMin_read();
    ReefAngel.PHMax=InternalMemory.PHMax_read();

    ReefAngel.Relay.DelayedOn(Skimmer,3); 

// Turn the fugelight on if the return is off 
    if (ReefAngel.Relay.Status ( Return ) == 0) ReefAngel.Relay.On( Fugelight );
  
// EMERGENCY SUMP WATER LEVEL BELOW 20% AND WATERCHANGE MODE IS NOT ON AND WAIT FOR CONTROLLER TO BE ON FOR 5 SECONDS
    if ( ReefAngel.WaterLevel.GetLevel(1) <= 25 && ReefAngel.WaterLevel.GetLevel(2) <= 25 && ReefAngel.DisplayedMenu!=WATERCHANGE_MODE && millis() > 5000)
    {
    ReefAngel.Relay.Override(Return,0);
    ReefAngel.Relay.Override(Skimmer,0);
    ReefAngel.Relay.Override(UVlight,0);
    ReefAngel.Relay.Override(Feeder,0);
    ReefAngel.Relay.Override(CalcDose,0);
    ReefAngel.Relay.Override(AlkDose,0);
    ReefAngel.Relay.Override(Fugelight,1);
    }
// END EMERGENCY WATER LEVEL ROUTINE

// Main Top Off
    ReefAngel.WaterLevelATO(1,Topoff,10,85,95);
   
//just to be safe if the water level gets to 150 or greater, override the topoff.
    if ( ReefAngel.WaterLevel.GetLevel(1) > 155 && ReefAngel.WaterLevel.GetLevel(2) >155 ) ReefAngel.Relay.Override (Topoff,0);
// End Main Top Off  

// Feeding Mode
// if the hour is 7a and minute is 30 and seconds is 0 start the feeding mode
    if ( ((hour() == 7)) && (minute() == 30) &&(second() == 0) ) ReefAngel.FeedingModeStart(); 
    if ( ((hour() == 7)) && (minute() == 31) &&(second() == 0) ) ReefAngel.Relay.On(Feeder); //TURN FEEDER RELAY ON at 7:31:00
    if ( ((hour() == 7)) && (minute() == 31) &&(second() == 5) ) ReefAngel.Relay.Off(Feeder); //TURN FEEDER RELAY OFF at 7:31:02
    if ( ((hour() == 7)) && (minute() == 33) &&(second() == 0) ) ReefAngel.Relay.On(Feeder); //TURN FEEDER RELAY ON at 7:33:00
    if ( ((hour() == 7)) && (minute() == 33) &&(second() == 5) ) ReefAngel.Relay.Off(Feeder); //TURN FEEDER RELAY OFF at 7:33:02
// end feeding mode

// Custom Wave Routine 
// set the wpMode based on what time it is
    if ( (hour() >= 2) && (hour() < 5) ) wpMode=1;       // from 2am - 5am  
    if ( (hour() >= 5) && (hour() < 8) )  wpMode=2;     // from 5am - 8am
    if ( (hour() >= 8) && (hour() < 11) ) wpMode=4;      // from 8am - 11am  Nutrient Transport
    if ( (hour() >= 11) && (hour() < 14) ) wpMode=2;     // from 11a - 2pm
    if ( (hour() >= 14) && (hour() < 17) ) wpMode=1;     // from 2pm - 5pm
    if ( (hour() >= 17) && (hour() < 20) ) wpMode=2;     // from 5pm - 8pm
    if ( (hour() >= 20) && (hour() < 23) ) wpMode=3;     // from 8pm - 11p
    if (hour() >= 23) wpMode=2;                          // from 11pm - midnight 
    if (hour() < 2) wpMode=1;                            // from midnight - 2am
    if (ReefAngel.DisplayedMenu==FEEDING_MODE) wpMode=5;  // Feeding Mode
    if (ReefAngel.DisplayedMenu==WATERCHANGE_MODE) wpMode=6; //Water Change Mode
      
    switch (wpMode) 
    {
    case 1:  wpWavStr=35; wpWavOff=2; break;
    case 2:  wpWavStr=37; wpWavOff=3; break;
    case 3:  wpWavStr=40; wpWavOff=4; break;
    case 4:  wpWavStr=40; wpWavOff=50; break;
    case 5:  wpWavStr=33; wpWavOff=0; break;
    case 6:  wpWavStr=0; wpWavOff=0; break;
    default: wpWavStr=36; wpWavOff=2;
    }
//If 8am - 11am, Nutrient Transport   
    if (wpMode==4)
    {
    ReefAngel.PWM.SetDaylight( NutrientTransportMode(wpWavStr,wpWavOff,7000,true) );
    ReefAngel.PWM.SetActinic ( NutrientTransportMode(wpWavStr,wpWavOff,7000,false) );
    }
    else  
    {
    if (wpMode==5)
    {    
    ReefAngel.PWM.SetDaylight(0);
    ReefAngel.PWM.SetActinic(33);    //// Right wavemaker under feeder
    }
    else
    {
//Set the wave     
    ReefAngel.PWM.SetDaylight( ElseMode(wpWavStr,wpWavOff,true) );
    ReefAngel.PWM.SetActinic( ElseMode(wpWavStr,wpWavOff,false) );
    }}
//end Custom Wave Routine   

// DC Return Pump using internal memory
    pinMode(lowATOPin,OUTPUT);
    analogWrite(lowATOPin,InternalMemory.LEDPWMActinic_read()*2.55);
// END DC Return Pump

//  Only turn on UV Sterilizer between 11pm and 4am
    if ( (hour() >= 4) && (hour() < 23) )  // from 4a - 11p
    ReefAngel.Relay.Off(UVlight);
    else ReefAngel.Relay.On(UVlight);

////// Place your custom code above here
 
// This should always be the last line
    ReefAngel.Portal( "Smotz","xxxxx :?: " );
    ReefAngel.ShowInterface();
}

void DrawCustomMain()
{
// Parameters
#if defined DisplayLEDPWM && ! defined RemoveAllLights
    ReefAngel.LCD.DrawMonitor( 15, 5, ReefAngel.Params,
    ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue() );
#else // defined DisplayLEDPWM && ! defined RemoveAllLights
    ReefAngel.LCD.DrawMonitor( 15, 5, ReefAngel.Params );
#endif // defined DisplayLEDPWM && ! defined RemoveAllLights
    pingSerial();
// Salinity
    ReefAngel.LCD.DrawText( COLOR_DARKKHAKI,DefaultBGColor,20,80, "SAL:" );
    ReefAngel.LCD.DrawText( COLOR_DARKKHAKI,DefaultBGColor,44,80, ReefAngel.Params.Salinity );
    pingSerial();
// Main Relay Box
    byte TempRelay = ReefAngel.Relay.RelayData;
    TempRelay &= ReefAngel.Relay.RelayMaskOff;
    TempRelay |= ReefAngel.Relay.RelayMaskOn;
    ReefAngel.LCD.DrawOutletBox( 12, 95, TempRelay );
    pingSerial();
// Relay Expansion
    TempRelay = ReefAngel.Relay.RelayDataE[0];
    TempRelay &= ReefAngel.Relay.RelayMaskOffE[0];
    TempRelay |= ReefAngel.Relay.RelayMaskOnE[0];
    ReefAngel.LCD.DrawOutletBox( 12, 105, TempRelay );
    pingSerial();
// Date and Time
    ReefAngel.LCD.DrawDate( 6, 122 );
    pingSerial();
//draw the mode on the screen
    char buf[16];
    char buf2[16];
    char buf3[32];
    sprintf(buf,"RC %d%% +/- %d%%",wpWavStr,wpWavOff);
    sprintf(buf2,"Wave Mode = %d%",wpMode);
    sprintf(buf3,"Return Power = %d%",InternalMemory.LEDPWMActinic_read());
    ReefAngel.LCD.DrawText(0,255,10,40,buf3);
    ReefAngel.LCD.DrawText(0,255,20,60,buf);
    ReefAngel.LCD.DrawText(0,255,20,50,buf2);
}

void DrawCustomGraph()
{
}
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: Wave power is at 80/20 after feeding..why?

Post by rimai »

Expected behavior for LightsOn.
Maybe we need to turn it off if DCPump is being used.
Can you open an issue on github?
Roberto.
Smotz
Posts: 412
Joined: Sat Mar 30, 2013 5:02 pm
Location: CT, USA

Re: Wave power is at 80/20 after feeding..why?

Post by Smotz »

rimai wrote:Expected behavior for LightsOn.
Maybe we need to turn it off if DCPump is being used.
Can you open an issue on github?
...ummm...not familiar with that process...I'll try..

However, I am not using the DCPump class anywhere..
Smotz
Posts: 412
Joined: Sat Mar 30, 2013 5:02 pm
Location: CT, USA

Re: Wave power is at 80/20 after feeding..why?

Post by Smotz »

issue #185

Interesting - Obviously this has always been this way. I have only noticed it since I cleaned my Jebao wavemakers. What an incredible difference!
Post Reply