Need help on my WP40 and MP40 code

Do you have a question on how to do something.
Ask in here.
Post Reply
Amos Poh
Posts: 107
Joined: Sun Jul 22, 2012 4:51 am
Location: Singapore

Need help on my WP40 and MP40 code

Post by Amos Poh »

Hi i realise that my last schedule on the 24hr to 8hr is not correct.
for example:
1)my MP40 i coded it to run at (ReefCrest,70,30); but dunno why it runs at (NutrientTransport,30,3);
2)my 2x WP40 i coded it to run at ( 1,LongPulseMode(50,80,5,false) ) but it runs at reef crest instead.

What did i code wrongly?



////// Place your custom code below here
if (hour()>=8 && hour()<10)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(ReefCrest,60,30);
}
else if (hour()>=10 && hour()<12)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(ReefCrest,70,30);
}
else if (hour()>=12 && hour()<14)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(ReefCrest,80,20);
}
else if (hour()>=14 && hour()<16)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(ReefCrest,90,10);
}
else if (hour()>=16 && hour()<19)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(NutrientTransport,100,3);
}
else if (hour()>=19 && hour()<20)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(ReefCrest,90,10);
}
else if (hour()>=20 && hour()<22)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(ReefCrest,70,30);
}
else if (hour()>=22 && hour()<24)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(ReefCrest,70,30);
}
else if (hour()>=24 && hour()<8)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(ReefCrest,60,30);
}




if (hour()>=8 && hour()<10)
{
ReefAngel.PWM.SetChannel( 1, ReefCrestMode(50,20,false) );
ReefAngel.PWM.SetChannel( 2, ReefCrestMode(50,20,true) );
}
else if (hour()>=10 && hour()<12)
{
ReefAngel.PWM.SetChannel( 1, ReefCrestMode(60,20,false) );
ReefAngel.PWM.SetChannel( 2, ReefCrestMode(60,20,true) );
}
else if (hour()>=12 && hour()<14)
{
ReefAngel.PWM.SetChannel( 1, ReefCrestMode(70,20,false) );
ReefAngel.PWM.SetChannel( 2, ReefCrestMode(70,20,true) );
}
else if (hour()>=14 && hour()<16)
{
ReefAngel.PWM.SetChannel( 1, ReefCrestMode(80,20,false) );
ReefAngel.PWM.SetChannel( 2, ReefCrestMode(80,20,true) );
}
else if (hour()>=16 && hour()<19)
{
ReefAngel.PWM.SetChannel( 1, NutrientTransportMode(70,100,300,false) );
ReefAngel.PWM.SetChannel( 2, NutrientTransportMode(70,100,300,true) );
}
else if (hour()>=19 && hour()<20)
{
ReefAngel.PWM.SetChannel( 1, ReefCrestMode(90,10,false) );
ReefAngel.PWM.SetChannel( 2, ReefCrestMode(90,10,true) );
}
else if (hour()>=20 && hour()<22)
{
ReefAngel.PWM.SetChannel( 1, ReefCrestMode(70,20,false) );
ReefAngel.PWM.SetChannel( 2, ReefCrestMode(70,20,true) );
}
else if (hour()>=22 && hour()<24)
{
ReefAngel.PWM.SetChannel( 1, ReefCrestMode(70,30,false) );
ReefAngel.PWM.SetChannel( 2, ReefCrestMode(70,30,true) );
}
else if (hour()>=24 && hour()<8)
{
ReefAngel.PWM.SetChannel( 1,LongPulseMode(50,80,5,false) ); // long pulse minimum power at 50% max at 80 lasting for 20 sec Anti Sync
ReefAngel.PWM.SetChannel( 2,LongPulseMode(50,80,5,true) ); // long pulse minimum power at 50% max at 80 lasting for 20 sec Sync
}
User avatar
lnevo
Posts: 5430
Joined: Fri Jul 20, 2012 9:42 am

Re: Need help on my WP40 and MP40 code

Post by lnevo »

Hour only goes from 0-23 24 is really 0...so the last if only needs to have hour()<8
Amos Poh
Posts: 107
Joined: Sun Jul 22, 2012 4:51 am
Location: Singapore

