Page 1 of 2

expansion relay box problem

Posted: Tue Jan 20, 2015 6:39 am
by sesame
as my dimming expansion have some free port, i DIY a expansion relay box myself to control T5.
previous is fine, but as today i connected with new salinity module and changed ports sequence. my relay box act very strange as shutdown randomly or sometime flash on as well.
im not sure is there any problem with my code as shown below. (checked relay box, dimming expansion, or RA + works fine individually)

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>

// Define Relay Ports by Name
#define Return             1
#define ATOPump            2
#define Skimmer            3
#define ZeovitShake        4
#define Wavepump1          5
#define Wavepump2          6
#define Relay_Box2         7
#define Heater             8

#define T5_Channel1        Box1_Port1
#define T5_Channel2        Box1_Port2
#define T5_Channel3        Box1_Port3
#define ZEO_ST3            Box1_Port4
#define ZEO_SP             Box1_Port5
#define CaHCO3             Box1_Port6
#define ZEO_BB             Box1_Port7
#define ZEO_KB             Box1_Port8



// Define Custom Memory Locations

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


void setup()
{
    // This must be the first line
    ReefAngel.Init(); //Initialize controller
    ReefAngel.SetTemperatureUnit( Celsius );  // set to Celsius Temperature
    
    ReefAngel.Use2014Screen();  // Let's use 2014 Screen 
    ReefAngel.AddSalinityExpansion();  // Salinity Expansion Module

    
    // Ports toggled in Feeding Mode
    ReefAngel.FeedingModePorts = Port1Bit | Port2Bit | Port3Bit | Port5Bit | Port6Bit | Port8Bit;
    // Ports toggled in Water Change Mode
    ReefAngel.WaterChangePorts = Port1Bit | Port2Bit;
    // Ports toggled when Lights On / Off menu entry selected
    ReefAngel.LightsOnPorts = 0;
    // Ports turned off when Overheat temperature exceeded
    ReefAngel.OverheatShutoffPorts = Port8Bit;  
    // Use T1 probe as temperature and overheat functions
    ReefAngel.TempProbe = T3_PROBE;
    ReefAngel.OverheatProbe = T2_PROBE;
    
    // Feeeding and Water Change mode speed
    ReefAngel.DCPump.DaylightChannel = Sync;
    ReefAngel.DCPump.ActinicChannel = AntiSync;
    ReefAngel.DCPump.ExpansionChannel[0] = None;
    ReefAngel.DCPump.ExpansionChannel[1] = None;
    ReefAngel.DCPump.ExpansionChannel[2] = None;
    ReefAngel.DCPump.ExpansionChannel[3] = None;
    ReefAngel.DCPump.ExpansionChannel[4] = None;
    ReefAngel.DCPump.ExpansionChannel[5] = None;
    ReefAngel.DCPump.FeedingSpeed=0;
    ReefAngel.DCPump.WaterChangeSpeed=0;

    // Ports that are always on
    ReefAngel.Relay.On(Return);
    ReefAngel.Relay.On(Wavepump1);
    ReefAngel.Relay.On(Wavepump2);
    ReefAngel.Relay.On(Relay_Box2);
    
    ////// Place additional initialization code below here
    
    ReefAngel.CustomLabels[0]="ReturnPump"; 
    ReefAngel.CustomLabels[1]="ATOPump"; 
    ReefAngel.CustomLabels[2]="Skimmer"; 
    ReefAngel.CustomLabels[3]="ZeovitShake"; 
    ReefAngel.CustomLabels[4]="WavePump1"; 
    ReefAngel.CustomLabels[5]="WavePump2"; 
    ReefAngel.CustomLabels[6]="Relay_Box2"; 
    ReefAngel.CustomLabels[7]="Heater"; 

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

void loop()
{
  //single ATO 
    ReefAngel.SingleATO(true,ATOPump,90,1);
    ReefAngel.StandardHeater(Heater);
    ReefAngel.Relay.DelayedOn(Skimmer);

    // T5 light setup
    //ReefAngel.MoonLights(LunaLED); 
    ReefAngel.DosingPumpRepeat1(ZeovitShake);
    ReefAngel.StandardLights(T5_Channel2);
    ReefAngel.PWM.SetChannel(0,ReefAngel.Relay.Status(T5_Channel1)*100);
    ReefAngel.DayLights(T5_Channel1);
    ReefAngel.PWM.SetChannel(1,ReefAngel.Relay.Status(T5_Channel3)*100);
    ReefAngel.ActinicLights(T5_Channel3);
    ReefAngel.PWM.SetChannel(2,ReefAngel.Relay.Status(T5_Channel2)*100);


    //dosing pump setup
    if (hour()==22 && minute()==31 && second()<26) //Dosing ST3 at 22:31
    {
      ReefAngel.Relay.On(ZEO_ST3);
    }
    else if (hour()==6 && minute()==31 && second()<26) //Dosing ST3 at 6:31
    {
      ReefAngel.Relay.On(ZEO_ST3);
    }
    else
    {
      ReefAngel.Relay.Off(ZEO_ST3);
    }
    ReefAngel.PWM.SetChannel(3,ReefAngel.Relay.Status(ZEO_ST3)*100);
      
    if (hour()==22 && minute()==32 && second()<50)
    {
    ReefAngel.Relay.On(ZEO_SP);
    }
    else
    {
    ReefAngel.Relay.Off(ZEO_SP);
    }
    ReefAngel.PWM.SetChannel(4,ReefAngel.Relay.Status(ZEO_SP)*100);
    
    ReefAngel.DosingPumpRepeat2(CaHCO3);
    ReefAngel.PWM.SetChannel(5,ReefAngel.Relay.Status(CaHCO3)*100);

        
    
    //wave pump setup
    ReefAngel.DCPump.UseMemory = true;
    
    if (now() % SECS_PER_DAY >= 8 * SECS_PER_HOUR && now() % SECS_PER_DAY < (8 * SECS_PER_HOUR + 10 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(Lagoon,60,20);//Set 6105 to 60% speed with  pulse in Lagoon Mode from 9:00~9:10
        }
        
       else if (now() % SECS_PER_DAY >= (8 * SECS_PER_HOUR + 10 * SECS_PER_MIN) && now() % SECS_PER_DAY < (10 * SECS_PER_HOUR + 30 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(TidalSwell,60,20); //Set 6105 to 55% speed with 20ms pulse in Tidal Swell Mode
        }    
      
       else if (now() % SECS_PER_DAY >= (10 * SECS_PER_HOUR + 30 * SECS_PER_MIN)  && now() % SECS_PER_DAY < (11 * SECS_PER_HOUR + 10 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(LongPulse,55,15);//Set 6105 to 60% speed with  pulse in ReefCrest Mode 
        }
        
        else if (now() % SECS_PER_DAY >= (11 * SECS_PER_HOUR + 10 * SECS_PER_MIN)  && now() % SECS_PER_DAY < (12 * SECS_PER_HOUR + 0 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(ReefCrest,60,20);;//Set 6105 to 55% speed with Long pulse Mode 
        }
        
        else if (now() % SECS_PER_DAY >= (12 * SECS_PER_HOUR + 0 * SECS_PER_MIN) && now() % SECS_PER_DAY < 15 * SECS_PER_HOUR )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(TidalSwell,55,20); //Set 6105 to 45% speed with 20ms pulse in Tidal Swell Mode
        }
        
        else if (now() % SECS_PER_DAY >= 15 * SECS_PER_HOUR  && now() % SECS_PER_DAY < (17 * SECS_PER_HOUR + 30 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(ReefCrest,60,20);//Set RW8 to 40% speed with Lagoon Pulse Mode
        }
        
        else if (now() % SECS_PER_DAY >= (17 * SECS_PER_HOUR + 30 * SECS_PER_MIN)  && now() % SECS_PER_DAY < (18 * SECS_PER_HOUR + 30 * SECS_PER_MIN))
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(ShortPulse,70,34);//Set 6105 to 65% speed with ShortPulse Mode
        }
        
        else if (now() % SECS_PER_DAY >= (18 * SECS_PER_HOUR + 30 * SECS_PER_MIN)  && now() % SECS_PER_DAY < (19 * SECS_PER_HOUR + 00 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(Lagoon,60,20);//Set 6105 to 55% speed with  pulse in Lagoon Mode 
        }        
        
        else if (now() % SECS_PER_DAY >= (19 * SECS_PER_HOUR + 0 * SECS_PER_MIN) && now() % SECS_PER_DAY < 20 * SECS_PER_HOUR )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(TidalSwell,50,20); //Set 6105 to 85% speed with 20ms pulse in Tidal Swell Mode
        }    
        
        else if (now() % SECS_PER_DAY >= 20 * SECS_PER_HOUR  && now() % SECS_PER_DAY < (22 * SECS_PER_HOUR + 30 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(ReefCrest,55,20);//Set 6105 to 70% speed with Lagoon Pulse Mode
        } 
        
        else if (now() % SECS_PER_DAY >= (22 * SECS_PER_HOUR + 30 * SECS_PER_MIN)  && now() % SECS_PER_DAY < (22 * SECS_PER_HOUR + 35 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(Lagoon,70,20);//Set 6105 to 90% speed with  pulse in Lagoon Mode, dossing coral feed.
        } 
                
       else 
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(NutrientTransport,35,30);
        } 
        
    // Set timer when in feeding mode
    static unsigned long feeding;
    if (ReefAngel.DisplayedMenu==FEEDING_MODE) feeding=now();
    if (now()-feeding< 1 *SECS_PER_HOUR) { 
    // Continue NTM for the 60 minutes
    ReefAngel.DCPump.UseMemory=false;
    ReefAngel.DCPump.SetMode(NutrientTransport,35,30);
    }
    
    //Autofeeder 
    if ( ((hour() == 18)) && (minute() == 58) &&(second() == 30) ) ReefAngel.FeedingModeStart();
    if ( ((hour() == 9)) && (minute() == 28) &&(second() == 0) ) ReefAngel.FeedingModeStart();
    if ( ((hour() == 14)) && (minute() == 28) &&(second() == 0) ) ReefAngel.FeedingModeStart();
    //Skimmer off 1.5 hours when coral feeding.
    if (now()%SECS_PER_DAY >= (22 * SECS_PER_HOUR + 30 * SECS_PER_MIN)  && now()%SECS_PER_DAY < (23 * SECS_PER_HOUR + 30 * SECS_PER_MIN) )
    {
      ReefAngel.Relay.Off(Skimmer); 
    } 

    ////// Place your custom code below here
    ReefAngel.UseFlexiblePhCalibration();
  // Power Outage - turn off everything

  // Turn off Skimmer if Return pump has been shutoff.   
  if (!ReefAngel.Relay.Status(Return)) {
      ReefAngel.Relay.Off(Skimmer);
      ReefAngel.Relay.Off(Heater);
  }

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

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

Re: expansion relay box problem

Posted: Tue Jan 20, 2015 6:41 am
by sesame
and also connect with hub. im not sure, new connected hub and salinity module will effect other parts or not

Re: expansion relay box problem

Posted: Wed Jan 21, 2015 7:34 am
by sesame
up

Re: expansion relay box problem

Posted: Wed Jan 21, 2015 9:49 am
by rimai
Is it the DIY or the main relay box doing that?

Re: expansion relay box problem

Posted: Wed Jan 21, 2015 10:07 am
by sesame
only main box flash in some port. What I fig out is port2(ato), port4(zeovit) port7 (box2). Other port may have same problem but I can't notice. It's acting like a second flash on off randomly.
I check out some other posts mentioned similar problem. But can't be sure if could be sort out.
This issue only happened after plugged senility and hub

Re: expansion relay box problem

Posted: Wed Jan 21, 2015 12:28 pm
by rimai
How often does this happen?
Can you remove the salinity and leave the hub and dimming module to see what happens?
If you do not get any problems, try just the hub and salinity. Do you get the same problem?

Re: expansion relay box problem

Posted: Wed Jan 21, 2015 3:26 pm
by sesame
Ok will have a try

Re: expansion relay box problem

Posted: Wed Jan 21, 2015 3:47 pm
by sesame
Flash occurred randomly, one or two times per hour. Will try disconnect other expansion module tomorrow

expansion relay box problem

Posted: Sun Jan 25, 2015 10:07 am
by sesame
checked with RA several hours today. Only Have issue when connected hub and dimming module in same time. Dimming module and salinity module working fine without hub.
How would I do to sort it out?

Re: expansion relay box problem

Posted: Sun Jan 25, 2015 11:17 am
by rimai
Does it work right with the hub and the salinity expansion module?

Re: expansion relay box problem

Posted: Sun Jan 25, 2015 12:53 pm
by cosmith71
I had a similar problem. I replaced the VGA cable with a short, heavy, shielded one and it seems to have fixed it.

--Colin

Re: expansion relay box problem

Posted: Tue Jan 27, 2015 6:03 pm
by sesame
rimai wrote:Does it work right with the hub and the salinity expansion module?
It's working proper with husband salinity module.

Re: expansion relay box problem

Posted: Sat Jan 31, 2015 8:29 pm
by sesame
change code today, but doesnt act right way.

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>

// Define Relay Ports by Name
#define Return             1
#define T5_Channel1        2
#define T5_Channel2        3
#define T5_Channel3        4
#define Wavepump1          5
#define Wavepump2          6
#define RW_PUMP            7
#define Skimmer            8

#define ATOPump            Box1_Port1  //16Ch Port0
#define Heater             Box1_Port2  //16Ch Port1
#define ZeovitShake        Box1_Port3  //16Ch Port2
#define WaterChange        Box1_Port4  //16Ch Port3
#define None2              Box1_Port5  //16Ch Port4
#define None3              Box1_Port6  //16Ch Port5
#define None4              Box1_Port7  //16Ch Port6
#define None5              Box1_Port8  //16Ch Port7

#define CaCl2              Box2_Port1  //16Ch Port8
#define MgCl2              Box2_Port2  //16Ch Port9
#define CaHCO3             Box2_Port3  //16Ch Port10
#define ZEO_ST3            Box2_Port4  //16Ch Port11
#define ZEO_SP             Box2_Port5  //16Ch Port12
#define ZEO_SNOW           Box2_Port6  //16Ch Port13
#define ZEO_CB             Box2_Port7  //16Ch Port14
#define ZEO_BB             Box2_Port8  //16Ch Port15


// Define Custom Memory Locations

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


void setup()
{
    // This must be the first line
    ReefAngel.Init(); //Initialize controller
    ReefAngel.SetTemperatureUnit( Celsius );  // set to Celsius Temperature
    
    ReefAngel.Use2014Screen();  // Let's use 2014 Screen 
    ReefAngel.AddSalinityExpansion();  // Salinity Expansion Module
    ReefAngel.Add16ChPWM();//add 16 channel dimming module

    
    // Ports toggled in Feeding Mode
    ReefAngel.FeedingModePorts = Box0_Port1 | Box0_Port5 | Box0_Port6 | Box0_Port7 | Box0_Port8 | Box1_Port1 | Box1_Port2;
    // Ports toggled in Water Change Mode
    ReefAngel.WaterChangePorts = Box0_Port1 | Box2_Port1;
    // Ports toggled when Lights On / Off menu entry selected
    ReefAngel.LightsOnPorts = 0;
    // Ports turned off when Overheat temperature exceeded
    ReefAngel.OverheatShutoffPorts = Box1_Port2;
    // Use T1 probe as temperature and overheat functions
    ReefAngel.TempProbe = T3_PROBE;
    ReefAngel.OverheatProbe = T2_PROBE;
    
    // Feeeding and Water Change mode speed
    ReefAngel.DCPump.DaylightChannel = Sync;
    ReefAngel.DCPump.ActinicChannel = AntiSync;
    //ReefAngel.DCPump.ExpansionChannel[0] = Sync;
    //ReefAngel.DCPump.ExpansionChannel[1] = AntiSync;
    //ReefAngel.DCPump.ExpansionChannel[2] = None;
    //ReefAngel.DCPump.ExpansionChannel[3] = None;
    //ReefAngel.DCPump.ExpansionChannel[4] = None;
    //ReefAngel.DCPump.ExpansionChannel[5] = None;

    
    ReefAngel.DCPump.FeedingSpeed=0;
    ReefAngel.DCPump.WaterChangeSpeed=0;

    // Ports that are always on
    ReefAngel.Relay.On(Return);
    ReefAngel.Relay.On(Wavepump1);
    ReefAngel.Relay.On(Wavepump2);
    ReefAngel.Relay.On(RW_PUMP);
    
    ////// Place additional initialization code below here
    
    ReefAngel.CustomLabels[0]="ReturnPump"; 
    ReefAngel.CustomLabels[1]="T5_Channel1"; 
    ReefAngel.CustomLabels[2]="T5_Channel2"; 
    ReefAngel.CustomLabels[3]="T5_Channel3"; 
    ReefAngel.CustomLabels[4]="WavePump1"; 
    ReefAngel.CustomLabels[5]="WavePump2"; 
    ReefAngel.CustomLabels[6]="RW Pump"; 
    ReefAngel.CustomLabels[7]="Skimmer"; 

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

void loop()
{
    //single ATO 
    ReefAngel.SingleATO(true,ATOPump,90,1);
    ReefAngel.PWM.Set16ChannelRaw(0,ReefAngel.Relay.Status(ATOPump)*4095);
    //Heater
    ReefAngel.StandardHeater(Heater);
    ReefAngel.PWM.Set16ChannelRaw(1,ReefAngel.Relay.Status(Heater)*4095);
    //ZeovitShake
    ReefAngel.Relay.Set(ZeovitShake,hour()==0 && minute()==0 && second()<30);
    ReefAngel.Relay.Set(ZeovitShake,hour()==6 && minute()==0 && second()<30);
    ReefAngel.Relay.Set(ZeovitShake,hour()==12 && minute()==0 && second()<30);
    ReefAngel.Relay.Set(ZeovitShake,hour()==18 && minute()==0 && second()<30);
    ReefAngel.PWM.Set16ChannelRaw(2,ReefAngel.Relay.Status(ZeovitShake)*4095);
    
    ReefAngel.Relay.DelayedOn(Skimmer);

    // T5 light setup
    ReefAngel.StandardLights(T5_Channel2);
    ReefAngel.DayLights(T5_Channel1);
    ReefAngel.ActinicLights(T5_Channel3);

    //other Relay setup
    ReefAngel.PWM.Set16ChannelRaw(3,ReefAngel.Relay.Status(WaterChange)*4095);
    ReefAngel.PWM.Set16ChannelRaw(4,ReefAngel.Relay.Status(None2)*4095);
    ReefAngel.PWM.Set16ChannelRaw(5,ReefAngel.Relay.Status(None3)*4095);
    ReefAngel.PWM.Set16ChannelRaw(6,ReefAngel.Relay.Status(None4)*4095);  
    ReefAngel.PWM.Set16ChannelRaw(7,ReefAngel.Relay.Status(None5)*4095);  

    //dosing pump setup 
    //Main 3    
    ReefAngel.DosingPumpRepeat1(CaCl2);
    ReefAngel.PWM.Set16ChannelRaw(8,ReefAngel.Relay.Status(CaCl2)*4095);
    ReefAngel.DosingPumpRepeat2(MgCl2);
    ReefAngel.PWM.Set16ChannelRaw(9,ReefAngel.Relay.Status(MgCl2)*4095);
    ReefAngel.DosingPumpRepeat3(CaHCO3);
    ReefAngel.PWM.Set16ChannelRaw(10,ReefAngel.Relay.Status(CaHCO3)*4095);
    //ZEO ST3
    ReefAngel.Relay.Set(ZEO_ST3,hour()==22 && minute()==31 && second()<26); //Dosing ST3 at 22:31
    ReefAngel.Relay.Set(ZEO_ST3,hour()==6 && minute()==31 && second()<26); //Dosing ST3 at 6:31
    ReefAngel.PWM.Set16ChannelRaw(11,ReefAngel.Relay.Status(ZEO_ST3)*4095);    
    //ZEO SP    
    ReefAngel.Relay.Set(ZEO_SP,hour()==22 && minute()==32 && second()<50); //Dosing SP at 22:32
    ReefAngel.PWM.Set16ChannelRaw(12,ReefAngel.Relay.Status(ZEO_SP)*4095);
    //ZEO Others Not online
    ReefAngel.PWM.Set16ChannelRaw(13,ReefAngel.Relay.Status(ZEO_SNOW)*4095);
    ReefAngel.PWM.Set16ChannelRaw(14,ReefAngel.Relay.Status(ZEO_CB)*4095);
    ReefAngel.PWM.Set16ChannelRaw(15,ReefAngel.Relay.Status(ZEO_BB)*4095);
    
    
    //wave pump setup    
    if (now() % SECS_PER_DAY >= 8 * SECS_PER_HOUR && now() % SECS_PER_DAY < (8 * SECS_PER_HOUR + 10 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(Lagoon,60,20);//Set 6105 to 60% speed with  pulse in Lagoon Mode from 9:00~9:10
        }
        
       else if (now() % SECS_PER_DAY >= (8 * SECS_PER_HOUR + 10 * SECS_PER_MIN) && now() % SECS_PER_DAY < (10 * SECS_PER_HOUR + 30 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(TidalSwell,60,20); //Set 6105 to 55% speed with 20ms pulse in Tidal Swell Mode
        }    
      
       else if (now() % SECS_PER_DAY >= (10 * SECS_PER_HOUR + 30 * SECS_PER_MIN)  && now() % SECS_PER_DAY < (11 * SECS_PER_HOUR + 10 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(LongPulse,55,15);//Set 6105 to 60% speed with  pulse in ReefCrest Mode 
        }
        
        else if (now() % SECS_PER_DAY >= (11 * SECS_PER_HOUR + 10 * SECS_PER_MIN)  && now() % SECS_PER_DAY < (12 * SECS_PER_HOUR + 0 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(ReefCrest,60,20);;//Set 6105 to 55% speed with Long pulse Mode 
        }
        
        else if (now() % SECS_PER_DAY >= (12 * SECS_PER_HOUR + 0 * SECS_PER_MIN) && now() % SECS_PER_DAY < 15 * SECS_PER_HOUR )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(TidalSwell,55,20); //Set 6105 to 45% speed with 20ms pulse in Tidal Swell Mode
        }
        
        else if (now() % SECS_PER_DAY >= 15 * SECS_PER_HOUR  && now() % SECS_PER_DAY < (17 * SECS_PER_HOUR + 30 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(ReefCrest,60,20);//Set RW8 to 40% speed with Lagoon Pulse Mode
        }
        
        else if (now() % SECS_PER_DAY >= (17 * SECS_PER_HOUR + 30 * SECS_PER_MIN)  && now() % SECS_PER_DAY < (18 * SECS_PER_HOUR + 30 * SECS_PER_MIN))
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(ShortPulse,70,34);//Set 6105 to 65% speed with ShortPulse Mode
        }
        
        else if (now() % SECS_PER_DAY >= (18 * SECS_PER_HOUR + 30 * SECS_PER_MIN)  && now() % SECS_PER_DAY < (19 * SECS_PER_HOUR + 00 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(Lagoon,60,20);//Set 6105 to 55% speed with  pulse in Lagoon Mode 
        }    
        
        else if (now() % SECS_PER_DAY >= (19 * SECS_PER_HOUR + 0 * SECS_PER_MIN) && now() % SECS_PER_DAY < 20 * SECS_PER_HOUR )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(TidalSwell,50,20); //Set 6105 to 85% speed with 20ms pulse in Tidal Swell Mode
        } 
        
        else if (now() % SECS_PER_DAY >= 20 * SECS_PER_HOUR  && now() % SECS_PER_DAY < (22 * SECS_PER_HOUR + 30 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(ReefCrest,55,20);//Set 6105 to 70% speed with Lagoon Pulse Mode
        }
        
        else if (now() % SECS_PER_DAY >= (22 * SECS_PER_HOUR + 30 * SECS_PER_MIN)  && now() % SECS_PER_DAY < (22 * SECS_PER_HOUR + 35 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(Lagoon,70,20);//Set 6105 to 90% speed with  pulse in Lagoon Mode, dossing coral feed.
        }
                
       else 
        {
            ReefAngel.DCPump.SetMode(Sine,50,30);
        }
        
        // Set RW-8 WaveMode
        if (hour() >= 8 && hour() < 9)
        {
            ReefAngel.PWM.SetChannel(0,GyreMode(45,85,60,true));
            ReefAngel.PWM.SetChannel(1,GyreMode(45,85,60,false));
        }
       else if (hour() >= 9 && hour() < 13)
        {
            ReefAngel.PWM.SetChannel(0,TidalSwellMode(85,true));
            ReefAngel.PWM.SetChannel(1,TidalSwellMode(85,false));
        }
       else if (hour() >= 13 && hour() < 17)
        {
            ReefAngel.PWM.SetChannel(0, ElseMode(60,20,true));
            ReefAngel.PWM.SetChannel(1, ElseMode(60,20,false));
        }
       else if (hour() >= 17 && hour() < 22)
        {
            ReefAngel.PWM.SetChannel(0, NutrientTransportMode(50,80,40,true));
            ReefAngel.PWM.SetChannel(1, NutrientTransportMode(50,80,40,false));
        }
       else 
        {
            ReefAngel.PWM.SetChannel(0,SineMode(25,40,40,true));
            ReefAngel.PWM.SetChannel(1,SineMode(25,40,40,false));
        }
        
    // Set timer when in feeding mode
   // static unsigned long feeding;
   // if (ReefAngel.DisplayedMenu==FEEDING_MODE) feeding=now();
   // if (now()-feeding< 1 *SECS_PER_HOUR) { 
    // Continue NTM for the 60 minutes
   // ReefAngel.DCPump.UseMemory=false;
   // ReefAngel.DCPump.SetMode(NutrientTransport,35,30);
   // }
    
    //Autofeeder 
    if ( ((hour() == 18)) && (minute() == 58) &&(second() == 30) ) ReefAngel.FeedingModeStart();
    if ( ((hour() == 9)) && (minute() == 28) &&(second() == 0) ) ReefAngel.FeedingModeStart();
    if ( ((hour() == 14)) && (minute() == 28) &&(second() == 0) ) ReefAngel.FeedingModeStart();
    //Skimmer off 1.5 hours when coral feeding.
    if (now()%SECS_PER_DAY >= (22 * SECS_PER_HOUR + 30 * SECS_PER_MIN)  && now()%SECS_PER_DAY < (23 * SECS_PER_HOUR + 30 * SECS_PER_MIN) )
    {
      ReefAngel.Relay.Off(Skimmer); 
    } 

    ////// Place your custom code below here
    ReefAngel.UseFlexiblePhCalibration();
  // Power Restored - Turn things back on
  // Turn off Skimmer if Return pump has been shutoff.   
  if (!ReefAngel.Relay.Status(Return)) {
      ReefAngel.Relay.Off(Skimmer);
      ReefAngel.Relay.Off(Heater);
  }

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

    // This should always be the last line
    ReefAngel.Portal( "sesame");
    ReefAngel.ShowInterface();
}
Feeding mode will shut down T5 light (relay box 0 port 2~4).
16 CH module channel 5, channel 8, channel 11. always on

no idea whats wrong

Re: expansion relay box problem

Posted: Sat Jan 31, 2015 9:15 pm
by rimai
This is wrong:

Code: Select all

    // Ports toggled in Feeding Mode
    ReefAngel.FeedingModePorts = Box0_Port1 | Box0_Port5 | Box0_Port6 | Box0_Port7 | Box0_Port8 | Box1_Port1 | Box1_Port2;
    // Ports toggled in Water Change Mode
    ReefAngel.WaterChangePorts = Box0_Port1 | Box2_Port1;
    // Ports toggled when Lights On / Off menu entry selected
    ReefAngel.LightsOnPorts = 0;
    // Ports turned off when Overheat temperature exceeded
    ReefAngel.OverheatShutoffPorts = Box1_Port2;
It needs to be something like this:

Code: Select all

      // Ports toggled in Feeding Mode
    ReefAngel.FeedingModePorts = Port1Bit | Port5Bit | Port6Bit | Port7Bit | Port8Bit
    ReefAngel.FeedingModePortsE[0] = Port1Bit | Port2Bit;
    // Ports toggled in Water Change Mode
    ReefAngel.WaterChangePorts = Port1Bit;
    ReefAngel.WaterChangePortsE[1] = Port1Bit;
    // Ports toggled when Lights On / Off menu entry selected
    ReefAngel.LightsOnPorts = 0;
    // Ports turned off when Overheat temperature exceeded
    ReefAngel.OverheatShutoffPortsE[0] = Port2Bit;

Re: expansion relay box problem

Posted: Sun Feb 01, 2015 7:08 am
by sesame
thank you very much, Roberto.
after changed follow as your comment , feeding mode works fine. but still can't fixing relay box problem.
I DIY a relay box due to RA relay box using US socket doesn't match local plug. this RA relay box(High level trigger) is controlled by new 16 ch dimming expansion module (and control DIY dosing pump as well). but doesn't seems to working fine.
as follow Colin suggestion, solved random start in main relay box after changed to a heavy VGA harness. but still have some issue as follow.
1. connect with 16Ch expansion and 6ch expansion with Hub and salinity. 16Ch expansion output not stable, (A: random output PWM signal. B: can't control by mobile app after 1~2 hours, restart RA doesn't work, only re-plug expansion module work).
2. connect with 6ch expansion (only control 2 wavepump by analog) with Hub and salinity. working fine.
3. connect with salinity and hub. working fine.
4. connect with salinity. working fine.

code as below

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>

// Define Relay Ports by Name
#define Return             1
#define T5_Channel1        2
#define T5_Channel2        3
#define T5_Channel3        4
#define Wavepump1          5
#define Wavepump2          6
#define RW_PUMP            7
#define Skimmer            8

#define ATOPump            Box1_Port1  //16Ch Port0
#define Heater             Box1_Port2  //16Ch Port1
#define ZeovitShake        Box1_Port3  //16Ch Port2
#define WaterChange        Box1_Port4  //16Ch Port3
#define None2              Box1_Port5  //16Ch Port4
#define None3              Box1_Port6  //16Ch Port5
#define None4              Box1_Port7  //16Ch Port6
#define None5              Box1_Port8  //16Ch Port7

#define CaCl2              Box2_Port1  //16Ch Port8
#define MgCl2              Box2_Port2  //16Ch Port9
#define CaHCO3             Box2_Port3  //16Ch Port10
#define ZEO_ST3            Box2_Port4  //16Ch Port11
#define ZEO_SP             Box2_Port5  //16Ch Port12
#define ZEO_SNOW           Box2_Port6  //16Ch Port13
#define ZEO_CB             Box2_Port7  //16Ch Port14
#define ZEO_BB             Box2_Port8  //16Ch Port15


// Define Custom Memory Locations

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


void setup()
{
    // This must be the first line
    ReefAngel.Init(); //Initialize controller
    ReefAngel.SetTemperatureUnit( Celsius );  // set to Celsius Temperature
    
    ReefAngel.Use2014Screen();  // Let's use 2014 Screen 
    ReefAngel.AddSalinityExpansion();  // Salinity Expansion Module
    ReefAngel.Add16ChPWM();//add 16 channel dimming module

    
    // Ports toggled in Feeding Mode
    ReefAngel.FeedingModePorts = Port1Bit | Port5Bit | Port6Bit | Port7Bit | Port8Bit;
    ReefAngel.FeedingModePortsE[0] = Port1Bit | Port2Bit;
    // Ports toggled in Water Change Mode
    ReefAngel.WaterChangePorts = Port1Bit;
    ReefAngel.WaterChangePortsE[0] = Port1Bit;
    // Ports toggled when Lights On / Off menu entry selected
    ReefAngel.LightsOnPorts = 0;
    // Ports turned off when Overheat temperature exceeded
    ReefAngel.OverheatShutoffPortsE[0] = Port2Bit;
    // Use T1 probe as temperature and overheat functions
    ReefAngel.TempProbe = T3_PROBE;
    ReefAngel.OverheatProbe = T2_PROBE;
    
    // Feeeding and Water Change mode speed
    ReefAngel.DCPump.DaylightChannel = Sync;
    ReefAngel.DCPump.ActinicChannel = AntiSync;
    //ReefAngel.DCPump.ExpansionChannel[0] = Sync;
    //ReefAngel.DCPump.ExpansionChannel[1] = AntiSync;
    //ReefAngel.DCPump.ExpansionChannel[2] = None;
    //ReefAngel.DCPump.ExpansionChannel[3] = None;
    //ReefAngel.DCPump.ExpansionChannel[4] = None;
    //ReefAngel.DCPump.ExpansionChannel[5] = None;

    
    ReefAngel.DCPump.FeedingSpeed=0;
    ReefAngel.DCPump.WaterChangeSpeed=0;

    // Ports that are always on
    ReefAngel.Relay.On(Return);
    ReefAngel.Relay.On(Wavepump1);
    ReefAngel.Relay.On(Wavepump2);
    ReefAngel.Relay.On(RW_PUMP);
    
    ////// Place additional initialization code below here
    
    ReefAngel.CustomLabels[0]="ReturnPump"; 
    ReefAngel.CustomLabels[1]="T5_Channel1"; 
    ReefAngel.CustomLabels[2]="T5_Channel2"; 
    ReefAngel.CustomLabels[3]="T5_Channel3"; 
    ReefAngel.CustomLabels[4]="WavePump1"; 
    ReefAngel.CustomLabels[5]="WavePump2"; 
    ReefAngel.CustomLabels[6]="RW Pump"; 
    ReefAngel.CustomLabels[7]="Skimmer"; 

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

void loop()
{
    //single ATO 
    ReefAngel.SingleATO(true,ATOPump,90,1);
    ReefAngel.PWM.Set16Channel(0,ReefAngel.Relay.Status(ATOPump)*100);
    //Heater
    ReefAngel.StandardHeater(Heater);
    ReefAngel.PWM.Set16Channel(1,ReefAngel.Relay.Status(Heater)*100);
    //ZeovitShake
    ReefAngel.Relay.Set(ZeovitShake,hour()==0 && minute()==0 && second()<30);
    ReefAngel.Relay.Set(ZeovitShake,hour()==6 && minute()==0 && second()<30);
    ReefAngel.Relay.Set(ZeovitShake,hour()==12 && minute()==0 && second()<30);
    ReefAngel.Relay.Set(ZeovitShake,hour()==18 && minute()==0 && second()<30);
    ReefAngel.PWM.Set16Channel(2,ReefAngel.Relay.Status(ZeovitShake)*100);
    
    ReefAngel.Relay.DelayedOn(Skimmer);

    // T5 light setup
    ReefAngel.StandardLights(T5_Channel2);
    ReefAngel.DayLights(T5_Channel1);
    ReefAngel.ActinicLights(T5_Channel3);

    //other Relay setup
    ReefAngel.PWM.Set16Channel(3,ReefAngel.Relay.Status(WaterChange)*100);
    ReefAngel.PWM.Set16Channel(4,ReefAngel.Relay.Status(None2)*100);
    ReefAngel.PWM.Set16Channel(5,ReefAngel.Relay.Status(None3)*100);
    ReefAngel.PWM.Set16Channel(6,ReefAngel.Relay.Status(None4)*100);  
    ReefAngel.PWM.Set16Channel(7,ReefAngel.Relay.Status(None5)*100);

    //dosing pump setup 
    //Main 3    
    ReefAngel.DosingPumpRepeat1(CaCl2);
    ReefAngel.PWM.Set16Channel(8,ReefAngel.Relay.Status(CaCl2)*100);
    ReefAngel.DosingPumpRepeat2(MgCl2);
    ReefAngel.PWM.Set16Channel(9,ReefAngel.Relay.Status(MgCl2)*100);
    ReefAngel.DosingPumpRepeat3(CaHCO3);
    ReefAngel.PWM.Set16Channel(10,ReefAngel.Relay.Status(CaHCO3)*100);
    //ZEO ST3
    ReefAngel.Relay.Set(ZEO_ST3,hour()==22 && minute()==31 && second()<59); //Dosing ST3 at 22:31
    ReefAngel.Relay.Set(ZEO_ST3,hour()==6 && minute()==31 && second()<59); //Dosing ST3 at 6:31
    ReefAngel.PWM.Set16Channel(11,ReefAngel.Relay.Status(ZEO_ST3)*100);    
    //ZEO SP    
    ReefAngel.Relay.Set(ZEO_SP,hour()==22 && minute()==32 && second()<59); //Dosing SP at 22:32
    ReefAngel.PWM.Set16Channel(12,ReefAngel.Relay.Status(ZEO_SP)*100);
    //ZEO Others Not online
    ReefAngel.PWM.Set16Channel(13,ReefAngel.Relay.Status(ZEO_SNOW)*100);
    ReefAngel.PWM.Set16Channel(14,ReefAngel.Relay.Status(ZEO_CB)*100);
    ReefAngel.PWM.Set16Channel(15,ReefAngel.Relay.Status(ZEO_BB)*100);
    
    
    //wave pump setup    
    if (now() % SECS_PER_DAY >= 8 * SECS_PER_HOUR && now() % SECS_PER_DAY < (8 * SECS_PER_HOUR + 10 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(Lagoon,60,20);//Set 6105 to 60% speed with  pulse in Lagoon Mode from 9:00~9:10
        }
        
       else if (now() % SECS_PER_DAY >= (8 * SECS_PER_HOUR + 10 * SECS_PER_MIN) && now() % SECS_PER_DAY < (10 * SECS_PER_HOUR + 30 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(TidalSwell,60,20); //Set 6105 to 55% speed with 20ms pulse in Tidal Swell Mode
        }    
      
       else if (now() % SECS_PER_DAY >= (10 * SECS_PER_HOUR + 30 * SECS_PER_MIN)  && now() % SECS_PER_DAY < (11 * SECS_PER_HOUR + 10 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(LongPulse,55,15);//Set 6105 to 60% speed with  pulse in ReefCrest Mode 
        }
        
        else if (now() % SECS_PER_DAY >= (11 * SECS_PER_HOUR + 10 * SECS_PER_MIN)  && now() % SECS_PER_DAY < (12 * SECS_PER_HOUR + 0 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(ReefCrest,60,20);;//Set 6105 to 55% speed with Long pulse Mode 
        }
        
        else if (now() % SECS_PER_DAY >= (12 * SECS_PER_HOUR + 0 * SECS_PER_MIN) && now() % SECS_PER_DAY < 15 * SECS_PER_HOUR )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(TidalSwell,55,20); //Set 6105 to 45% speed with 20ms pulse in Tidal Swell Mode
        }
        
        else if (now() % SECS_PER_DAY >= 15 * SECS_PER_HOUR  && now() % SECS_PER_DAY < (17 * SECS_PER_HOUR + 30 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(ReefCrest,60,20);//Set RW8 to 40% speed with Lagoon Pulse Mode
        }
        
        else if (now() % SECS_PER_DAY >= (17 * SECS_PER_HOUR + 30 * SECS_PER_MIN)  && now() % SECS_PER_DAY < (18 * SECS_PER_HOUR + 30 * SECS_PER_MIN))
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(ShortPulse,70,34);//Set 6105 to 65% speed with ShortPulse Mode
        }
        
        else if (now() % SECS_PER_DAY >= (18 * SECS_PER_HOUR + 30 * SECS_PER_MIN)  && now() % SECS_PER_DAY < (19 * SECS_PER_HOUR + 00 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(Lagoon,60,20);//Set 6105 to 55% speed with  pulse in Lagoon Mode 
        }    
        
        else if (now() % SECS_PER_DAY >= (19 * SECS_PER_HOUR + 0 * SECS_PER_MIN) && now() % SECS_PER_DAY < 20 * SECS_PER_HOUR )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(TidalSwell,50,20); //Set 6105 to 85% speed with 20ms pulse in Tidal Swell Mode
        } 
        
        else if (now() % SECS_PER_DAY >= 20 * SECS_PER_HOUR  && now() % SECS_PER_DAY < (22 * SECS_PER_HOUR + 30 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(ReefCrest,55,20);//Set 6105 to 70% speed with Lagoon Pulse Mode
        }
        
        else if (now() % SECS_PER_DAY >= (22 * SECS_PER_HOUR + 30 * SECS_PER_MIN)  && now() % SECS_PER_DAY < (22 * SECS_PER_HOUR + 35 * SECS_PER_MIN) )
        {
            ReefAngel.DCPump.UseMemory=false;
            ReefAngel.DCPump.SetMode(Lagoon,70,20);//Set 6105 to 90% speed with  pulse in Lagoon Mode, dossing coral feed.
        }
                
       else 
        {
            ReefAngel.DCPump.SetMode(Sine,50,30);
        }
        
        // Set RW-8 WaveMode
        if (hour() >= 8 && hour() < 9)
        {
            ReefAngel.PWM.SetChannel(0,GyreMode(45,85,60,true));
            ReefAngel.PWM.SetChannel(1,GyreMode(45,85,60,false));
        }
       else if (hour() >= 9 && hour() < 13)
        {
            ReefAngel.PWM.SetChannel(0,TidalSwellMode(85,true));
            ReefAngel.PWM.SetChannel(1,TidalSwellMode(85,false));
        }
       else if (hour() >= 13 && hour() < 17)
        {
            ReefAngel.PWM.SetChannel(0, ElseMode(60,20,true));
            ReefAngel.PWM.SetChannel(1, ElseMode(60,20,false));
        }
       else if (hour() >= 17 && hour() < 22)
        {
            ReefAngel.PWM.SetChannel(0, NutrientTransportMode(50,80,40,true));
            ReefAngel.PWM.SetChannel(1, NutrientTransportMode(50,80,40,false));
        }
       else 
        {
            ReefAngel.PWM.SetChannel(0,SineMode(25,40,40,true));
            ReefAngel.PWM.SetChannel(1,SineMode(25,40,40,false));
        }
        
    // Set timer when in feeding mode
   // static unsigned long feeding;
   // if (ReefAngel.DisplayedMenu==FEEDING_MODE) feeding=now();
   // if (now()-feeding< 1 *SECS_PER_HOUR) { 
    // Continue NTM for the 60 minutes
   // ReefAngel.DCPump.UseMemory=false;
   // ReefAngel.DCPump.SetMode(NutrientTransport,35,30);
   // }
    
    //Autofeeder 
    if ( ((hour() == 18)) && (minute() == 58) &&(second() == 30) ) ReefAngel.FeedingModeStart();
    if ( ((hour() == 9)) && (minute() == 28) &&(second() == 0) ) ReefAngel.FeedingModeStart();
    if ( ((hour() == 14)) && (minute() == 28) &&(second() == 0) ) ReefAngel.FeedingModeStart();
    //Skimmer off 1.5 hours when coral feeding.
    if (now()%SECS_PER_DAY >= (22 * SECS_PER_HOUR + 30 * SECS_PER_MIN)  && now()%SECS_PER_DAY < (23 * SECS_PER_HOUR + 30 * SECS_PER_MIN) )
    {
      ReefAngel.Relay.Off(Skimmer); 
    }

    ////// Place your custom code below here
    ReefAngel.UseFlexiblePhCalibration();
  // Power Restored - Turn things back on
  // Turn off Skimmer if Return pump has been shutoff.   
  if (!ReefAngel.Relay.Status(Return)) {
      ReefAngel.Relay.Off(Skimmer);
      ReefAngel.Relay.Off(Heater);
  }

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

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

Re: expansion relay box problem

Posted: Sun Feb 01, 2015 8:59 am
by rimai
How are you connecting the relays to the 16ch module?

Re: expansion relay box problem

Posted: Sun Feb 01, 2015 8:17 pm
by sesame
rimai wrote:How are you connecting the relays to the 16ch module?
DIY Relay box has 8 output port, each with a Relay driven by high level trigger signal. Port will get power if 16Ch module output 5v signal.

Re: expansion relay box problem

Posted: Sun Feb 01, 2015 8:33 pm
by rimai
Are you driving the relays directly or you have a driving circuit?

Re: expansion relay box problem

Posted: Sun Feb 01, 2015 9:16 pm
by sesame
i think its directly like parts below
http://www.ebay.com/itm/5V-4-Channel-Re ... 3a9163e856

Re: expansion relay box problem

Posted: Sun Feb 01, 2015 9:43 pm
by rimai
Are you using one of those same boards?

Re: expansion relay box problem

Posted: Sun Feb 01, 2015 10:15 pm
by sesame
board pic shown below, using 2 in DIY relay box, im not sure if you can access below link.
http://www.taobao.com/view_image.php?sp ... dbId=&fv=9
another for dosing pump control. one board control two pump.
http://www.taobao.com/view_image.php?sp ... dbId=&fv=9

Re: expansion relay box problem

Posted: Mon Feb 02, 2015 4:53 am
by sesame
another try today. some updates.
16ch will stuck and doesn't work after plug few hours. not only stuck with dimming channel but all relay (main and DIY) as well (stuck means cant be controlled by iphone app). feeding mode will effect all ports defined except return pump.
still have no idea whats wrong.

Re: expansion relay box problem

Posted: Mon Feb 02, 2015 8:02 am
by sesame
update
DIY relay will random flash if port trigger to on. main relay will random flash in some of ports, cant tell which.
16ch module will lost function after re-plugged 2 hours.

Re: expansion relay box problem

Posted: Mon Feb 02, 2015 9:04 am
by rimai
How long is the USB cables you are using?

Re: expansion relay box problem

Posted: Mon Feb 02, 2015 3:31 pm
by sesame
All new

Re: expansion relay box problem

Posted: Mon Feb 02, 2015 3:35 pm
by cosmith71
Sorry to butt in, but wouldn't it be easier to just use outlet adapters on the RA relay box?

--Colin

Re: expansion relay box problem

Posted: Mon Feb 02, 2015 3:35 pm
by rimai
How long is it?

expansion relay box problem

Posted: Mon Feb 02, 2015 4:27 pm
by sesame
3 come along with 16ch and hub last month. 1 purchased last week cause need a Long
lead for salinity

Re: expansion relay box problem

Posted: Mon Feb 02, 2015 4:51 pm
by sesame
May bad usb cable cause this issue? Should I get some other new one just for try. Or play station 3 cable should work? Seems same connector

Re: expansion relay box problem

Posted: Mon Feb 02, 2015 8:09 pm
by sesame
cosmith71 wrote:Sorry to butt in, but wouldn't it be easier to just use outlet adapters on the RA relay box?

--Colin
need to use Hub. otherwise meaning less for me.
if finally cant work out. i may purchase another relay box. but it's in worse case due to painful experience change all plug to US socket