Code: Select all
#include <Salinity.h>
#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 <RF.h>
#include <IO.h>
#include <ORP.h>
#include <AI.h>
#include <PH.h>
#include <WaterLevel.h>
#include <ReefAngel.h>
// CustomMainscreen_IOExpansion
byte x,y;
byte bkcolor;
void DrawCustomMain()
{
// the graph is drawn/updated when we exit the main menu &
// when the parameters are saved
ReefAngel.LCD.DrawDate(6, 112);
pingSerial();
#if defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor(15, 60, ReefAngel.Params,
ReefAngel.PWM.GetDaylightValue(), ReefAngel.PWM.GetActinicValue());
#else // defined DisplayLEDPWM && ! defined RemoveAllLights
ReefAngel.LCD.DrawMonitor(15, 60, ReefAngel.Params);
#endif // defined DisplayLEDPWM && ! defined RemoveAllLights
pingSerial();
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
ReefAngel.LCD.DrawOutletBox(12, 93, TempRelay);
y=10;
x=15;
for (int a=0;a<6;a++)
{
if(ReefAngel.IO.GetChannel(a)) bkcolor=COLOR_RED;
else bkcolor=COLOR_GREEN;
if (a>2) x=75;
if (a==3) y=10;
ReefAngel.LCD.Clear(bkcolor, x, y-3, x+40,y-1);
ReefAngel.LCD.Clear(bkcolor, x, y+8, x+40,y+10);
ReefAngel.LCD.Clear(bkcolor, x, y, x+3,y+8);
ReefAngel.LCD.Clear(bkcolor, x+37, y, x+40,y+8);
ReefAngel.LCD.DrawText(COLOR_WHITE, bkcolor, x+3, y, "Input");
ReefAngel.LCD.DrawText(COLOR_WHITE, bkcolor, x+32, y, a);
y+=15;
}
}
void DrawCustomGraph()
{
}
/*
For more information about custom main screen: http://forum.reefangel.com/viewtopic.php?f=14&t=109
*/
// Define Relay Ports By Name
#define ATO1 1
#define ATO2 2
#define Skimmer 3
#define Daylights 4
#define Flowpumps1 5
#define Flowpumps2 6
#define Heaters 7
#define Return 8
// Custom ATO Functions
unsigned long ATO2_timer = 0;
boolean ATO2_topping = false;
void ATOoverIO(byte relay, int timeout, byte low_ioport, byte high_ioport){
unsigned long TempTimeout = timeout;
TempTimeout *= 1000;
//Is the low switch active (meaning we need to top off) and are we not currently topping off
//Then we set the timer to be now and start the topping pump
if ( ReefAngel.IO.GetChannel(low_ioport) && (!ATO2_topping)) {
ATO2_timer = millis();
ATO2_topping = true;
ReefAngel.Relay.On(relay);
}
// If the high switch is activated, this is a safeguard to prevent over running of the top off pump
if ( ReefAngel.IO.GetChannel(high_ioport) ) {
ATO2_topping = false;
ReefAngel.Relay.Off(relay);
}
// If the current time minus the start time of the ATO pump is greater than the specified timeout value
// AND the ATO pump is currently running:
// We turn on the status LED and shut off the ATO pump
// This prevents the ATO pump from continuously running.
if ( (millis() - ATO2_timer > TempTimeout) && ATO2_topping ) {
ReefAngel.LED.On();
// Verify the bitset function works properly
//bitSet(ReefAngel.AlertFlags, ReefAngel.ATOTimeOutFlag);
ReefAngel.Relay.Off(relay);
}
}
void setup()
{
ReefAngel.Init(); // Initialize Controller
ReefAngel.AddDateTimeMenu();
ReefAngel.AddStandardMenu();
ReefAngel.SetTemperatureUnit(Celsius); // set Temperature to Celsius
ReefAngel.FeedingModePorts = Port5Bit | Port6Bit; // Turn off Ports 5 and 6 when Feeding Mode is activated
ReefAngel.WaterChangePorts = Port1Bit | Port2Bit | Port3Bit | Port5Bit | Port6Bit | Port7Bit | Port8Bit; // Turn off Ports 1, 2, 3, 5, 6, 7 and 8 when Water Change Mode is activated
ReefAngel.OverheatShutoffPorts = Port4Bit | Port7Bit; // Turn off Ports 4 and 7 when Overheat Occurs
ReefAngel.LightsOnPorts = Port4Bit; // Turn on/off Ports 4 when Turn Lights On/Off is activated
ReefAngel.OverheatProbe = T1_PROBE; // Use Temperature probe 1, 2 and 3 to check for overheat
ReefAngel.TempProbe = T1_PROBE; // Use Temperature probe 1, 2 and 3 to check temperature
// Always on
ReefAngel.Relay.On(Return);
ReefAngel.Relay.On(Skimmer);
ReefAngel.Relay.On(Flowpumps1);
ReefAngel.Relay.On(Flowpumps2);
// Initialize ATO2 values
ATO2_timer = 0; // always initialize to 0
ATO2_topping = false; // always initialize to false
}
void loop()
{
ReefAngel.StandardATO(ATO1); // Standard ATO
// ATOoverIO(Relay, Timeout, low io port, high io port)
ATOoverIO(ATO2, 150, 0, 1); // Alternate ATO2
ReefAngel.StandardLights(Daylights); // Daylight Lights
ReefAngel.StandardHeater(Heaters); // Heater
ReefAngel.PWM.StandardDaylight(); // Dimming for Daylight Channel
ReefAngel.PWM.StandardActinic(30); // Dimming for Actinic Channel
ReefAngel.ShowInterface(); // Display everything on the LCD screen
}