Re: Need help on my WP40 and MP40 code

Post by Amos Poh »

lnevo wrote:Hour only goes from 0-23 24 is really 0...so the last if only needs to have hour()<8

Thanks will this work?
else if (hour()>=22 && hour()<23)
{
ReefAngel.PWM.SetChannel( 1, ReefCrestMode(70,30,false) );
ReefAngel.PWM.SetChannel( 2, ReefCrestMode(70,30,true) );
}
else if (hour()>=23 && hour()<8)
{
ReefAngel.PWM.SetChannel( 1,LongPulseMode(50,80,5,false) ); // long pulse minimum power at 50% max at 80 lasting for 20 sec Anti Sync
ReefAngel.PWM.SetChannel( 2,LongPulseMode(50,80,5,true) ); // long pulse minimum power at 50% max at 80 lasting for 20 sec Sync
}
User avatar
lnevo
Posts: 5430
Joined: Fri Jul 20, 2012 9:42 am

Re: Need help on my WP40 and MP40 code

Post by lnevo »

No. The last section wont work. Change && to || because hour cant be greater than 23 AND less than 8. || means OR which will work.

Your previous code was fine but you just needed hour()<8 in the if.
Amos Poh
Posts: 107
Joined: Sun Jul 22, 2012 4:51 am
Location: Singapore

Re: Need help on my WP40 and MP40 code

Post by Amos Poh »

lnevo wrote:No. The last section wont work. Change && to || because hour cant be greater than 23 AND less than 8. || means OR which will work.

Your previous code was fine but you just needed hour()<8 in the if.
Thanks for the help, sorry i am a total idiot when it comes to coding. will the below works?
else if (hour()>=22 || hour()<23)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(ReefCrest,70,30);
}
else if (hour()<8)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(ReefCrest,60,30);
}
User avatar
lnevo
Posts: 5430
Joined: Fri Jul 20, 2012 9:42 am

Re: Need help on my WP40 and MP40 code

Post by lnevo »

Yes, but your now missing the hour between 11pm and midnight. You essentially said if hour()==22

Try this:

Code: Select all

Thanks for the help, sorry i am a total idiot when it comes to coding. will the below works?
else if (hour()>=22 || hour()<23)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(ReefCrest,70,30);
}
else if (hour()<8)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(ReefCrest,60,30);
}
Amos Poh
Posts: 107
Joined: Sun Jul 22, 2012 4:51 am
Location: Singapore

Re: Need help on my WP40 and MP40 code

Post by Amos Poh »

lnevo wrote:Yes, but your now missing the hour between 11pm and midnight. You essentially said if hour()==22

Try this:

Code: Select all

Thanks for the help, sorry i am a total idiot when it comes to coding. will the below works?
else if (hour()>=22 || hour()<23)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(ReefCrest,70,30);
}
else if (hour()<8)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(ReefCrest,60,30);
}
sorry i am confuse now. we are still missing the hours between 11pm and midnight right? how do we solve that?
User avatar
lnevo
Posts: 5430
Joined: Fri Jul 20, 2012 9:42 am

Re: Need help on my WP40 and MP40 code

Post by lnevo »

I fixed it above
Amos Poh
Posts: 107
Joined: Sun Jul 22, 2012 4:51 am
Location: Singapore

Re: Need help on my WP40 and MP40 code

Post by Amos Poh »

Thanks Lee,

will try out and monitor tonight :)
Amos Poh
Posts: 107
Joined: Sun Jul 22, 2012 4:51 am
Location: Singapore

Re: Need help on my WP40 and MP40 code

Post by Amos Poh »

I must have missed out something. the code didn't work. what went wrong?

else if (hour()>=22 || hour()<23)
{
ReefAngel.PWM.SetChannel( 1,LongPulseMode(30,50,5,false) );
ReefAngel.PWM.SetChannel( 2,LongPulseMode(30,50,5,true) );
}
else if (hour()<8)
{
ReefAngel.PWM.SetChannel( 1,LongPulseMode(30,40,10,false) ); // long pulse minimum power at 30% max at 40 lasting for 10 sec Anti Sync
ReefAngel.PWM.SetChannel( 2,LongPulseMode(30,40,10,true) ); // long pulse minimum power at 30% max at 40 lasting for 10 sec Sync
}
User avatar
lnevo
Posts: 5430
Joined: Fri Jul 20, 2012 9:42 am

