expansion relay box problem

Do you have a question on how to do something.
Ask in here.
User avatar
cosmith71
Posts: 1437
Joined: Fri Mar 29, 2013 3:51 pm
Location: Oklahoma City

Re: expansion relay box problem

Post 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
sesame
Posts: 71
Joined: Sun Aug 04, 2013 2:29 am

Re: expansion relay box problem

Post by sesame »

rimai wrote:Does it work right with the hub and the salinity expansion module?
It's working proper with husband salinity module.
sesame
Posts: 71
Joined: Sun Aug 04, 2013 2:29 am

Re: expansion relay box problem

Post 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
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: expansion relay box problem

Post 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;
Roberto.
sesame
Posts: 71
Joined: Sun Aug 04, 2013 2:29 am

Re: expansion relay box problem

Post 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();
}
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: expansion relay box problem

Post by rimai »

How are you connecting the relays to the 16ch module?
Roberto.
sesame
Posts: 71
Joined: Sun Aug 04, 2013 2:29 am

Re: expansion relay box problem

Post 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.
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: expansion relay box problem

Post by rimai »

Are you driving the relays directly or you have a driving circuit?
Roberto.
sesame
Posts: 71
Joined: Sun Aug 04, 2013 2:29 am

Re: expansion relay box problem

Post by sesame »

i think its directly like parts below
http://www.ebay.com/itm/5V-4-Channel-Re ... 3a9163e856
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: expansion relay box problem

Post by rimai »

Are you using one of those same boards?
Roberto.
sesame
Posts: 71
Joined: Sun Aug 04, 2013 2:29 am

Re: expansion relay box problem

Post 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
sesame
Posts: 71
Joined: Sun Aug 04, 2013 2:29 am

Re: expansion relay box problem

Post 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.
sesame
Posts: 71
Joined: Sun Aug 04, 2013 2:29 am

Re: expansion relay box problem

Post 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.
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: expansion relay box problem

Post by rimai »

How long is the USB cables you are using?
Roberto.
sesame
Posts: 71
Joined: Sun Aug 04, 2013 2:29 am

Re: expansion relay box problem

Post by sesame »

All new
User avatar
cosmith71
Posts: 1437
Joined: Fri Mar 29, 2013 3:51 pm
Location: Oklahoma City

Re: expansion relay box problem

Post by cosmith71 »

Sorry to butt in, but wouldn't it be easier to just use outlet adapters on the RA relay box?

--Colin
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: expansion relay box problem

Post by rimai »

How long is it?
Roberto.
sesame
Posts: 71
Joined: Sun Aug 04, 2013 2:29 am

expansion relay box problem

Post by sesame »

3 come along with 16ch and hub last month. 1 purchased last week cause need a Long
lead for salinity
sesame
Posts: 71
Joined: Sun Aug 04, 2013 2:29 am

Re: expansion relay box problem

Post 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
sesame
Posts: 71
Joined: Sun Aug 04, 2013 2:29 am

Re: expansion relay box problem

Post 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
sesame
Posts: 71
Joined: Sun Aug 04, 2013 2:29 am

Re: expansion relay box problem

Post by sesame »

i think I find the root cause. Its working fine since disconnect 6ch module about 2 hours ago. Question is how can I setup jumper for these two dimming module. Now I just leave Jp1 blank in 6ch module and plugged JP1 in 16ch module. Is it correct?
sesame
Posts: 71
Joined: Sun Aug 04, 2013 2:29 am

expansion relay box problem

Post by sesame »

Little crash last night. 16ch module turn on all ports from early morning and Over dose alk and ato. May happened from 4am check from portal (sal doesn't work in 4am just 5min ). Over dosing may last 3hours from that and stop manually after wake up
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: expansion relay box problem

Post by rimai »

You need to use the following addresses:
6ch - 0x40 (Jumper off)
16 ch - 0x41 (I can't remember and I don't have one to check)
Use the I2CScanner to check for addresses.
Roberto.
sesame
Posts: 71
Joined: Sun Aug 04, 2013 2:29 am

Re: expansion relay box problem

Post by sesame »

oh that's in correct condition. Still no idea what's wrong
sesame
Posts: 71
Joined: Sun Aug 04, 2013 2:29 am

Re: expansion relay box problem

Post by sesame »

today try many hours with RA+ with different condition.
unplug diy Relay box and dosing pump. but still keep 16ch dimming and 6ch dimming expansion functional.
after about half day of running. all ports in 16ch dimming expansion locked on (all ports stacked with 5V output). but 6ch dimming expansion working fine. flag shown Bus lock. restart doesnt work. unplug hole system works.


unplug diy relay box and dosing pump. change code, let 6ch dimming expansion take over some of 16ch dimming function.
after about half day of running. all ports in dimming expansion locked on, (all ports stacked with 100% output)
flag shown Bus lock. restart doesnt work. unplug hole system works.

looking for bus lock in forum, seems some have issue with RF module.

i will be a vacation for one week this month. I really dont want let my tank working with current condition. need help
rimai
Posts: 12881
Joined: Fri Mar 18, 2011 6:47 pm

Re: expansion relay box problem

Post by rimai »

Are you using the original USB codes?
Make sure the USB cables are all tight and secured.
Did you try different ports in the expansion hub or different combination of USB cables?
Roberto.
sesame
Posts: 71
Joined: Sun Aug 04, 2013 2:29 am

Re: expansion relay box problem

Post by sesame »

Yes changed to all original usb cable.. I just plugged on 6 ch dimming module this and next week. Will have a try after holiday. Don't want tank crash when out of holiday.
Post Reply