Scott.
Code: Select all
#include <ReefAngel_Features.h>
#include <ReefAngel_Globals.h>
#include <ReefAngel_Wifi.h>
#include <Wire.h>
#include <OneWire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include <ReefAngel_EEPROM.h>
#include <ReefAngel_NokiaLCD.h>
#include <ReefAngel_ATO.h>
#include <ReefAngel_Joystick.h>
#include <ReefAngel_LED.h>
#include <ReefAngel_TempSensor.h>
#include <ReefAngel_Relay.h>
#include <ReefAngel_PWM.h>
#include <ReefAngel_Timer.h>
#include <ReefAngel_Memory.h>
#include <ReefAngel.h>
#define AutoTopOff 1
#define Refuge 2
#define MHLight 3
#define Actinic 4
#define WaveController 5
#define Heater 6
#define Fans 7
#define Pumps 8
#define CUSTOM_MENU
#define CUSTOM_MENU_ENTRIES
boolean wmdelay=false;
#include <avr/pgmspace.h>
// Create the menu entries
prog_char menu1_label[] PROGMEM = "Feed Fish";
prog_char menu2_label[] PROGMEM = "Feed Coral";
prog_char menu3_label[] PROGMEM = "Water Change";
prog_char menu4_label[] PROGMEM = "All Off";
prog_char menu5_label[] PROGMEM = "Daylights";
prog_char menu6_label[] PROGMEM = "Moonights";
prog_char menu7_label[] PROGMEM = "ATO/OH Clear";
prog_char menu8_label[] PROGMEM = "PH Calibration";
prog_char menu9_label[] PROGMEM = "Date / Time";
// Group the menu entries together
PROGMEM const char *menu_items[] = {
menu1_label,
menu2_label,
menu3_label,
menu4_label,
menu5_label,
menu6_label,
menu7_label,
menu8_label,
menu9_label
};
void MenuEntry1() //"Feed Fish"
{
ReefAngel.FeedingModeStart();
}
void MenuEntry2() //"Feed Coral"
{
ReefAngel.Relay.Off(Pumps);
ReefAngel.Relay.Write(); // Make relay changes effective
delay(300000);
ReefAngel.Relay.Off(WaveController);
ReefAngel.Relay.Write(); // Make relay changes effective
delay(300000);
ReefAngel.Relay.On(Pumps)
ReefAngel.Relay.On(WaveController);
ReefAngel.Relay.Write(); // Make relay changes effective
}
void MenuEntry3() //"Water Change"
{
ReefAngel.WaterChangeModeStart();
}
void MenuEntry4() //"All Off"
{
ReefAngel.Relay.AllOff(); // Turn all ports off.
ReefAngel.Relay.Write(); // Make relay changes effective
ReefAngel.DisplayedMenu = ALT_SCREEN_MODE;
}
void MenuEntry5() //"Toggle Daylights"
{
ReefAngel.Relay.Toggle(MHLight);
ReefAngel.Relay.Toggle(Actinic);
ReefAngel.Relay.Write();
ReefAngel.DisplayedMenu = ALT_SCREEN_MODE;
}
void MenuEntry6() //"Toggle Moonights"
{
ReefAngel.Relay.Toggle(Refuge);
ReefAngel.Relay.Write(); // Make relay changes effective
ReefAngel.DisplayedMenu = ALT_SCREEN_MODE;
}
void MenuEntry7() //"ATO/OH Clear"
{
ReefAngel.ATOClear();
ReefAngel.OverheatClear();
ReefAngel.DisplayMenuEntry("Clear ATO/Overheat");
}
void MenuEntry8() //"PH Calibration"
{
ReefAngel.SetupCalibratePH();
ReefAngel.DisplayedMenu = ALT_SCREEN_MODE;
}
void MenuEntry9() //"Date / Time"
{
ReefAngel.SetupDateTime();
ReefAngel.DisplayedMenu = ALT_SCREEN_MODE;
}
void setup()
{
//Init and custom menus
ReefAngel.Init(); //Initialize controller
ReefAngel.InitMenu(pgm_read_word(&(menu_items[0])),SIZE(menu_items));
//Menu Modes
ReefAngel.FeedingModePorts = B00110000;
ReefAngel.WaterChangePorts = B10110000;
ReefAngel.OverheatShutoffPorts = B00000111;
ReefAngel.LightsOnPorts = B00001100;
//Initialize timer
ReefAngel.Timer[1].SetInterval(InternalMemory.WM1Timer_read());
ReefAngel.Timer[1].Start();
//Pumps and waves on
ReefAngel.Relay.On(Pumps); //Turn Sump/Skimmer on at startup
ReefAngel.Relay.On(WaveController); //Turn WaveController on at startup
}
void loop()
{
ReefAngel.LCD.SetContrast(60); // Set contrast to 60
// Wave controller controls 3 powerheads plugged into 1 RA port. Night time (10p-8a) is a Lull
// cycle. Controller runs for 60s then is off for 20s.
if (ReefAngel.Timer[1].IsTriggered() )
{
if ((hour() >= 22) || (hour() <= 8)) //from 10p-8a
{
if (wmdelay)
{
ReefAngel.Timer[1].SetInterval(60); // wm night delay
ReefAngel.Timer[1].Start();
ReefAngel.Relay.Off(WaveController);
wmdelay=false;
}
else
{
ReefAngel.Timer[1].SetInterval(20); // short wave
ReefAngel.Timer[1].Start();
ReefAngel.Relay.On(WaveController);
wmdelay=true;
}
}
else
{
//8a-10p normal wave settings
ReefAngel.Timer[1].SetInterval(InternalMemory.WM1Timer_read());
ReefAngel.Timer[1].Start();
ReefAngel.Relay.On(WaveController);
}
}
//Top Off
ReefAngel.StandardATO(AutoTopOff,60); //Setup AutoTopOff as Auto Top-Off function with 60s timeout
//Light Schedule
ReefAngel.StandardLights(Refuge,22,00,6,00); //Refugium schedule 10:00pm - 6:00am
ReefAngel.StandardLights(Actinic,12,00,22,00); //Actinic schedule 12:00pm - 10:00pm
ReefAngel.MHLights(MHLight,14,0,20,0,15); //Daylight schedule 2:00pm - 8:00pm with 15min cool down
//Heating/Cooling
ReefAngel.StandardHeater(Heater,778,782); // Setup Heater to turn on at 77.8F and off at 78.2F
ReefAngel.StandardFan(Fans,783,900); // Setup Chiller to turn on at 78.3F and off at 90.0F
ReefAngel.ShowInterface();
ReefAngel.Relay.Write(); // Make relay changes effective
}