Re: Need help on my WP40 and MP40 code

Post by lnevo »

Change the || back to && you fixed the conflicting line by just saying hour()<8
Amos Poh
Posts: 107
Joined: Sun Jul 22, 2012 4:51 am
Location: Singapore

Re: Need help on my WP40 and MP40 code

Post by Amos Poh »

Thanks :)
Amos Poh
Posts: 107
Joined: Sun Jul 22, 2012 4:51 am
Location: Singapore

Re: Need help on my WP40 and MP40 code

Post by Amos Poh »

lnevo wrote:Change the || back to && you fixed the conflicting line by just saying hour()<8

Hi Lee,

The code didn't work like it is suppose to. at 2300hrs the RF module is in ReefAngel.RF.SetMode(ReefCrest,30,10) instead of the intended ReefAngel.RF.SetMode(ReefCrest,30,10);

Below is my full code.Thanks for the help once again.

#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
//byte WCstatus=0;

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


void setup()
{
// This must be the first line
ReefAngel.Init(); //Initialize controller
ReefAngel.AddWifi();//Setup Wifi
ReefAngel.SetTemperatureUnit( Celsius ); // set to Celsius Temperature
// ReefAngel.Salinity.SetCompensation(0);
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = 0;
ReefAngel.FeedingModePortsE[0] = Port1Bit;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = 0;
ReefAngel.WaterChangePortsE[0] = 0;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = 0;
ReefAngel.LightsOnPortsE[0] = 0;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = 0;
ReefAngel.OverheatShutoffPortsE[0] = 0;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Set the Overheat temperature setting
InternalMemory.OverheatTemp_write( 300 );


// Ports that are always on
ReefAngel.Relay.On( Port1 ); //skimmer
ReefAngel.Relay.On( Port3 ); //MP40
ReefAngel.Relay.On( Port4 ); //Cabinet Light
ReefAngel.Relay.On( Port5 ); //WP40 Right
// ReefAngel.Relay.On( Port6 ); //Aclimate
ReefAngel.Relay.On( Port7 ); // DC10000
ReefAngel.Relay.On( Port8 ); // Always On Salinity Module
ReefAngel.Relay.On( Box1_Port1 ); //Tunze
ReefAngel.Relay.On( Box1_Port2 ); //WP40 Left
ReefAngel.Relay.On( Box1_Port5 ); //LED
ReefAngel.Relay.On( Box1_Port6 ); //Salt Mix Pump
ReefAngel.Relay.On( Box1_Port7 ); //Always On PWM Module
ReefAngel.Relay.On( Box1_Port8 ); //LED


////// Place additional initialization code below here


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

void loop()
{
ReefAngel.DosingPumpRepeat( Port2,0,60,50 );
ReefAngel.DosingPumpRepeat( Port6,0,1,5 );
// ReefAngel.StandardLights( Box1_Port1,14,0,23,0 );
ReefAngel.PWM.SetDaylight( PWMSlope(0,0,12,0,80,100,60,80) );
ReefAngel.PWM.SetActinic( PWMSlope(0,0,12,0,80,100,60,80) );
ReefAngel.RF.UseMemory = false;
ReefAngel.RF.SetMode( NutrientTransport,30,10 );
// ReefAngel.PWM.SetChannel(0,100); // Sets channel 0 to 100%
// ReefAngel.PWM.SetChannel( 1, NutrientTransportMode(77,90,3000,true) ); // Nutrient Transport on sync mode
// ReefAngel.PWM.SetChannel( 2, NutrientTransportMode(77,90,3000,false) ); // Nutrient Transport on anti-sync mode
// ReefAngel.PWM.SetChannel(3,3); // Set channel 3 to 3%
// ReefAngel.PWM.SetChannel(4,3);
// ReefAngel.PWM.SetChannel(5,3);

ReefAngel.PWM.SetChannel( 3, PWMParabola(15,0,23,0,0,95,0) ); // (White)Set channel 3 to start 3pm at 0% to top 50% then end at 11pm at 0%
ReefAngel.PWM.SetChannel( 4, PWMParabola(9,0,23,59,0,100,0) ); // (Blue)
ReefAngel.PWM.SetChannel( 5, PWMParabola(15,0,23,0,0,70,0) ); // (Red)
//ReefAngel.PWM.SetDaylight( TidalSwellMode(80,true) ); // Tidal Swell at 40% on sync mode
//ReefAngel.PWM.SetActinic( TidalSwellMode(80,false) ); // Tidal Swell at 40% on anti-sync mode
//ReefAngel.PWM.SetDaylight( LongPulseMode(50,80,20,true)); // long pulse minimum power at 50% max at 80 lasting for 20 sec Sync
//ReefAngel.PWM.SetActinic( LongPulseMode(50,80,20,false)); // long pulse minimum power at 50% max at 80 lasting for 20 sec AntiSync
//ReefAngel.PWM.SetDaylight( ReefCrestMode(80,40,true) ); // ReefCrest at 80%max +-40% on sync mode
//ReefAngel.PWM.SetActinic( ReefCrestMode(80,40,false) ); // ReefCrest at 80%max +-40% on anti sync

////// Place your custom code below here
if (hour()>=8 && hour()<10)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(ReefCrest,50,20);
}
else if (hour()>=10 && hour()<12)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(LongPulse,80,5 );
}
else if (hour()>=12 && hour()<14)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(LongPulse,80,3 );
}
else if (hour()>=14 && hour()<16)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(ShortPulse,90,3);
}
else if (hour()>=16 && hour()<19)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(NutrientTransport,100,3);
}
else if (hour()>=19 && hour()<20)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(ShortPulse,90,3);
}
else if (hour()>=20 && hour()<22)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(LongPulse,80,3 );
}
else if (hour()>=22 && hour()<23)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(LongPulse,50,5 );
}
else if (hour()<8)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(ReefCrest,30,10);
}



