Help with code
Posted: Sun Jul 07, 2013 4:23 pm
I just changed my display, but I'm having a few problems with it. For one, one of my relay box's on the screen is flickering. The other thing is that I have in my code where its suppose to display what mode my wp40 is in, but its shown where the date and time is at. Can anybody help me with this?
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 KalkDoser 1
#define WCEmpty 2
#define Autotopoff 3
#define Refugium 4
#define KalkStirrer 5
#define WCFill 6
#define Heater 7
#define Return 8
#define RODIValve Box1_Port1
#define Skimmer Box1_Port2
#define Unused Box1_Port3
#define Unused Box1_Port4
#define Unused Box1_Port5
#define Unused Box1_Port6
#define Unused Box1_Port7
#define Unused Box1_Port8
////// Place global variable code below here
byte wpMode;
int WCstatus;
////// Place global variable code above here
void setup()
{
// This must be the first line
InternalMemory.LCDID_write(0);
ReefAngel.Init(); //Initialize controller
ReefAngel.AddDateTimeMenu();
ReefAngel.AddStandardMenu(); // Add Standard Menu
ReefAngel.PHMin=546;//PH7.0
ReefAngel.PHMax=734;//PH10.0
// Ports toggled in Feeding Mode
ReefAngel.FeedingModePorts = 0;
// Ports toggled in Water Change Mode
ReefAngel.WaterChangePorts = Port1Bit | Port3Bit | Port7Bit | Port8Bit;
// Ports toggled when Lights On / Off menu entry selected
ReefAngel.LightsOnPorts = Port4Bit;
// Ports turned off when Overheat temperature exceeded
ReefAngel.OverheatShutoffPorts = Port7Bit;
// Use T1 probe as temperature and overheat functions
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
// Set the Overheat temperature setting
InternalMemory.OverheatTemp_write( 810 );
ReefAngel.Timer[1].SetInterval(180);
// Ports that are always on
ReefAngel.Relay.On( Return ); // Return Pump
ReefAngel.Relay.On( Skimmer ); // Skimmer
////// Place additional initialization code below here
////// Place additional initialization code above here
}
void loop()
{
////// Place your custom code below here
CheckPower(); // Monitor for power outages
ReefAngel.PWM.SetChannel( 0, PWMSlope(9,30,21,30,17,100,60,0) );
ReefAngel.PWM.SetChannel( 1, PWMSlope(9,30,21,30,17,100,60,0) );
ReefAngel.PWM.SetChannel( 2, PWMSlope(9,30,21,30,17,100,60,0) );
ReefAngel.PWM.SetChannel( 3, PWMSlope(9,30,21,30,17,100,60,0) );
ReefAngel.PWM.SetChannel( 4, PWMSlope(9,30,21,30,17,100,60,0) );
ReefAngel.PWM.SetChannel( 5, PWMSlope(9,30,21,30,17,100,60,0) );
ReefAngel.WaterLevelATO(Port3,120,43,45);
if (ReefAngel.LowATO.IsActive()) ReefAngel.Relay.On(RODIValve);
if (!ReefAngel.HighATO.IsActive()) ReefAngel.Relay.Off(RODIValve);
ReefAngel.DosingPumpRepeat( Port1,0,45,6 );
if (ReefAngel.Params.PH>=850) ReefAngel.Relay.Off(KalkDoser);
ReefAngel.StandardLights( Port4,20,0,8,0 );
ReefAngel.Relay.Set(Port5,now()%7200<900);
ReefAngel.StandardHeater( Port7,780,785 );
if (hour()>=6 && hour()<11)
{
ReefAngel.PWM.SetDaylight( TidalSwellMode(60,true) ); // Tidal Swell at 60% on sync mode
ReefAngel.PWM.SetActinic( TidalSwellMode(60,false) ); // Tidal Swell at 60% on anti-sync mode
wpMode=1;
}
else if (hour()>=11 && hour()<15)
{
ReefAngel.PWM.SetDaylight( ReefCrestMode(65,20,true) ); // ReefCrest at 60% +/- 20 on sync mode
ReefAngel.PWM.SetActinic( ReefCrestMode(65,20,false) ); // ReefCrest at 60% +/- 20 on anti-sync mode
wpMode=2;
}
else if (hour()>=15 && hour()<18)
{
ReefAngel.PWM.SetDaylight( NutrientTransportMode(75,90,2000,true) ); // Nutrient Transport on sync mode
ReefAngel.PWM.SetActinic( NutrientTransportMode(75,90,2000,false) ); // Nutrient Transport on anti-sync mode
wpMode=3;
}
else if (hour()>=18 && hour()<20)
{
ReefAngel.PWM.SetDaylight( ReefCrestMode(65,20,true) ); // ReefCrest at 60% +/- 20 on sync mode
ReefAngel.PWM.SetActinic( ReefCrestMode(65,20,false) ); // ReefCrest at 60% +/- 20 on anti-sync mode
wpMode=2;
}
else if (hour()>=20 && hour()<23)
{
ReefAngel.PWM.SetDaylight( TidalSwellMode(60,true) ); // Tidal Swell at 60% on sync mode
ReefAngel.PWM.SetActinic( TidalSwellMode(60,false) ); // Tidal Swell at 60% on anti-sync mode
wpMode=1;
}
else
{
ReefAngel.PWM.SetDaylight( SineMode(38,48,30,true) ); // Sine at 30% 45% with for 30s on sync mode
ReefAngel.PWM.SetActinic( SineMode(38,48,30,false) ); // Sine at 30% 45% with for 30s on anti sync mode
wpMode=4;
}
if (ReefAngel.DisplayedMenu==WATERCHANGE_MODE)
{
if (WCstatus==-1)
{
ReefAngel.Timer[1].Start();
WCstatus=0;
}
if ( ReefAngel.Timer[1].IsTriggered() )
{
ReefAngel.Relay.On(WCEmpty);
WCstatus=1;
}
if (ReefAngel.WaterLevel.GetLevel()<=15 && WCstatus>0 && WCstatus<10) WCstatus++;
if (ReefAngel.WaterLevel.GetLevel()<=15 && WCstatus==10)
{
WCstatus=11;
ReefAngel.Relay.Off(WCEmpty);
ReefAngel.Relay.On(WCFill);
}
if (ReefAngel.WaterLevel.GetLevel()<=81 && WCstatus>10 && WCstatus<20) WCstatus++;
if (ReefAngel.WaterLevel.GetLevel()>81 && WCstatus==20)
{
ReefAngel.Relay.Off(WCFill);
ButtonPress++;
}
}
else
{
WCstatus=-1;
ReefAngel.Relay.Off(WCEmpty);
ReefAngel.Relay.Off(WCFill);
}
ReefAngel.Portal("Drs1210");
ReefAngel.ShowInterface(); // Display everything on the LCD screen
}
void CheckPower() {
static boolean powerOutage=false;
// Power Outage - turn off everything
if (!ReefAngel.Relay.IsRelayPresent(EXP1_RELAY)) // Expansion Relay NOT present
{
powerOutage=true;
ReefAngel.Relay.Off(KalkDoser);
ReefAngel.Relay.Off(WCEmpty);
ReefAngel.Relay.Off(Refugium);
ReefAngel.Relay.Off(KalkStirrer);
ReefAngel.Relay.Off(WCFill);
ReefAngel.Relay.Off(Heater);
ReefAngel.Relay.Off(RODIValve);
ReefAngel.Relay.Off(Skimmer);
}
// Power Restored - Turn things back on
if (powerOutage && ReefAngel.Relay.IsRelayPresent(EXP1_RELAY))
{
LastStart=now();
powerOutage=false;
ReefAngel.Relay.On(Return);
ReefAngel.Relay.On(Skimmer);
}
}
void DrawCustomMain()
{
byte x = 6;
byte y = 2;
byte t;
char text[7];
ReefAngel.LCD.DrawDate(6, 3);
ReefAngel.LCD.Clear(COLOR_BLACK, 1, 11, 132, 11);
pingSerial();
ReefAngel.LCD.DrawText(COLOR_BLACK,255,56,84, "Res");
ReefAngel.LCD.DrawText(COLOR_GREEN,255, 45, 83, "H");
ReefAngel.LCD.DrawText(COLOR_GREEN,255, 45, 93, "I");
ReefAngel.LCD.DrawText(COLOR_RED,255, 77, 83, "L");
ReefAngel.LCD.DrawText(COLOR_RED,255, 77, 93, "O");
ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 6, 75, "--------------------");
ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 6, 101, "--------------------");
ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 2, 78, "|");
ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 2, 88, "|");
ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 2, 98, "|");
ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 126, 78, "|");
ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 126, 88, "|");
ReefAngel.LCD.DrawText(COLOR_TOMATO,255, 126, 98, "|");
ReefAngel.LCD.DrawText(0,255,10,30,"Tank");
ConvertNumToString(text, ReefAngel.Params.Temp[T1_PROBE], 10);
ReefAngel.LCD.DrawLargeText(COLOR_INDIANRED, 255, 10, 40, text, Num8x8);
pingSerial();
ReefAngel.LCD.DrawText(0,255,100,30,"pH");
ConvertNumToString(text, ReefAngel.Params.PH, 100);
ReefAngel.LCD.DrawLargeText(COLOR_PLUM, 255, 91, 40, text, Num8x8);
pingSerial();
ReefAngel.LCD.DrawText(0,255,43,48,"Salinity");
ConvertNumToString(text, ReefAngel.Params.Salinity, 100);
ReefAngel.LCD.DrawLargeText(COLOR_LIMEGREEN, 255, 49, 58, text, Num8x8);
pingSerial();
ReefAngel.LCD.DrawText(0,255,8,68,"WC");
ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T3_PROBE], COLOR_CHOCOLATE, 25, 68, 10);
pingSerial();
ReefAngel.LCD.DrawText(0,255,66,68,"Room");
ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T2_PROBE], COLOR_MEDIUMORCHID, 94, 68, 10);
pingSerial();
ReefAngel.LCD.DrawText(0,255,15,83,"WL");
ConvertNumToString(text, ReefAngel.WaterLevel.GetLevel(),1);
ReefAngel.LCD.DrawLargeText(COLOR_BLUE, 255, 10, 92, text, Num8x8);
ReefAngel.LCD.DrawText(0,255,26,92," %");
pingSerial();
// WP40 Mode
ReefAngel.LCD.DrawText(0,255,x,y,"Jebao WP40 Mode:");
ReefAngel.LCD.Clear(DefaultBGColor,x,y,128-x,y+8);
if (wpMode == 1) ReefAngel.LCD.DrawText(COLOR_GREEN,255,x,y,"Tidal Swell");
else if (wpMode == 2) ReefAngel.LCD.DrawText(COLOR_MAGENTA,255,x,y,"Reef Crest");
else if (wpMode == 3) ReefAngel.LCD.DrawText(COLOR_GOLD,255,x,y,"Nutrient");
else if (wpMode == 4) ReefAngel.LCD.DrawText(COLOR_RED,255,x,y,"Sine Mode");
ReefAngel.LCD.DrawText(0,255,96,83,"WP40");
ConvertNumToString(text, ReefAngel.PWM.GetActinicValue(),1);
ReefAngel.LCD.DrawLargeText(COLOR_OLIVE, 255, 99, 92, text, Num8x8);
ReefAngel.LCD.DrawText(0,255,115,92," %");
pingSerial();
// Main Relay box
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
ReefAngel.LCD.DrawOutletBox(14, 106, TempRelay);
pingSerial();
// Relay Expansion
TempRelay = ReefAngel.Relay.RelayDataE[0];
TempRelay &= ReefAngel.Relay.RelayMaskOffE[0];
TempRelay |= ReefAngel.Relay.RelayMaskOnE[0];
ReefAngel.LCD.DrawOutletBox( 14, 118, TempRelay );
pingSerial();
if (ReefAngel.HighATO.IsActive())
ReefAngel.LCD.FillCircle(57,96,3,COLOR_RED);
else
ReefAngel.LCD.FillCircle(57,96,3,COLOR_GREEN);
if (ReefAngel.LowATO.IsActive())
ReefAngel.LCD.FillCircle(70,96,3,COLOR_RED);
else
ReefAngel.LCD.FillCircle(70,96,3,COLOR_GREEN);
}
void DrawCustomGraph()
{
}