PDE:
Code: Select all
#include <ReefAngel_Features.h>
#include <Globals.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_Wifi.h>
#include <Timer.h>
#include <Memory.h>
#include <InternalEEPROM.h>
#include <RA_Colors.h>
#include <RA_CustomColors.h>
#include <AI.h>
#include <PH.h>
#include <IO.h>
#include <WaterLevel.h>
#include <ReefAngel.h>
#include <avr/pgmspace.h>
//Ports assignment:
//First relay box is for the reef system.
//Port1 - Metal Halide Daylights.
#define lights Port1
//Port2 - AWC drain pump.
#define AWCdrain Port2
//Port3 - AWC fill pump.
#define AWCfill Port3
//Port4 - Chiller, feed pump, & exhaust fans.
#define chiller Port4
//Port5 - Clockwise circulation pumps.
#define clockCirc Port5
//Port6 - Counterclockwise circulation pumps.
#define countCirc Port6
//Port7 - ATO pump.
#define ATOPump Port7
//Port8 - Return pump & skimmer pump.
#define returnPump Port8
//Change these values as needed. They are the threshold values for the low and high temperatures, respectively.
int lowTempWarning = 750; //low temp warning below 75F.
int highTempWarning = 800; //high temp warning above 80F.
//These vairable are used to control the ATO system.
static time_t ATOTimer;
int ATOTimeOut = 100;
//The following variables control when automatic water changes occur.
int AWCHour = 12;
int AWCMinute = 0;
//These variables will be used to keep track of the progress of an AWC.
int AWCCheck = 0;
boolean AWCFail = false;
boolean drained = false;
//This variable will trigger an AWC().
boolean AWC = false;
//This variable will be set to true if a water change has been done since the last midnight and will be set to false at midnight.
boolean AWCToday = false;
//This vairable will store the current time for comparisons on when to initialize an AWC.
time_t AWCt;
//This variable will be a backup timer for AWC.
static time_t AWCTimer;
//These variables will control how long the AWC pumps should be on (in seconds) in case of float switch failure.
int AWCDrainSecs = 30;
int AWCFillSecs = 30;
//This function will check to make sure the water level in the sump is at the high float before initiating an AWC.
int AWCATOCheck()
{
if (!ReefAngel.Relay.Status(returnPump)) //If the return pump is not on, don't run an AWC and return 0 (false).
return 0; //Returning zero here is the only way for AWCCheck to equal 0 while AWC equals true. This will cause the AWC process to pause until the return pump is on again.
if (!ReefAngel.HighATO.IsActive()) //If the water level is not at the maximum normal level, run the ATO.
{
ATOTimer = now();
ReefAngel.Relay.On(ATOPump); //Fill the return section to the high float with RODI.
AWCToday = true;
return 2;
}
else
{
AWCToday = true;
return 1;
}
}
//Custom Menu Code
prog_char menu0_label[] PROGMEM = "Feed for 5 Mins";
prog_char menu1_label[] PROGMEM = "Start AWC";
prog_char menu2_label[] PROGMEM = "Clear Alerts & Vars";
prog_char menu3_label[] PROGMEM = "pH Calibration";
prog_char menu4_label[] PROGMEM = "Set Date and Time";
prog_char menu5_label[] PROGMEM = "Toggle Return & Skimmer Pumps";
PROGMEM const char *menu_items[] = {
menu0_label, menu1_label, menu2_label, menu3_label, menu4_label, menu5_label
};
void MenuEntry1()
{
ReefAngel.FeedingModeStart();
}
void MenuEntry2()
{
AWCToday = false;
AWC = true;
}
void MenuEntry3()
{
//Clear portal variables.
//ReefAngel.CustomVar[Var_AWCCountTotal] = 0;
//ReefAngel.CustomVar[Var_AWCCountToday] = 0;
//ReefAngel.CustomVar[Var_AWCDrainFail] = 0;
//ReefAngel.CustomVar[Var_AWCFillFail] = 0;
//ReefAngel.CustomVar[Var_AWCATOFail] = 0;
//Clear AWC control variables.
AWC = false;
AWCToday = false;
AWCFail = false;
AWCCheck = 0;
//Clear ATO timeout.
ReefAngel.ATOClear();
ReefAngel.DisplayMenuEntry("ATO & AWC Variables Cleared");
}
void MenuEntry4()
{
ReefAngel.StartSetupCalibrateChoicePH();
}
void MenuEntry5()
{
ReefAngel.SetupDateTime();
}
void MenuEntry6()
{
ReefAngel.WaterChangeModeStart();
}
void DrawCustomMain()
{
// the graph is drawn/updated when we exit the main menu & when the parameters are saved
ReefAngel.LCD.DrawDate(6, 120);
pingSerial();
byte mainTempColor;
//To make changes for each temp sensor, change the value of tempColor to be the appropriate color
if ( ReefAngel.Params.Temp[T1_PROBE] < lowTempWarning ) { mainTempColor = COLOR_CYAN; }
else if ( ReefAngel.Params.Temp[T1_PROBE] > highTempWarning ) { mainTempColor = COLOR_RED; }
else { mainTempColor = COLOR_SEAGREEN; }
//Display the T1 Main System temperature
int T1y = 66; //Y-position of T1 probe reading.
ReefAngel.LCD.DrawText(mainTempColor, DefaultBGColor, 5, T1y, "Tank Temp: ");
ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T1_PROBE], mainTempColor, 65, T1y, 10);
//Display the T2 Room temperature
int T2y = 75; //Y-position of T2 probe reading.
ReefAngel.LCD.DrawText(COLOR_BLACK, DefaultBGColor, 5, T2y, "Room Temp: ");
ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.Temp[T2_PROBE], COLOR_BLACK, 65, T2y, 10);
/*byte pHColor;
//Depending upon the pH, change the value of pHColor to be the appropriate color
if ( ReefAngel.Params.PH < 790 ) { pHColor = COLOR_YELLOW; }
else if ( ReefAngel.Params.PH > 810 ) { pHColor = COLOR_MAGENTA; }
else { pHColor = COLOR_SEAGREEN; }
//Display the pH starting at 88, 74
ReefAngel.LCD.DrawText(pHColor, DefaultBGColor, 5, 80, "pH: ");
ReefAngel.LCD.DrawSingleMonitor(ReefAngel.Params.PH, pHColor, 30, 80, 100);*/
//Display whether the ATO high float switch is active (float away from wires) or inactive (float close to wires)
byte floatColor; //Text color for ATO reading.
int ATOy = 84; //Y-position for ATO reading.
ReefAngel.LCD.Clear(DefaultBGColor, 0,ATOy, 128,ATOy);
if (ReefAngel.HighATO.IsActive() && !ReefAngel.isATOTimeOut())
{
floatColor = COLOR_MEDIUMORCHID;
ReefAngel.LCD.DrawText(floatColor, DefaultBGColor, 5, ATOy, "Water Level Low");
}
else if (!ReefAngel.HighATO.IsActive() && !ReefAngel.isATOTimeOut())
{
floatColor = COLOR_SEAGREEN;
ReefAngel.LCD.DrawText(floatColor, DefaultBGColor, 5, ATOy, "Water Level Normal");
}
else {ReefAngel.LCD.DrawText(COLOR_WHITE, COLOR_RED, 5, ATOy, "ATO Failure");}
pingSerial();
//Display relay box 1 ports with status at 12,94
byte TempRelay = ReefAngel.Relay.RelayData;
TempRelay &= ReefAngel.Relay.RelayMaskOff;
TempRelay |= ReefAngel.Relay.RelayMaskOn;
ReefAngel.LCD.DrawOutletBox(12, 94, TempRelay);
}
void DrawCustomGraph()
{
//Print "Pringle Lab Reef" at the top of the screen
ReefAngel.LCD.DrawText(DefaultFGColor, DefaultBGColor, 18, 2, "Pringle Lab Reef");
ReefAngel.LCD.DrawGraph(5,13);
}
////// Place global variable code above here
void setup()
{
InternalMemory.LCDID_write(1);
ReefAngel.Init();
ReefAngel.InitMenu(pgm_read_word(&(menu_items[0])),SIZE(menu_items));
ReefAngel.UseFlexiblePhCalibration();
ReefAngel.FeedingModePorts = Port5Bit | Port6Bit; // Turn off Ports 5 & 6 (circulation pumps) when Feeding Mode is activated.
ReefAngel.WaterChangePorts = Port8Bit; // Turn off port 8 (return & skimmer pumps) when Water Change Mode is activated
ReefAngel.Relay.On(returnPump); // Turn on return & skimmer pumps.
//Initialize portal variables.
//ReefAngel.CustomVar[Var_AWCCountTotal] = 0;
//ReefAngel.CustomVar[Var_AWCCountToday] = 0;
//ReefAngel.CustomVar[Var_AWCFillFail] = 0;
//ReefAngel.CustomVar[Var_AWCDrainFail] = 0;
//ReefAngel.CustomVar[Var_AWCATOFail] = 0;
startupTimer = now();
}
void loop()
{
//Start an AWC once per day at AWCHour:AWCMinute if an AWC hasn't happened since midnight and there hasn't been an ATO timeout.
AWCt = now();
if (!AWCFail && (hour(AWCt) == AWCHour) && (minute(AWCt) == AWCMinute) && !AWCToday && !AWC && !ReefAngel.isATOTimeOut())
{
AWC = true; //Sets the AWC control variable to true.
}
//Reset the automatic water change variable and AWC and dosing counts every day at midnight. Also add the day's AWC count to the total AWC count.
if (hour(AWCt) == 0 && minute(AWCt) == 0 && AWCToday)
{
AWCToday = false;
//ReefAngel.CustomVar[Var_AWCCountTotal] += ReefAngel.CustomVar[Var_AWCCountToday];
//ReefAngel.CustomVar[Var_AWCCountToday] = 0;
}
//Start the chain of AWC functions.
if (AWC && !AWCToday && AWCCheck == 0)
{
AWCCheck = AWCATOCheck(); //If AWCATOCheck returns non-zero, it will also set AWCToday to true.
}
if (AWCCheck == 2)
{
if (!ReefAngel.HighATO.IsActive())
{
ReefAngel.Relay.Off(ATOPump);
AWCCheck = 1;
}
if ((now() - ATOTimer) >= ATOTimeOut)
{
ReefAngel.Relay.Off(ATOPump);
bitSet(ReefAngel.AlertFlags,ATOTimeOutFlag); //Trigger ATO timeout flag.
AWCFail = true;
//ReefAngel.CustomVar[Var_AWCATOFail] = 1;
AWCCheck = 0;
AWC = false;
}
}
if (AWCCheck == 1 && !ReefAngel.Relay.Status(AWCdrain))
{
AWCTimer = now();
ReefAngel.Relay.On(AWCdrain);
}
if (ReefAngel.Relay.Status(AWCdrain))
{
if (ReefAngel.HighATO.IsActive())
{
ReefAngel.Relay.Off(AWCdrain);
drained = true;
}
if (now()-AWCTimer >= AWCDrainSecs)
{
ReefAngel.Relay.Off(AWCdrain);
AWCFail = true;
//ReefAngel.CustomVar[Var_AWCDrainFail] = 1;
AWCCheck = 0;
AWC = false;
}
}
if (drained)
{
if (!ReefAngel.Relay.Status(AWCfill))
{
AWCTimer = now();
ReefAngel.Relay.On(AWCfill);
}
if (ReefAngel.Relay.Status(AWCfill))
{
if (!ReefAngel.HighATO.IsActive())
{
ReefAngel.Relay.Off(AWCfill);
drained = false;
AWC = false;
AWCCheck = 0;
//ReefAngel.CustomVar[Var_AWCCountToday] += 1;
}
if (now()-AWCTimer >= AWCFillSecs)
{
ReefAngel.Relay.Off(AWCfill);
drained = false;
AWCFail = true;
//ReefAngel.CustomVar[Var_AWCFillFail] = 1;
AWCCheck = 0;
AWC = false;
}
}
}
//Light Control
if (ReefAngel.Params.Temp[T1_PROBE] < highTempWarning)
{
ReefAngel.StandardLights(lights, 8,00, 18,00); //Lights on at 8 am and off at 6 pm.
}
//Temp control is handled by the chiller, but it and the lights will be turned off if the temp gets too high.
if (ReefAngel.Params.Temp[T1_PROBE] >= highTempWarning)
{
ReefAngel.Relay.Off(lights);
ReefAngel.Relay.Off(chiller);
}
//Wavemaker control
ReefAngel.WavemakerRandom(clockCirc,30,300); // Turn clockwise circulation pumps on/off random cycles that lasts from 30 to 300 secs.
ReefAngel.Relay.Set(countCirc,!ReefAngel.Relay.Status(clockCirc)); // Turn counterclockwise circulation pumps on/off on opposite cycle from clockwise circulation pumps.
//ATO
if (!AWC) {ReefAngel.SingleATO(false, ATOPump, ATOTimeOut, 0);} //Use single high float switch (false = high) for reef ATO with 100 second timeout and no frequency limit.
ReefAngel.ShowInterface();
}
Code: Select all
In file included from /Users/Gabe/Documents/Arduino/Pringle Lab System/Pringle_Lab_Reef_Only_1/Pringle_Lab_Reef_Only_1.ino:2:0:
/Users/Gabe/Documents/Arduino/libraries/Globals/Globals.h:127:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char NoIMCheck[] PROGMEM = "No Internal Memory";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/Globals/Globals.h:128:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char NoIMCheck1[] PROGMEM = "Found";
^~~~~~~~~
putchar
In file included from /Users/Gabe/Documents/Arduino/Pringle Lab System/Pringle_Lab_Reef_Only_1/Pringle_Lab_Reef_Only_1.ino:6:0:
/Users/Gabe/Documents/Arduino/libraries/DS1307RTC/DS1307RTC.h:27:19: error: 'tmElements_t' has not been declared
static void read(tmElements_t &tm);
^~~~~~~~~~~~
/Users/Gabe/Documents/Arduino/libraries/DS1307RTC/DS1307RTC.h:28:20: error: 'tmElements_t' has not been declared
static void write(tmElements_t &tm);
^~~~~~~~~~~~
In file included from /Users/Gabe/Documents/Arduino/Pringle Lab System/Pringle_Lab_Reef_Only_1/Pringle_Lab_Reef_Only_1.ino:8:0:
/Users/Gabe/Documents/Arduino/libraries/RA_NokiaLCD/RA_NokiaLCD.h:84:64: error: 'prog_uchar' does not name a type; did you mean 'getchar'?
void DrawImage(int swidth, int sheight, byte x, byte y, const prog_uchar *iPtr);
^~~~~~~~~~
getchar
In file included from /Users/Gabe/Documents/Arduino/Pringle Lab System/Pringle_Lab_Reef_Only_1/Pringle_Lab_Reef_Only_1.ino:14:0:
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:31:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_ID[] PROGMEM = "<RA><ID>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:32:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_T1[] PROGMEM = "</ID><T1>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:33:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_T2[] PROGMEM = "</T1><T2>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:34:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_T3[] PROGMEM = "</T2><T3>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:35:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_PH[] PROGMEM = "</T3><PH>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:36:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_R[] PROGMEM = "</PH><R>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:37:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_RON[] PROGMEM = "</R><RON>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:38:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_ROFF[] PROGMEM = "</RON><ROFF>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:39:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_RE_OPEN[] PROGMEM = "<R";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:40:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_RE_CLOSE[] PROGMEM = "</R";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:41:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_RE_ON[] PROGMEM = "ON";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:42:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_RE_OFF[] PROGMEM = "OFF";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:43:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_ATOLOW[] PROGMEM = "<ATOLOW>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:44:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_ATOHIGH[] PROGMEM = "</ATOLOW><ATOHIGH>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:45:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_EM[] PROGMEM = "</ATOHIGH><EM>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:46:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_EM1[] PROGMEM = "</EM><EM1>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:47:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_REM[] PROGMEM = "</EM1><REM>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:48:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_BOARDID[] PROGMEM = "</REM><BID>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:49:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_ALERTFLAG[] PROGMEM = "</BID><AF>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:50:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_STATUSFLAG[] PROGMEM = "</AF><SF>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:51:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_STATUSFLAG_END[] PROGMEM = "</SF>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:54:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_PWMA[] PROGMEM = "<PWMA>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:55:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_PWMD[] PROGMEM = "</PWMA><PWMD>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:56:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_PWMAO[] PROGMEM = "</PWMD><PWMAO>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:57:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_PWMDO[] PROGMEM = "</PWMAO><PWMDO>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:58:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_PWMDO_END[] PROGMEM = "</PWMDO>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:154:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_END[] PROGMEM = "</RA>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:155:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_CLOSE_TAG[] PROGMEM = ">";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:158:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_P_OPEN[] PROGMEM = "<P";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:159:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_P_CLOSE[] PROGMEM = "</P";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:160:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_M_OPEN[] PROGMEM = "<M";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:161:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_M_CLOSE[] PROGMEM = "</M";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:162:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_MEM_OPEN[] PROGMEM = "<MEM>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:163:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_MEM_CLOSE[] PROGMEM = "</MEM>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:164:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_DATE_OPEN[] PROGMEM = "<D>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:165:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_DATE_CLOSE[] PROGMEM = "</D>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:166:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_MODE_OPEN[] PROGMEM = "<MODE>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:167:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_MODE_CLOSE[] PROGMEM = "</MODE>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:168:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_OK[] PROGMEM = "OK";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:169:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char XML_ERR[] PROGMEM = "ERR";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:171:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char SERVER_HEADER1[] PROGMEM = "HTTP/1.1 200 OK\r\nServer: ReefAngel\r\nCache-Control: no-store, no-cache, must-revalidate\r\nPragma: no-cache\r\nAccess-Control-Allow-Origin: *\r\nAccess-Control-Allow-Methods: GET\r\nConnection: close\r\nContent-Type: text/";
^~~~~~~~~
putchar
In file included from /Users/Gabe/Documents/Arduino/Pringle Lab System/Pringle_Lab_Reef_Only_1/Pringle_Lab_Reef_Only_1.ino:14:0:
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:172:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char SERVER_HEADER2[] PROGMEM = "\r\nContent-Length: ";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:173:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char SERVER_DENY[] PROGMEM = "HTTP/1.1 401 Access Denied\r\nWWW-Authenticate: Basic realm=Reef Angel Controller\r\nContent-Length: 0\r\n";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:174:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char SERVER_DEFAULT[] PROGMEM = "<h1>Reef Angel Controller Web Server</h1>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:365:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char SERVER_RA[] PROGMEM = "<object type=text/html data=http://www.reefangel.com/wifi3/content.html width=100% height=98%></object>";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:366:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char EncodingChars[] PROGMEM = {"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"};
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:367:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerGET[] PROGMEM = "GET /status/submitp.aspx?t1=";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:368:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerHTTP11[] PROGMEM = " HTTP/1.1\r\n";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:369:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerHost[] PROGMEM = "Host: forum.reefangel.com\r\n";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:370:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerConnectionClose[] PROGMEM = "Connection: close\r\n";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:371:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerT2[] PROGMEM = "&t2=";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:372:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerT3[] PROGMEM = "&t3=";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:373:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerPH[] PROGMEM = "&ph=";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:374:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerATOHIGH[] PROGMEM = "&atohigh=";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:375:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerATOLOW[] PROGMEM = "&atolow=";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:376:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerRelayData[] PROGMEM = "&r";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:377:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerRelayMaskOn[] PROGMEM = "&ron";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:378:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerRelayMaskOff[] PROGMEM = "&roff";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:379:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerID[] PROGMEM = "&id=";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:380:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerEM[] PROGMEM = "&em=";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:381:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerEM1[] PROGMEM = "&em1=";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:382:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerREM[] PROGMEM = "&rem=";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:383:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerCustom[] PROGMEM = "&c";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:384:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerKey[] PROGMEM = "&key=";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:385:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerAlertFlag[] PROGMEM = "&af=";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:386:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerStatusFlag[] PROGMEM = "&sf=";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:387:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerBoardID[] PROGMEM = "&bid=";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:388:7: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerSubdomain[] PROGMEM = "&ddns=";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:391:8: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerPWMA[] PROGMEM = "&pwma=";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:392:8: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerPWMD[] PROGMEM = "&pwmd=";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:393:8: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerPWMAO[] PROGMEM = "&pwmao=";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:394:8: error: 'prog_char' does not name a type; did you mean 'putchar'?
const prog_char BannerPWMDO[] PROGMEM = "&pwmdo=";
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:603:29: error: 'prog_char' does not name a type; did you mean 'putchar'?
void WebResponse (const prog_char* response, long strsize);
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/libraries/RA_Wifi/RA_Wifi.h:619:29: error: 'prog_char' does not name a type; did you mean 'putchar'?
void PROGMEMprint(const prog_char str[]);
^~~~~~~~~
putchar
/Users/Gabe/Documents/Arduino/Pringle Lab System/Pringle_Lab_Reef_Only_1/Pringle_Lab_Reef_Only_1.ino: In function 'int AWCATOCheck()':
Pringle_Lab_Reef_Only_1:87:16: error: 'now' was not declared in this scope
ATOTimer = now();
^~~
/Users/Gabe/Documents/Arduino/Pringle Lab System/Pringle_Lab_Reef_Only_1/Pringle_Lab_Reef_Only_1.ino:87:16: note: suggested alternative: 'pow'
ATOTimer = now();
^~~
pow
/Users/Gabe/Documents/Arduino/Pringle Lab System/Pringle_Lab_Reef_Only_1/Pringle_Lab_Reef_Only_1.ino: At global scope:
Pringle_Lab_Reef_Only_1:100:1: error: 'prog_char' does not name a type; did you mean 'putchar'?
prog_char menu0_label[] PROGMEM = "Feed for 5 Mins";
^~~~~~~~~
putchar
Pringle_Lab_Reef_Only_1:101:1: error: 'prog_char' does not name a type; did you mean 'putchar'?
prog_char menu1_label[] PROGMEM = "Start AWC";
^~~~~~~~~
putchar
Pringle_Lab_Reef_Only_1:102:1: error: 'prog_char' does not name a type; did you mean 'putchar'?
prog_char menu2_label[] PROGMEM = "Clear Alerts & Vars";
^~~~~~~~~
putchar
Pringle_Lab_Reef_Only_1:103:1: error: 'prog_char' does not name a type; did you mean 'putchar'?
prog_char menu3_label[] PROGMEM = "pH Calibration";
^~~~~~~~~
putchar
Pringle_Lab_Reef_Only_1:104:1: error: 'prog_char' does not name a type; did you mean 'putchar'?
prog_char menu4_label[] PROGMEM = "Set Date and Time";
^~~~~~~~~
putchar
Pringle_Lab_Reef_Only_1:105:1: error: 'prog_char' does not name a type; did you mean 'putchar'?
prog_char menu5_label[] PROGMEM = "Toggle Return & Skimmer Pumps";
^~~~~~~~~
putchar
Pringle_Lab_Reef_Only_1:106:32: error: variable 'menu_items' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
PROGMEM const char *menu_items[] = {
^
Pringle_Lab_Reef_Only_1:107:1: error: 'menu0_label' was not declared in this scope
menu0_label, menu1_label, menu2_label, menu3_label, menu4_label, menu5_label
^~~~~~~~~~~
Pringle_Lab_Reef_Only_1:107:14: error: 'menu1_label' was not declared in this scope
menu0_label, menu1_label, menu2_label, menu3_label, menu4_label, menu5_label
^~~~~~~~~~~
/Users/Gabe/Documents/Arduino/Pringle Lab System/Pringle_Lab_Reef_Only_1/Pringle_Lab_Reef_Only_1.ino:107:14: note: suggested alternative: 'Temp1Label'
menu0_label, menu1_label, menu2_label, menu3_label, menu4_label, menu5_label
^~~~~~~~~~~
Temp1Label
Pringle_Lab_Reef_Only_1:107:27: error: 'menu2_label' was not declared in this scope
menu0_label, menu1_label, menu2_label, menu3_label, menu4_label, menu5_label
^~~~~~~~~~~
/Users/Gabe/Documents/Arduino/Pringle Lab System/Pringle_Lab_Reef_Only_1/Pringle_Lab_Reef_Only_1.ino:107:27: note: suggested alternative: 'Temp2Label'
menu0_label, menu1_label, menu2_label, menu3_label, menu4_label, menu5_label
^~~~~~~~~~~
Temp2Label
Pringle_Lab_Reef_Only_1:107:40: error: 'menu3_label' was not declared in this scope
menu0_label, menu1_label, menu2_label, menu3_label, menu4_label, menu5_label
^~~~~~~~~~~
/Users/Gabe/Documents/Arduino/Pringle Lab System/Pringle_Lab_Reef_Only_1/Pringle_Lab_Reef_Only_1.ino:107:40: note: suggested alternative: 'Temp3Label'
menu0_label, menu1_label, menu2_label, menu3_label, menu4_label, menu5_label
^~~~~~~~~~~
Temp3Label
Pringle_Lab_Reef_Only_1:107:53: error: 'menu4_label' was not declared in this scope
menu0_label, menu1_label, menu2_label, menu3_label, menu4_label, menu5_label
^~~~~~~~~~~
Pringle_Lab_Reef_Only_1:107:66: error: 'menu5_label' was not declared in this scope
menu0_label, menu1_label, menu2_label, menu3_label, menu4_label, menu5_label
^~~~~~~~~~~
/Users/Gabe/Documents/Arduino/Pringle Lab System/Pringle_Lab_Reef_Only_1/Pringle_Lab_Reef_Only_1.ino: In function 'void setup()':
Pringle_Lab_Reef_Only_1:219:13: error: 'class ReefAngelClass' has no member named 'InitMenu'; did you mean 'InitMenus'?
ReefAngel.InitMenu(pgm_read_word(&(menu_items[0])),SIZE(menu_items));
^~~~~~~~
InitMenus
Pringle_Lab_Reef_Only_1:230:3: error: 'startupTimer' was not declared in this scope
startupTimer = now();
^~~~~~~~~~~~
/Users/Gabe/Documents/Arduino/Pringle Lab System/Pringle_Lab_Reef_Only_1/Pringle_Lab_Reef_Only_1.ino:230:3: note: suggested alternative: 'strupr'
startupTimer = now();
^~~~~~~~~~~~
strupr
Pringle_Lab_Reef_Only_1:230:18: error: 'now' was not declared in this scope
startupTimer = now();
^~~
/Users/Gabe/Documents/Arduino/Pringle Lab System/Pringle_Lab_Reef_Only_1/Pringle_Lab_Reef_Only_1.ino:230:18: note: suggested alternative: 'pow'
startupTimer = now();
^~~
pow
/Users/Gabe/Documents/Arduino/Pringle Lab System/Pringle_Lab_Reef_Only_1/Pringle_Lab_Reef_Only_1.ino: In function 'void loop()':
Pringle_Lab_Reef_Only_1:236:10: error: 'now' was not declared in this scope
AWCt = now();
^~~
/Users/Gabe/Documents/Arduino/Pringle Lab System/Pringle_Lab_Reef_Only_1/Pringle_Lab_Reef_Only_1.ino:236:10: note: suggested alternative: 'pow'
AWCt = now();
^~~
pow
Pringle_Lab_Reef_Only_1:237:20: error: 'hour' was not declared in this scope
if (!AWCFail && (hour(AWCt) == AWCHour) && (minute(AWCt) == AWCMinute) && !AWCToday && !AWC && !ReefAngel.isATOTimeOut())
^~~~
Pringle_Lab_Reef_Only_1:237:47: error: 'minute' was not declared in this scope
if (!AWCFail && (hour(AWCt) == AWCHour) && (minute(AWCt) == AWCMinute) && !AWCToday && !AWC && !ReefAngel.isATOTimeOut())
^~~~~~
/Users/Gabe/Documents/Arduino/Pringle Lab System/Pringle_Lab_Reef_Only_1/Pringle_Lab_Reef_Only_1.ino:237:47: note: suggested alternative: 'init'
if (!AWCFail && (hour(AWCt) == AWCHour) && (minute(AWCt) == AWCMinute) && !AWCToday && !AWC && !ReefAngel.isATOTimeOut())
^~~~~~
init
Pringle_Lab_Reef_Only_1:243:7: error: 'hour' was not declared in this scope
if (hour(AWCt) == 0 && minute(AWCt) == 0 && AWCToday)
^~~~
Pringle_Lab_Reef_Only_1:243:26: error: 'minute' was not declared in this scope
if (hour(AWCt) == 0 && minute(AWCt) == 0 && AWCToday)
^~~~~~
/Users/Gabe/Documents/Arduino/Pringle Lab System/Pringle_Lab_Reef_Only_1/Pringle_Lab_Reef_Only_1.ino:243:26: note: suggested alternative: 'init'
if (hour(AWCt) == 0 && minute(AWCt) == 0 && AWCToday)
^~~~~~
init
exit status 1
'now' was not declared in this scope
Thanks,
Gabe