if (hour()>=8 && hour()<10)
{
ReefAngel.PWM.SetChannel( 1, ReefCrestMode(50,20,false) );
ReefAngel.PWM.SetChannel( 2, ReefCrestMode(50,20,true) );
}
else if (hour()>=10 && hour()<12)
{
ReefAngel.PWM.SetChannel( 1,LongPulseMode(30,80,5,false) ); // long pulse minimum power at 50% max at 80 lasting for 5 sec Anti Sync
ReefAngel.PWM.SetChannel( 2,LongPulseMode(30,80,5,true) ); // long pulse minimum power at 50% max at 80 lasting for 5 sec Sync
}
else if (hour()>=12 && hour()<14)
{
ReefAngel.PWM.SetChannel( 1,LongPulseMode(30,80,3,false) );
ReefAngel.PWM.SetChannel( 2,LongPulseMode(30,80,3,true) );
}
else if (hour()>=14 && hour()<16)
{
ReefAngel.PWM.SetChannel( 1, ShortPulseMode(30,90,3,false) );
ReefAngel.PWM.SetChannel( 2, ShortPulseMode(30,90,3,true) );
}
else if (hour()>=16 && hour()<19)
{
ReefAngel.PWM.SetChannel( 1, NutrientTransportMode(30,100,300,false) );
ReefAngel.PWM.SetChannel( 2, NutrientTransportMode(30,100,300,true) );
}
else if (hour()>=19 && hour()<20)
{
ReefAngel.PWM.SetChannel( 1,LongPulseMode(30,80,3,false) );
ReefAngel.PWM.SetChannel( 2,LongPulseMode(30,80,3,true) );
}
else if (hour()>=20 && hour()<22)
{
ReefAngel.PWM.SetChannel( 1,LongPulseMode(30,80,5,false) );
ReefAngel.PWM.SetChannel( 2,LongPulseMode(30,80,5,true) );
}
else if (hour()>=22 && hour()<23)
{
ReefAngel.PWM.SetChannel( 1,LongPulseMode(30,50,5,false) );
ReefAngel.PWM.SetChannel( 2,LongPulseMode(30,50,5,true) );
}
else if (hour()<8)
{
ReefAngel.PWM.SetChannel( 1,LongPulseMode(30,40,10,false) ); // long pulse minimum power at 30% max at 40 lasting for 10 sec Anti Sync
ReefAngel.PWM.SetChannel( 2,LongPulseMode(30,40,10,true) ); // long pulse minimum power at 30% max at 40 lasting for 10 sec Sync
}

