// Autogenerated file by RAGen (v1.2.1.158), (02/18/2012 23:31)
// RA_021812_2331.ino
//This is the latest; 02/20/2012 wavemaker timer added
// This version designed for v0.9.0 or later
/* The following features are enabled for this File:
#define VersionMenu
#define wifi
#define SIMPLE_MENU
#define CUSTOM_MAIN
#define COLORS_PDE
#define FONT_8x8
#define FONT_8x16
*/
#include <ReefAngel_Features.h>
#include <RA_Colors.h>
#include <RA_CustomColors.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 <ReefAngel.h>
byte wmport=Port5;
boolean wmdelay=false;
void DrawCircle(int a, int b, int r, byte color)
//void ReefAngel_NokiaLCD::PutPixel(byte color, byte x, byte y)
{
int f = 1 - r;
int ddF_x = 1;
int ddF_y = -2 * r;
int x = 0;
int y = r;
ReefAngel.LCD.PutPixel(color, a, b+r);
ReefAngel.LCD.PutPixel(color ,a, b-r);
ReefAngel.LCD.PutPixel(color, a+r, b);
ReefAngel.LCD.PutPixel(color, a-r, b);
while (x<y)
{
if (f >= 0)
{ y--;
ddF_y += 2;
f += ddF_y;
}
x++;
ddF_x += 2;
f += ddF_x;
ReefAngel.LCD.PutPixel(color, a + x, b + y);
ReefAngel.LCD.PutPixel(color, a - x, b + y);
ReefAngel.LCD.PutPixel(color, a + x, b - y);
ReefAngel.LCD.PutPixel(color, a - x, b - y);
ReefAngel.LCD.PutPixel(color, a + y, b + x);
ReefAngel.LCD.PutPixel(color, a - y, b + x);
ReefAngel.LCD.PutPixel(color, a + y, b - x);
ReefAngel.LCD.PutPixel(color, a - y, b - x);
}
}
void FillCircle(int a, int b, int r, byte color)
{
int f = 1 - r;
int ddF_x = 1;
int ddF_y = -2 * r;
int x = 0;
int y = r;
for (int i=b-r; i<=b+r; i++)
{
ReefAngel.LCD.PutPixel(color, a, i);
}
while (x<y)
{
if (f >= 0)
{
y--;
ddF_y += 2;
f += ddF_y;
}
x++;
ddF_x += 2;
f += ddF_x;
for (int i=b-y; i<=b+y; i++)
{
ReefAngel.LCD.PutPixel(color, a+x, i);
ReefAngel.LCD.PutPixel(color, a-x, i);
}
for (int i=b-x; i<=b+x; i++)
{
ReefAngel.LCD.PutPixel(color,a+y, i);
ReefAngel.LCD.PutPixel(color,a-y, i);
}
}
}
//circle matched outletbox
//circle matched outletbox
void DrawCircleBox (byte x, byte y, byte RelayData)
{
byte a = 0;
byte b = 0;
byte c = 0;
for (a=0,c=1;a<2;a++,c--)
{
// 0 & 1
DrawCircle ((a*10)+x,y,5,COLOR_BLACK);
if ((RelayData&(1<<c))==1<<c)
{
FillCircle((a*10)+x,y,3,OutletOnBGColor);
}
else
{
FillCircle((a*10)+x,y,3,OutletOffBGColor);
}
}
for (a=2,c=3;a<4;a++,c--)
{
// 2 & 3
b=(a-2)*10;
DrawCircle (b+x,y+10,5,COLOR_BLACK);
if ((RelayData&(1<<c))==1<<c)
{
FillCircle(b+x,y+10,3,OutletOnBGColor);
}
else
{
FillCircle(b+x,y+10,3,OutletOffBGColor);
}
}
for (a=4,c=5;a<6;a++,c--)
{
// 4 & 5
b=(a-4)*10;
DrawCircle (b+x,y+20,5,COLOR_BLACK);
if ((RelayData&(1<<c))==1<<c)
{
FillCircle(b+x,y+20,3,OutletOnBGColor);
}
else
{
FillCircle(b+x,y+20,3,OutletOffBGColor);
}
}
for (a=6,c=7;a<8;a++,c--)
{
// 6 & 7
b=(a-6)*10;
DrawCircle (b+x,y+30,5,COLOR_BLACK);
if ((RelayData&(1<<c))==1<<c)
{
FillCircle(b+x,y+30,3,OutletOnBGColor);
}
else
{
FillCircle(b+x,y+30,3,OutletOffBGColor);
}
}
}
void DrawCustomMain()
{
ReefAngel.LCD.DrawDate(6, 120);
ReefAngel.LCD.DrawLargeText(COLOR_DARKTURQUOISE, COLOR_WHITE, 4, 4 , "ROB'S REEF ANGEL");
ReefAngel.LCD.Clear(COLOR_MAROON, 1, 13, 132, 13);
ReefAngel.LCD.Clear(COLOR_MAROON, 10, 75, 119, 75);
ReefAngel.LCD.Clear(COLOR_MAROON, 10, 59, 119, 59);
pingSerial();
ReefAngel.LCD.DrawLargeText(COLOR_GOLDENROD, COLOR_WHITE, 8, 15, "Main Tank:");
char text[7];
ConvertNumToString(text, ReefAngel.Params.Temp[T1_PROBE], 10);
pingSerial();
ReefAngel.LCD.DrawLargeText(COLOR_GOLDENROD, DefaultBGColor, 18, 30, text);
pingSerial();
ReefAngel.LCD.DrawText(COLOR_RED, COLOR_WHITE,8,48,"Frag:");
ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T3_PROBE], COLOR_RED, 40, 48, 10);
ReefAngel.LCD.DrawText(COLOR_DARKORCHID, COLOR_WHITE,70,48,"Room:");
ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T2_PROBE], T2TempColor, 100, 48, 10);
pingSerial();
ReefAngel.LCD.DrawLargeText(COLOR_MEDIUMSEAGREEN, COLOR_WHITE, 88, 15, "pH:");
ConvertNumToString(text, ReefAngel.Params.PH, 100);
ReefAngel.LCD.DrawLargeText(PHColor, DefaultBGColor, 88, 30, text);
pingSerial();
// Display arrows for Wavemaker
ReefAngel.LCD.DrawText(DPColor,DefaultBGColor, 5, 64,"WAVE FLOW:");
if (bitRead(ReefAngel.Relay.RelayData,Port5-1)==1) ReefAngel.LCD.DrawText(APColor,DefaultBGColor, 67, 64,"----->"); //port 5 on
else if (bitRead(ReefAngel.Relay.RelayData,Port6-1)==1) ReefAngel.LCD.DrawText(APColor,DefaultBGColor, 67, 64,"<-----"); //port 6 on
else ReefAngel.LCD.DrawText(APColor,DefaultBGColor, 67, 64," 00000 "); //port5 and port 6 off, wavemaker delay
//show the timer for wavemaker
int t=ReefAngel.Timer[1].Trigger-now();
if (t>=0)
ReefAngel.LCD.Clear(255,105,64,135,74);
ReefAngel.LCD.DrawText(APColor, COLOR_KHAKI,110,64,t);
pingSerial();
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,10,79,"Actinic");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,10,89,"FragLt");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,10,99,"WM RT");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,10,109,"Fan");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,80,79,"ATO");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,80,89,"DayLts");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,80,99,"WM LFT");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,80,109,"Heater");
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
DrawCircleBox (60,81,TempRelay);
//ReefAngel.LCD.DrawOutletBox(12, 93, TempRelay);
}
void DrawCustomGraph()
{
// ReefAngel.LCD.DrawGraph(5, 5);
}
void setup()
{
ReefAngel.Init(); //Initialize controller
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
ReefAngel.FeedingModePorts = Port5Bit | Port6Bit;
ReefAngel.WaterChangePorts = Port5Bit | Port6Bit;
ReefAngel.OverheatShutoffPorts = Port2Bit | Port3Bit | Port4Bit;
ReefAngel.LightsOnPorts = Port2Bit | Port3Bit | Port4Bit;
randomSeed(analogRead(0));
ReefAngel.Timer[1].SetInterval(random(30,45));
ReefAngel.Timer[1].Start();
ReefAngel.Relay.On(Port5);
}
void loop()
{
// Specific functions
ReefAngel.StandardATO(Port1);
ReefAngel.StandardLights(Port2);
ReefAngel.MHLights(Port3);
ReefAngel.MHLights(Port4);
//ReefAngel.Wavemaker1(Port5);
//ReefAngel.Wavemaker2(Port6);
ReefAngel.StandardHeater(Port7);
ReefAngel.StandardFan(Port8);
//wavemaker timers and slow down at night
if ( ReefAngel.Timer[1].IsTriggered() )
{
if ((hour() >= 21) || (hour() <= 8)) //from 9p-8a
{
if (wmdelay)
{
ReefAngel.Timer[1].SetInterval(60); // wm night delay
ReefAngel.Timer[1].Start();
ReefAngel.Relay.Off(Port5);
ReefAngel.Relay.Off(Port6);
if (wmport==Port5) wmport=Port6; else wmport=Port5;
wmdelay=false;
}
else
{
ReefAngel.Timer[1].SetInterval(20); // short wave
ReefAngel.Timer[1].Start();
ReefAngel.Relay.On(wmport);
wmdelay=true;
}
}
else
{
//8a-9p normal wave settings
ReefAngel.Timer[1].SetInterval(random(35,50));
ReefAngel.Timer[1].Start();
ReefAngel.Relay.Toggle(Port5);
if bitRead(ReefAngel.Relay.RelayData,Port5-1) ReefAngel.Relay.Off(Port6);
else ReefAngel.Relay.On(Port6);
}
}
ReefAngel.Portal("psyrob");
ReefAngel.ShowInterface();
}
Problem with ATO timeout or Overheat
Problem with ATO timeout or Overheat
I keep getting the "red dot" at strange times, in the middle of the night or when I'm at work...you know, the red dot steady on, with the screen blank....I do ATO timeout clear or Overheat clear and that fixes it, but I can't figure out why it is happening....I don't use an ATO yet, and my tank is not overheating...I am thinking there is something wrong in my code since I was doing a lot of cutting and pasting when the libraries were upgraded...anyone see something wrong here?
Re: Problem with ATO timeout or Overheat
Can you verify first which one is that you need to clear?
Is it just ATO or Just Overheat or it is both at different occasions?
Is it just ATO or Just Overheat or it is both at different occasions?
Roberto.
Re: Problem with ATO timeout or Overheat
does this read better?
Code: Select all
// Autogenerated file by RAGen (v1.2.1.158), (02/18/2012 23:31)
// RA_021812_2331.ino
//This is the latest; 02/20/2012 wavemaker timer added
// This version designed for v0.9.0 or later
/* The following features are enabled for this File:
#define VersionMenu
#define wifi
#define SIMPLE_MENU
#define CUSTOM_MAIN
#define COLORS_PDE
#define FONT_8x8
#define FONT_8x16
*/
#include <ReefAngel_Features.h>
#include <RA_Colors.h>
#include <RA_CustomColors.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 <ReefAngel.h>
byte wmport=Port5;
boolean wmdelay=false;
void DrawCircle(int a, int b, int r, byte color)
//void ReefAngel_NokiaLCD::PutPixel(byte color, byte x, byte y)
{
int f = 1 - r;
int ddF_x = 1;
int ddF_y = -2 * r;
int x = 0;
int y = r;
ReefAngel.LCD.PutPixel(color, a, b+r);
ReefAngel.LCD.PutPixel(color ,a, b-r);
ReefAngel.LCD.PutPixel(color, a+r, b);
ReefAngel.LCD.PutPixel(color, a-r, b);
while (x<y)
{
if (f >= 0)
{ y--;
ddF_y += 2;
f += ddF_y;
}
x++;
ddF_x += 2;
f += ddF_x;
ReefAngel.LCD.PutPixel(color, a + x, b + y);
ReefAngel.LCD.PutPixel(color, a - x, b + y);
ReefAngel.LCD.PutPixel(color, a + x, b - y);
ReefAngel.LCD.PutPixel(color, a - x, b - y);
ReefAngel.LCD.PutPixel(color, a + y, b + x);
ReefAngel.LCD.PutPixel(color, a - y, b + x);
ReefAngel.LCD.PutPixel(color, a + y, b - x);
ReefAngel.LCD.PutPixel(color, a - y, b - x);
}
}
void FillCircle(int a, int b, int r, byte color)
{
int f = 1 - r;
int ddF_x = 1;
int ddF_y = -2 * r;
int x = 0;
int y = r;
for (int i=b-r; i<=b+r; i++)
{
ReefAngel.LCD.PutPixel(color, a, i);
}
while (x<y)
{
if (f >= 0)
{
y--;
ddF_y += 2;
f += ddF_y;
}
x++;
ddF_x += 2;
f += ddF_x;
for (int i=b-y; i<=b+y; i++)
{
ReefAngel.LCD.PutPixel(color, a+x, i);
ReefAngel.LCD.PutPixel(color, a-x, i);
}
for (int i=b-x; i<=b+x; i++)
{
ReefAngel.LCD.PutPixel(color,a+y, i);
ReefAngel.LCD.PutPixel(color,a-y, i);
}
}
}
//circle matched outletbox
//circle matched outletbox
void DrawCircleBox (byte x, byte y, byte RelayData)
{
byte a = 0;
byte b = 0;
byte c = 0;
for (a=0,c=1;a<2;a++,c--)
{
// 0 & 1
DrawCircle ((a*10)+x,y,5,COLOR_BLACK);
if ((RelayData&(1<<c))==1<<c)
{
FillCircle((a*10)+x,y,3,OutletOnBGColor);
}
else
{
FillCircle((a*10)+x,y,3,OutletOffBGColor);
}
}
for (a=2,c=3;a<4;a++,c--)
{
// 2 & 3
b=(a-2)*10;
DrawCircle (b+x,y+10,5,COLOR_BLACK);
if ((RelayData&(1<<c))==1<<c)
{
FillCircle(b+x,y+10,3,OutletOnBGColor);
}
else
{
FillCircle(b+x,y+10,3,OutletOffBGColor);
}
}
for (a=4,c=5;a<6;a++,c--)
{
// 4 & 5
b=(a-4)*10;
DrawCircle (b+x,y+20,5,COLOR_BLACK);
if ((RelayData&(1<<c))==1<<c)
{
FillCircle(b+x,y+20,3,OutletOnBGColor);
}
else
{
FillCircle(b+x,y+20,3,OutletOffBGColor);
}
}
for (a=6,c=7;a<8;a++,c--)
{
// 6 & 7
b=(a-6)*10;
DrawCircle (b+x,y+30,5,COLOR_BLACK);
if ((RelayData&(1<<c))==1<<c)
{
FillCircle(b+x,y+30,3,OutletOnBGColor);
}
else
{
FillCircle(b+x,y+30,3,OutletOffBGColor);
}
}
}
void DrawCustomMain()
{
ReefAngel.LCD.DrawDate(6, 120);
ReefAngel.LCD.DrawLargeText(COLOR_DARKTURQUOISE, COLOR_WHITE, 4, 4 , "ROB'S REEF ANGEL");
ReefAngel.LCD.Clear(COLOR_MAROON, 1, 13, 132, 13);
ReefAngel.LCD.Clear(COLOR_MAROON, 10, 75, 119, 75);
ReefAngel.LCD.Clear(COLOR_MAROON, 10, 59, 119, 59);
pingSerial();
ReefAngel.LCD.DrawLargeText(COLOR_GOLDENROD, COLOR_WHITE, 8, 15, "Main Tank:");
char text[7];
ConvertNumToString(text, ReefAngel.Params.Temp[T1_PROBE], 10);
pingSerial();
ReefAngel.LCD.DrawLargeText(COLOR_GOLDENROD, DefaultBGColor, 18, 30, text);
pingSerial();
ReefAngel.LCD.DrawText(COLOR_RED, COLOR_WHITE,8,48,"Frag:");
ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T3_PROBE], COLOR_RED, 40, 48, 10);
ReefAngel.LCD.DrawText(COLOR_DARKORCHID, COLOR_WHITE,70,48,"Room:");
ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T2_PROBE], T2TempColor, 100, 48, 10);
pingSerial();
ReefAngel.LCD.DrawLargeText(COLOR_MEDIUMSEAGREEN, COLOR_WHITE, 88, 15, "pH:");
ConvertNumToString(text, ReefAngel.Params.PH, 100);
ReefAngel.LCD.DrawLargeText(PHColor, DefaultBGColor, 88, 30, text);
pingSerial();
// Display arrows for Wavemaker
ReefAngel.LCD.DrawText(DPColor,DefaultBGColor, 5, 64,"WAVE FLOW:");
if (bitRead(ReefAngel.Relay.RelayData,Port5-1)==1) ReefAngel.LCD.DrawText(APColor,DefaultBGColor, 67, 64,"----->"); //port 5 on
else if (bitRead(ReefAngel.Relay.RelayData,Port6-1)==1) ReefAngel.LCD.DrawText(APColor,DefaultBGColor, 67, 64,"<-----"); //port 6 on
else ReefAngel.LCD.DrawText(APColor,DefaultBGColor, 67, 64," 00000 "); //port5 and port 6 off, wavemaker delay
//show the timer for wavemaker
int t=ReefAngel.Timer[1].Trigger-now();
if (t>=0)
ReefAngel.LCD.Clear(255,105,64,135,74);
ReefAngel.LCD.DrawText(APColor, COLOR_KHAKI,110,64,t);
pingSerial();
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,10,79,"Actinic");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,10,89,"FragLt");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,10,99,"WM RT");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,10,109,"Fan");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,80,79,"ATO");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,80,89,"DayLts");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,80,99,"WM LFT");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,80,109,"Heater");
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
DrawCircleBox (60,81,TempRelay);
//ReefAngel.LCD.DrawOutletBox(12, 93, TempRelay);
}
void DrawCustomGraph()
{
// ReefAngel.LCD.DrawGraph(5, 5);
}
void setup()
{
ReefAngel.Init(); //Initialize controller
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE;
ReefAngel.FeedingModePorts = Port5Bit | Port6Bit;
ReefAngel.WaterChangePorts = Port5Bit | Port6Bit;
ReefAngel.OverheatShutoffPorts = Port2Bit | Port3Bit | Port4Bit;
ReefAngel.LightsOnPorts = Port2Bit | Port3Bit | Port4Bit;
randomSeed(analogRead(0));
ReefAngel.Timer[1].SetInterval(random(30,45));
ReefAngel.Timer[1].Start();
ReefAngel.Relay.On(Port5);
}
void loop()
{
// Specific functions
ReefAngel.StandardATO(Port1);
ReefAngel.StandardLights(Port2);
ReefAngel.MHLights(Port3);
ReefAngel.MHLights(Port4);
//ReefAngel.Wavemaker1(Port5);
//ReefAngel.Wavemaker2(Port6);
ReefAngel.StandardHeater(Port7);
ReefAngel.StandardFan(Port8);
//wavemaker timers and slow down at night
if ( ReefAngel.Timer[1].IsTriggered() )
{
if ((hour() >= 21) || (hour() <= 8)) //from 9p-8a
{
if (wmdelay)
{
ReefAngel.Timer[1].SetInterval(60); // wm night delay
ReefAngel.Timer[1].Start();
ReefAngel.Relay.Off(Port5);
ReefAngel.Relay.Off(Port6);
if (wmport==Port5) wmport=Port6; else wmport=Port5;
wmdelay=false;
}
else
{
ReefAngel.Timer[1].SetInterval(20); // short wave
ReefAngel.Timer[1].Start();
ReefAngel.Relay.On(wmport);
wmdelay=true;
}
}
else
{
//8a-9p normal wave settings
ReefAngel.Timer[1].SetInterval(random(35,50));
ReefAngel.Timer[1].Start();
ReefAngel.Relay.Toggle(Port5);
if bitRead(ReefAngel.Relay.RelayData,Port5-1) ReefAngel.Relay.Off(Port6);
else ReefAngel.Relay.On(Port6);
}
}
ReefAngel.Portal("psyrob");
ReefAngel.ShowInterface();
}
Re: Problem with ATO timeout or Overheat
Well, I admit that I done either each time it happens, one time I do the Overheat clear one time the ATO...Not systematic I know...
This morning I did the ATO Clear and it cleared the red dot...
This morning I did the ATO Clear and it cleared the red dot...
Re: Problem with ATO timeout or Overheat
A few days ago I noticed that I had switched these two lines:
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE
they were originally
ReefAngel.OverheatProbe = T1_PROBE
ReefAngel.TempProbe = T1_PROBE;
and I reversed the order so they are now in the right order... I thought that had been the problem, but then it happened again this morning...
ReefAngel.TempProbe = T1_PROBE;
ReefAngel.OverheatProbe = T1_PROBE
they were originally
ReefAngel.OverheatProbe = T1_PROBE
ReefAngel.TempProbe = T1_PROBE;
and I reversed the order so they are now in the right order... I thought that had been the problem, but then it happened again this morning...
Re: Problem with ATO timeout or Overheat
Nah, the order of it does not affect the functionality.
But, I think it is the overheat and not the ATO.
How many probes do you have?
Do you use Icecap ballast?
Try removing this to see what happens:
But, I think it is the overheat and not the ATO.
How many probes do you have?
Do you use Icecap ballast?
Try removing this to see what happens:
Code: Select all
ReefAngel.OverheatProbe = T1_PROBE
Roberto.
Re: Problem with ATO timeout or Overheat
I have three temp probes, one in the display tank, one in the frag tank and one in the room...I don't put one in the hood...Don't have Icecap, I think it is Fulham? I'm at work but when I get home I will try removing that line...
Re: Problem with ATO timeout or Overheat
I had this issue with mine and it was the ATO, my tank is to big and the default 60s time for the was not enough to get the water were it should be, i modify the PDE to make the ATO go for 180s and problem solved.
Re: Problem with ATO timeout or Overheat
Roberto:
Finally just removed the line you recommended...I will see what happens over nite...the lights have been going out the past two days and I know that there has been no overheating of the tank...what next, if this line was the problem? How do I program an overheat function?
Finally just removed the line you recommended...I will see what happens over nite...the lights have been going out the past two days and I know that there has been no overheating of the tank...what next, if this line was the problem? How do I program an overheat function?
Re: Problem with ATO timeout or Overheat
OK, two days have gone by and no more overheat time out after removing the line you said to...but does this leave me without overheat protection? and why the original problem?
Re: Problem with ATO timeout or Overheat
The default probe for overheat is T2.
What are you measuring with T2?
What are you measuring with T2?
Roberto.
Re: Problem with ATO timeout or Overheat
Temp 2 is my room probe...would I have to switch it so Temp 2 is in the display tank?
Re: Problem with ATO timeout or Overheat
Let's check for spikes on T1.
Code: Select all
// Autogenerated file by RAGen (v1.2.1.158), (02/18/2012 23:31)
// RA_021812_2331.ino
//This is the latest; 02/20/2012 wavemaker timer added
// This version designed for v0.9.0 or later
/* The following features are enabled for this File:
#define VersionMenu
#define wifi
#define SIMPLE_MENU
#define CUSTOM_MAIN
#define COLORS_PDE
#define FONT_8x8
#define FONT_8x16
*/
#include <ReefAngel_Features.h>
#include <RA_Colors.h>
#include <RA_CustomColors.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 <ReefAngel.h>
byte wmport=Port5;
boolean wmdelay=false;
int MaxT1=0;
void DrawCircle(int a, int b, int r, byte color)
//void ReefAngel_NokiaLCD::PutPixel(byte color, byte x, byte y)
{
int f = 1 - r;
int ddF_x = 1;
int ddF_y = -2 * r;
int x = 0;
int y = r;
ReefAngel.LCD.PutPixel(color, a, b+r);
ReefAngel.LCD.PutPixel(color ,a, b-r);
ReefAngel.LCD.PutPixel(color, a+r, b);
ReefAngel.LCD.PutPixel(color, a-r, b);
while (x<y)
{
if (f >= 0)
{
y--;
ddF_y += 2;
f += ddF_y;
}
x++;
ddF_x += 2;
f += ddF_x;
ReefAngel.LCD.PutPixel(color, a + x, b + y);
ReefAngel.LCD.PutPixel(color, a - x, b + y);
ReefAngel.LCD.PutPixel(color, a + x, b - y);
ReefAngel.LCD.PutPixel(color, a - x, b - y);
ReefAngel.LCD.PutPixel(color, a + y, b + x);
ReefAngel.LCD.PutPixel(color, a - y, b + x);
ReefAngel.LCD.PutPixel(color, a + y, b - x);
ReefAngel.LCD.PutPixel(color, a - y, b - x);
}
}
void FillCircle(int a, int b, int r, byte color)
{
int f = 1 - r;
int ddF_x = 1;
int ddF_y = -2 * r;
int x = 0;
int y = r;
for (int i=b-r; i<=b+r; i++)
{
ReefAngel.LCD.PutPixel(color, a, i);
}
while (x<y)
{
if (f >= 0)
{
y--;
ddF_y += 2;
f += ddF_y;
}
x++;
ddF_x += 2;
f += ddF_x;
for (int i=b-y; i<=b+y; i++)
{
ReefAngel.LCD.PutPixel(color, a+x, i);
ReefAngel.LCD.PutPixel(color, a-x, i);
}
for (int i=b-x; i<=b+x; i++)
{
ReefAngel.LCD.PutPixel(color,a+y, i);
ReefAngel.LCD.PutPixel(color,a-y, i);
}
}
}
//circle matched outletbox
//circle matched outletbox
void DrawCircleBox (byte x, byte y, byte RelayData)
{
byte a = 0;
byte b = 0;
byte c = 0;
for (a=0,c=1;a<2;a++,c--)
{
// 0 & 1
DrawCircle ((a*10)+x,y,5,COLOR_BLACK);
if ((RelayData&(1<<c))==1<<c)
{
FillCircle((a*10)+x,y,3,OutletOnBGColor);
}
else
{
FillCircle((a*10)+x,y,3,OutletOffBGColor);
}
}
for (a=2,c=3;a<4;a++,c--)
{
// 2 & 3
b=(a-2)*10;
DrawCircle (b+x,y+10,5,COLOR_BLACK);
if ((RelayData&(1<<c))==1<<c)
{
FillCircle(b+x,y+10,3,OutletOnBGColor);
}
else
{
FillCircle(b+x,y+10,3,OutletOffBGColor);
}
}
for (a=4,c=5;a<6;a++,c--)
{
// 4 & 5
b=(a-4)*10;
DrawCircle (b+x,y+20,5,COLOR_BLACK);
if ((RelayData&(1<<c))==1<<c)
{
FillCircle(b+x,y+20,3,OutletOnBGColor);
}
else
{
FillCircle(b+x,y+20,3,OutletOffBGColor);
}
}
for (a=6,c=7;a<8;a++,c--)
{
// 6 & 7
b=(a-6)*10;
DrawCircle (b+x,y+30,5,COLOR_BLACK);
if ((RelayData&(1<<c))==1<<c)
{
FillCircle(b+x,y+30,3,OutletOnBGColor);
}
else
{
FillCircle(b+x,y+30,3,OutletOffBGColor);
}
}
}
void DrawCustomMain()
{
ReefAngel.LCD.DrawDate(6, 120);
ReefAngel.LCD.DrawLargeText(COLOR_DARKTURQUOISE, COLOR_WHITE, 4, 4 , "ROB'S REEF ANGEL");
ReefAngel.LCD.Clear(COLOR_MAROON, 1, 13, 132, 13);
ReefAngel.LCD.Clear(COLOR_MAROON, 10, 75, 119, 75);
ReefAngel.LCD.Clear(COLOR_MAROON, 10, 59, 119, 59);
pingSerial();
ReefAngel.LCD.DrawLargeText(COLOR_GOLDENROD, COLOR_WHITE, 8, 15, "Main Tank:");
char text[7];
ConvertNumToString(text, ReefAngel.Params.Temp[T1_PROBE], 10);
pingSerial();
ReefAngel.LCD.DrawLargeText(COLOR_GOLDENROD, DefaultBGColor, 18, 30, text);
ConvertNumToString(text, MaxT1, 10);
pingSerial();
ReefAngel.LCD.DrawLargeText(COLOR_DARKORCHID, DefaultBGColor, 18, 38, text);
pingSerial();
ReefAngel.LCD.DrawText(COLOR_RED, COLOR_WHITE,8,48,"Frag:");
ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T3_PROBE], COLOR_RED, 40, 48, 10);
ReefAngel.LCD.DrawText(COLOR_DARKORCHID, COLOR_WHITE,70,48,"Room:");
ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T2_PROBE], T2TempColor, 100, 48, 10);
pingSerial();
ReefAngel.LCD.DrawLargeText(COLOR_MEDIUMSEAGREEN, COLOR_WHITE, 88, 15, "pH:");
ConvertNumToString(text, ReefAngel.Params.PH, 100);
ReefAngel.LCD.DrawLargeText(PHColor, DefaultBGColor, 88, 30, text);
pingSerial();
// Display arrows for Wavemaker
ReefAngel.LCD.DrawText(DPColor,DefaultBGColor, 5, 64,"WAVE FLOW:");
if (bitRead(ReefAngel.Relay.RelayData,Port5-1)==1) ReefAngel.LCD.DrawText(APColor,DefaultBGColor, 67, 64,"----->"); //port 5 on
else if (bitRead(ReefAngel.Relay.RelayData,Port6-1)==1) ReefAngel.LCD.DrawText(APColor,DefaultBGColor, 67, 64,"<-----"); //port 6 on
else ReefAngel.LCD.DrawText(APColor,DefaultBGColor, 67, 64," 00000 "); //port5 and port 6 off, wavemaker delay
//show the timer for wavemaker
int t=ReefAngel.Timer[1].Trigger-now();
if (t>=0)
ReefAngel.LCD.Clear(255,105,64,135,74);
ReefAngel.LCD.DrawText(APColor, COLOR_KHAKI,110,64,t);
pingSerial();
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,10,79,"Actinic");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,10,89,"FragLt");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,10,99,"WM RT");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,10,109,"Fan");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,80,79,"ATO");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,80,89,"DayLts");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,80,99,"WM LFT");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,80,109,"Heater");
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
DrawCircleBox (60,81,TempRelay);
//ReefAngel.LCD.DrawOutletBox(12, 93, TempRelay);
}
void DrawCustomGraph()
{
// ReefAngel.LCD.DrawGraph(5, 5);
}
void setup()
{
ReefAngel.Init(); //Initialize controller
ReefAngel.TempProbe = T1_PROBE;
//ReefAngel.OverheatProbe = T1_PROBE;
ReefAngel.FeedingModePorts = Port5Bit | Port6Bit;
ReefAngel.WaterChangePorts = Port5Bit | Port6Bit;
ReefAngel.OverheatShutoffPorts = Port2Bit | Port3Bit | Port4Bit;
ReefAngel.LightsOnPorts = Port2Bit | Port3Bit | Port4Bit;
randomSeed(analogRead(0));
ReefAngel.Timer[1].SetInterval(random(30,45));
ReefAngel.Timer[1].Start();
ReefAngel.Relay.On(Port5);
}
void loop()
{
if (ReefAngel.Params.Temp[T1_PROBE]>MaxT1) MaxT1=ReefAngel.Params.Temp[T1_PROBE];
// Specific functions
ReefAngel.StandardATO(Port1);
ReefAngel.StandardLights(Port2);
ReefAngel.MHLights(Port3);
ReefAngel.MHLights(Port4);
//ReefAngel.Wavemaker1(Port5);
//ReefAngel.Wavemaker2(Port6);
ReefAngel.StandardHeater(Port7);
ReefAngel.StandardFan(Port8);
//wavemaker timers and slow down at night
if ( ReefAngel.Timer[1].IsTriggered() )
{
if ((hour() >= 21) || (hour() <= 8)) //from 9p-8a
{
if (wmdelay)
{
ReefAngel.Timer[1].SetInterval(60); // wm night delay
ReefAngel.Timer[1].Start();
ReefAngel.Relay.Off(Port5);
ReefAngel.Relay.Off(Port6);
if (wmport==Port5) wmport=Port6;
else wmport=Port5;
wmdelay=false;
}
else
{
ReefAngel.Timer[1].SetInterval(20); // short wave
ReefAngel.Timer[1].Start();
ReefAngel.Relay.On(wmport);
wmdelay=true;
}
}
else
{
//8a-9p normal wave settings
ReefAngel.Timer[1].SetInterval(random(35,50));
ReefAngel.Timer[1].Start();
ReefAngel.Relay.Toggle(Port5);
if bitRead(ReefAngel.Relay.RelayData,Port5-1) ReefAngel.Relay.Off(Port6);
else ReefAngel.Relay.On(Port6);
}
}
ReefAngel.Portal("psyrob");
ReefAngel.ShowInterface();
}
Roberto.
Re: Problem with ATO timeout or Overheat
Aye. Aye Captain...uploaded, will monitor for spikes...
Re: Problem with ATO timeout or Overheat
Well, checked the controller right now...the code you added reported a high temperature of over 2300 degrees!! is that like the surface of the sun?!
What does this mean? is the probe failing?
What does this mean? is the probe failing?
Re: Problem with ATO timeout or Overheat
Either that or something is interfering with the readings.
Was the red status LED lit after this reading?
I've seen MH ballast do that in the past and that's why I asked if you had Icecaps. There is a model of 400W Icecaps that generates some nasty noise.
I thought that Curt had something on the libraries to filter out junk if the noise ever interfered with the probe readings.
I'll take a look at the libraries again.
Was the red status LED lit after this reading?
I've seen MH ballast do that in the past and that's why I asked if you had Icecaps. There is a model of 400W Icecaps that generates some nasty noise.
I thought that Curt had something on the libraries to filter out junk if the noise ever interfered with the probe readings.
I'll take a look at the libraries again.
Roberto.
Re: Problem with ATO timeout or Overheat
The red status LED light was off when I found this reading....I have T5s, not MHs, and I have two Accustart ballasts driving the 4X54 watt bulbs...I think the reading was obtained after the lights were already out, but I am not sure.
Re: Problem with ATO timeout or Overheat
I've made a change on the libraries to take care of the out of range readings.
Let's have Curt take a look at it too
Let's have Curt take a look at it too
Roberto.
Re: Problem with ATO timeout or Overheat
I do have something in the libraries to handle the additional fluctuations. It's enabled by default but people can disable it by adding the "DirectTempSensor" define (this reads the values without any buffering/filtering). I'll take a look at the additional changes later this weekend.
Re: Problem with ATO timeout or Overheat
Well, its been almost a month without this happening, but it is starting again...I am getting overheat timeouts during the middle of the day and i know that there is no overheating going on...
I have not uploaded the libraries since the date of the code, March 22...
Is updating the libraries going to do the trick?
here is the code....
I have not uploaded the libraries since the date of the code, March 22...
Is updating the libraries going to do the trick?
here is the code....
Code: Select all
// Autogenerated file by RAGen (v1.2.1.158), (02/18/2012 23:31)
// RA_021812_2331.ino
//This is the latest; 03/22/2012 wavemaker timer added
//roberto's code to test for temp spikes
// This version designed for v0.9.0 or later
/* The following features are enabled for this File:
#define VersionMenu
#define wifi
#define SIMPLE_MENU
#define CUSTOM_MAIN
#define COLORS_PDE
#define FONT_8x8
#define FONT_8x16
*/
#include <ReefAngel_Features.h>
#include <RA_Colors.h>
#include <RA_CustomColors.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 <ReefAngel.h>
byte wmport=Port5;
boolean wmdelay=false;
int MaxT1=0;
void DrawCircle(int a, int b, int r, byte color)
//void ReefAngel_NokiaLCD::PutPixel(byte color, byte x, byte y)
{
int f = 1 - r;
int ddF_x = 1;
int ddF_y = -2 * r;
int x = 0;
int y = r;
ReefAngel.LCD.PutPixel(color, a, b+r);
ReefAngel.LCD.PutPixel(color ,a, b-r);
ReefAngel.LCD.PutPixel(color, a+r, b);
ReefAngel.LCD.PutPixel(color, a-r, b);
while (x<y)
{
if (f >= 0)
{
y--;
ddF_y += 2;
f += ddF_y;
}
x++;
ddF_x += 2;
f += ddF_x;
ReefAngel.LCD.PutPixel(color, a + x, b + y);
ReefAngel.LCD.PutPixel(color, a - x, b + y);
ReefAngel.LCD.PutPixel(color, a + x, b - y);
ReefAngel.LCD.PutPixel(color, a - x, b - y);
ReefAngel.LCD.PutPixel(color, a + y, b + x);
ReefAngel.LCD.PutPixel(color, a - y, b + x);
ReefAngel.LCD.PutPixel(color, a + y, b - x);
ReefAngel.LCD.PutPixel(color, a - y, b - x);
}
}
void FillCircle(int a, int b, int r, byte color)
{
int f = 1 - r;
int ddF_x = 1;
int ddF_y = -2 * r;
int x = 0;
int y = r;
for (int i=b-r; i<=b+r; i++)
{
ReefAngel.LCD.PutPixel(color, a, i);
}
while (x<y)
{
if (f >= 0)
{
y--;
ddF_y += 2;
f += ddF_y;
}
x++;
ddF_x += 2;
f += ddF_x;
for (int i=b-y; i<=b+y; i++)
{
ReefAngel.LCD.PutPixel(color, a+x, i);
ReefAngel.LCD.PutPixel(color, a-x, i);
}
for (int i=b-x; i<=b+x; i++)
{
ReefAngel.LCD.PutPixel(color,a+y, i);
ReefAngel.LCD.PutPixel(color,a-y, i);
}
}
}
//circle matched outletbox
//circle matched outletbox
void DrawCircleBox (byte x, byte y, byte RelayData)
{
byte a = 0;
byte b = 0;
byte c = 0;
for (a=0,c=1;a<2;a++,c--)
{
// 0 & 1
DrawCircle ((a*10)+x,y,5,COLOR_BLACK);
if ((RelayData&(1<<c))==1<<c)
{
FillCircle((a*10)+x,y,3,OutletOnBGColor);
}
else
{
FillCircle((a*10)+x,y,3,OutletOffBGColor);
}
}
for (a=2,c=3;a<4;a++,c--)
{
// 2 & 3
b=(a-2)*10;
DrawCircle (b+x,y+10,5,COLOR_BLACK);
if ((RelayData&(1<<c))==1<<c)
{
FillCircle(b+x,y+10,3,OutletOnBGColor);
}
else
{
FillCircle(b+x,y+10,3,OutletOffBGColor);
}
}
for (a=4,c=5;a<6;a++,c--)
{
// 4 & 5
b=(a-4)*10;
DrawCircle (b+x,y+20,5,COLOR_BLACK);
if ((RelayData&(1<<c))==1<<c)
{
FillCircle(b+x,y+20,3,OutletOnBGColor);
}
else
{
FillCircle(b+x,y+20,3,OutletOffBGColor);
}
}
for (a=6,c=7;a<8;a++,c--)
{
// 6 & 7
b=(a-6)*10;
DrawCircle (b+x,y+30,5,COLOR_BLACK);
if ((RelayData&(1<<c))==1<<c)
{
FillCircle(b+x,y+30,3,OutletOnBGColor);
}
else
{
FillCircle(b+x,y+30,3,OutletOffBGColor);
}
}
}
void DrawCustomMain()
{
ReefAngel.LCD.DrawDate(6, 120);
ReefAngel.LCD.DrawLargeText(COLOR_DARKTURQUOISE, COLOR_WHITE, 4, 4 , "ROB'S REEF ANGEL");
ReefAngel.LCD.Clear(COLOR_MAROON, 1, 13, 132, 13);
ReefAngel.LCD.Clear(COLOR_MAROON, 10, 75, 119, 75);
ReefAngel.LCD.Clear(COLOR_MAROON, 10, 59, 119, 59);
pingSerial();
ReefAngel.LCD.DrawLargeText(COLOR_GOLDENROD, COLOR_WHITE, 8, 15, "Big Tank");
char text[7];
ConvertNumToString(text, ReefAngel.Params.Temp[T1_PROBE], 10);
pingSerial();
ReefAngel.LCD.DrawLargeText(COLOR_GOLDENROD, DefaultBGColor, 18, 30, text);
ConvertNumToString(text, MaxT1, 10);
pingSerial();
ReefAngel.LCD.DrawLargeText(COLOR_DARKORCHID, DefaultBGColor, 18, 38, text);
pingSerial();
ReefAngel.LCD.DrawText(COLOR_RED, COLOR_WHITE,8,48,"Frag:");
ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T3_PROBE], COLOR_RED, 40, 48, 10);
ReefAngel.LCD.DrawText(COLOR_DARKORCHID, COLOR_WHITE,70,48,"Room:");
ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T2_PROBE], T2TempColor, 100, 48, 10);
pingSerial();
ReefAngel.LCD.DrawLargeText(COLOR_MEDIUMSEAGREEN, COLOR_WHITE, 92, 15, "pH");
ConvertNumToString(text, ReefAngel.Params.PH, 100);
ReefAngel.LCD.DrawLargeText(PHColor, DefaultBGColor, 88, 30, text);
pingSerial();
// Display arrows for Wavemaker
ReefAngel.LCD.DrawText(DPColor,DefaultBGColor, 5, 64,"WAVE FLOW:");
if (bitRead(ReefAngel.Relay.RelayData,Port5-1)==1) ReefAngel.LCD.DrawText(APColor,DefaultBGColor, 67, 64,"----->"); //port 5 on
else if (bitRead(ReefAngel.Relay.RelayData,Port6-1)==1) ReefAngel.LCD.DrawText(APColor,DefaultBGColor, 67, 64,"<-----"); //port 6 on
else ReefAngel.LCD.DrawText(APColor,DefaultBGColor, 67, 64," 00000 "); //port5 and port 6 off, wavemaker delay
//show the timer for wavemaker
int t=ReefAngel.Timer[1].Trigger-now();
if (t>=0)
ReefAngel.LCD.Clear(255,105,64,135,74);
ReefAngel.LCD.DrawText(APColor, COLOR_KHAKI,110,64,t);
pingSerial();
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,10,79,"Actinic");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,10,89,"FragLt");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,10,99,"WM RT");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,10,109,"Fan");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,80,79,"ATO");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,80,89,"DayLts");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,80,99,"WM LFT");
ReefAngel.LCD.DrawText(COLOR_MEDIUMSEAGREEN,DefaultBGColor,80,109,"Heater");
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
DrawCircleBox (60,81,TempRelay);
//ReefAngel.LCD.DrawOutletBox(12, 93, TempRelay);
}
void DrawCustomGraph()
{
// ReefAngel.LCD.DrawGraph(5, 5);
}
void setup()
{
ReefAngel.Init(); //Initialize controller
ReefAngel.TempProbe = T1_PROBE;
//ReefAngel.OverheatProbe = T1_PROBE;
ReefAngel.FeedingModePorts = Port5Bit | Port6Bit;
ReefAngel.WaterChangePorts = Port5Bit | Port6Bit;
ReefAngel.OverheatShutoffPorts = Port2Bit | Port3Bit | Port4Bit;
ReefAngel.LightsOnPorts = Port2Bit | Port3Bit | Port4Bit;
randomSeed(analogRead(0));
ReefAngel.Timer[1].SetInterval(random(30,45));
ReefAngel.Timer[1].Start();
ReefAngel.Relay.On(Port5);
}
void loop()
{
if (ReefAngel.Params.Temp[T1_PROBE]>MaxT1) MaxT1=ReefAngel.Params.Temp[T1_PROBE];
// Specific functions
ReefAngel.StandardATO(Port1);
ReefAngel.StandardLights(Port2);
ReefAngel.MHLights(Port3);
ReefAngel.MHLights(Port4);
//ReefAngel.Wavemaker1(Port5);
//ReefAngel.Wavemaker2(Port6);
ReefAngel.StandardHeater(Port7);
ReefAngel.StandardFan(Port8);
//wavemaker timers and slow down at night
if ( ReefAngel.Timer[1].IsTriggered() )
{
if ((hour() >= 21) || (hour() <= 8)) //from 9p-8a
{
if (wmdelay)
{
ReefAngel.Timer[1].SetInterval(60); // wm night delay
ReefAngel.Timer[1].Start();
ReefAngel.Relay.Off(Port5);
ReefAngel.Relay.Off(Port6);
if (wmport==Port5) wmport=Port6;
else wmport=Port5;
wmdelay=false;
}
else
{
ReefAngel.Timer[1].SetInterval(20); // short wave
ReefAngel.Timer[1].Start();
ReefAngel.Relay.On(wmport);
wmdelay=true;
}
}
else
{
//8a-9p normal wave settings
ReefAngel.Timer[1].SetInterval(random(35,50));
ReefAngel.Timer[1].Start();
ReefAngel.Relay.Toggle(Port5);
if bitRead(ReefAngel.Relay.RelayData,Port5-1) ReefAngel.Relay.Off(Port6);
else ReefAngel.Relay.On(Port6);
}
}
ReefAngel.Portal("psyrob");
ReefAngel.ShowInterface();
}
Re: Problem with ATO timeout or Overheat
I've made a change on the libraries not too long ago. Can you try updating it and let me know if you still have this issues?
Roberto.
Re: Problem with ATO timeout or Overheat
OK, updated libraries on Friday, as of now (monday morning), no Overheat alarms...and the "max temp" code you sent me is still on, it is reporting the real max temp, like 81 or whatever, not the "spike" temps of 2900 degrees, so it seems problem is solved for now...thanks