Moonlight control, ramp up, then back down
Random wavemaker switching times
Implemented web banner (code from RAGen did not seem to work for me)
Failsafe heater shut off (polls 2 out of 3 temps over limit) relies on heater thermostat to maintain temperature.
Feel free to comment on how to improve upon this code. I haven't written my own code in several years!
Enjoy.
Peitro
Code: Select all
// Autogenerated file by RAGen (v1.1.0.127), (10/22/2011 09:08)
// Modified to add moonlight control, light control, and random pump switching
// RA_102111_0957.pde
//
// This version designed for v0.8.5 Beta 17 or later
/* The following features are enabled for this PDE File:
#define DisplayImages
#define WavemakerSetup
#define DateTimeSetup
#define VersionMenu
#define ATOSetup
#define DirectTempSensor
#define DisplayLEDPWM
#define wifi
#define StandardLightSetup
#define SaveRelayState
#define WDT
*/
#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>
#include <avr/pgmspace.h>
// Labels for the web banner
prog_char id_label[] PROGMEM = "peitro";
prog_char probe1_label[] PROGMEM = "Sump";
prog_char probe2_label[] PROGMEM = "Refugium";
prog_char probe3_label[] PROGMEM = "Room";
prog_char relay1_label[] PROGMEM = "ATO";
prog_char relay2_label[] PROGMEM = "LED%20Main";
prog_char relay3_label[] PROGMEM = "LED%20Strip";
prog_char relay4_label[] PROGMEM = "Powerhead%202";
prog_char relay5_label[] PROGMEM = "Powerhead%201";
prog_char relay6_label[] PROGMEM = "Powerhead%203";
prog_char relay7_label[] PROGMEM = "Heater";
prog_char relay8_label[] PROGMEM = "Skimmer";
PROGMEM const char *webbanner_items[] = {
id_label, probe1_label, probe2_label, probe3_label, relay1_label, relay2_label,
relay3_label, relay4_label, relay5_label, relay6_label, relay7_label, relay8_label};
void setup()
{
ReefAngel.Init(); //Initialize controller
// Initialize and start the web banner timer
ReefAngel.LoadWebBanner(pgm_read_word(&(webbanner_items[0])), SIZE(webbanner_items));
ReefAngel.Timer[4].SetInterval(180); // set interval to 180 seconds
ReefAngel.Timer[4].Start();
ReefAngel.OverheatShutoffPorts = B01000100;
// random timer for wavemaker
{
randomSeed(analogRead(0));
ReefAngel.Init(); //Initialize controller
ReefAngel.Timer[1].SetInterval(random(15,35));
ReefAngel.Timer[1].Start();
ReefAngel.Relay.On(Port5);
ReefAngel.Relay.Off(Port4);
}
}
void loop()
{
// Specific functions
ReefAngel.StandardATO(Port1);
//turn on main light
ReefAngel.StandardLights(2,10,00,17,00);
//turn on strip light 1 hr b4 main
ReefAngel.StandardLights(3,9,00,18,00);
//ReefAngel.Wavemaker1(Port4);
//ReefAngel.Wavemaker2(Port5);
// Ports that are always on
ReefAngel.Relay.On(Port6);
ReefAngel.Relay.On(Port8);
//ReefAngel.StandardHeater(Port7);
// Turn off Port 7 when the temp of 2 of T1, T2, T3 gets above 82.0 degrees
int TFlag1, TFlag2, TFlag3;
if ( ReefAngel.Params.Temp1 >= 820 )
{
TFlag1 = 1;
}
else {
TFlag1 = 0;
}
if ( ReefAngel.Params.Temp2 >= 820 )
{
TFlag2 = 1;
}
else {
TFlag2 = 0;
}
if ( ReefAngel.Params.Temp3 >= 820 )
{
TFlag3 = 1;
}
else {
TFlag3 = 0;
}
if (( TFlag1 + TFlag2 + TFlag3 > 1 )) ReefAngel.Relay.Off(Port7);
else ReefAngel.Relay.On(Port7);
// Turn on moon lights based at different levels 7pm and 7am.
if (hour()>19 || hour()<7)
{
if (hour()>19 || hour()<21){
ReefAngel.PWM.SetActinic(100);
ReefAngel.PWM.SetDaylight(100);
}
if (hour()>=21 || hour()<23){
ReefAngel.PWM.SetActinic(60);
ReefAngel.PWM.SetDaylight(80);
}
if (hour()>=23 || hour()<1){
ReefAngel.PWM.SetActinic(25);
ReefAngel.PWM.SetDaylight(50);
}
if (hour()>=1 || hour()<5){
ReefAngel.PWM.SetActinic(80);
ReefAngel.PWM.SetDaylight(60);
}
if (hour()>=5 || hour()<7){
ReefAngel.PWM.SetActinic(100);
ReefAngel.PWM.SetDaylight(100);
}
} else {
ReefAngel.PWM.SetActinic(0);
ReefAngel.PWM.SetDaylight(0);
}
// wavemaker code
ReefAngel.ShowInterface();
if ( ReefAngel.Timer[1].IsTriggered() )
{
ReefAngel.Timer[1].SetInterval(random(15,35));
ReefAngel.Timer[1].Start();
ReefAngel.Relay.Toggle(Port5);
ReefAngel.Relay.Toggle(Port4);
}
// Web Banner stuff
if(ReefAngel.Timer[4].IsTriggered())
{
ReefAngel.Timer[4].Start();
ReefAngel.WebBanner();
}
ReefAngel.ShowInterface();
}