if (ReefAngel.WaterLevel.GetLevel()>=80) //Turn off skimmer if waterlevel exceed 80%
{
ReefAngel.Relay.Off(Port1);
}
else
{
ReefAngel.Relay.On(Port1);
}

if (ReefAngel.DisplayedMenu==FEEDING_MODE)
{
ReefAngel.RF.UseMemory=false;
ReefAngel.RF.SetMode(Constant,0,0);
ReefAngel.PWM.SetChannel(1,30);
ReefAngel.PWM.SetChannel(2,30);
// ReefAngel.PWM.SetChannel(0,75);

}
if(ReefAngel.HighATO.IsActive())
{
ReefAngel.Relay.Off(Port1);
}
else
{
ReefAngel.Relay.On(Port1);
}
// else
//{
// ReefAngel.Relay.On( Port3 );
// ReefAngel.Relay.On( Box1_Port8 );
//}

//if (hour()==0 && minute()==15 && second()==0) ReefAngel.WaterChangeModeStart();
//if (ReefAngel.DisplayedMenu==WATERCHANGE_MODE)
//{
//if (WCstatus==0)
//{
//ReefAngel.Relay.On(Box1_Port4);
//WCstatus=1;
//}
//if (ReefAngel.WaterLevel.GetLevel()<=60 && WCstatus>0 && WCstatus<10) WCstatus++;
//if (ReefAngel.WaterLevel.GetLevel()<=60 && WCstatus==10)
//{
//WCstatus=11;
//ReefAngel.Relay.Off(Box1_Port4);
//ReefAngel.Relay.On(Box1_Port3);
//}
//if (ReefAngel.WaterLevel.GetLevel()<=65 && WCstatus>10 && WCstatus<20) WCstatus++;
//if (ReefAngel.WaterLevel.GetLevel()>65 && WCstatus==20)

//{
// ReefAngel.Relay.Off(Box1_Port3);
//ButtonPress++;
//}
//}
//else
//{
//WCstatus=0;
//ReefAngel.Relay.Off(Box1_Port4);

//ReefAngel.Relay.Off(Box1_Port3);
//}


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

// This should always be the last line
ReefAngel.Portal( "Amos%20Poh" );
ReefAngel.ShowInterface();
}

void DrawCustomMain()
{
int x,y;
char text[10];
// Parameters
#if defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 10, ReefAngel.Params,
ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue() );
#else // defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor( 15, 10, ReefAngel.Params );
#endif // defined DisplayLEDPWM && ! defined RemoveAllLights
pingSerial();

// Salinity
ReefAngel.LCD.DrawText( COLOR_DARKKHAKI,DefaultBGColor,15,46, "SAL:" );
ReefAngel.LCD.DrawText( COLOR_DARKKHAKI,DefaultBGColor,39,46, ReefAngel.Params.Salinity );
pingSerial();

// Water Level
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,75,63, "WL:" );
ReefAngel.LCD.DrawText( COLOR_DARKGOLDENROD,DefaultBGColor,99,63, ReefAngel.WaterLevel.GetLevel() );
pingSerial();

// Main Relay Box
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
ReefAngel.LCD.DrawOutletBox( 12, 79, TempRelay );
pingSerial();

// Relay Expansion
TempRelay = ReefAngel.Relay.RelayDataE[0];
TempRelay &= ReefAngel.Relay.RelayMaskOffE[0];
TempRelay |= ReefAngel.Relay.RelayMaskOnE[0];
ReefAngel.LCD.DrawOutletBox( 12, 98, TempRelay );
pingSerial();

// Date and Time
ReefAngel.LCD.DrawDate( 6, 122 );
pingSerial();
}

void DrawCustomGraph()
{
}
User avatar
lnevo
Posts: 5430
Joined: Fri Jul 20, 2012 9:42 am

Re: Need help on my WP40 and MP40 code

Post by lnevo »

Change hour()<23 to hour()<=23
Post Reply