I/O Expansion and ATO 1, 2, 3, 4....

Expansion modules and attachments

Posts: 24
Joined: Fri Aug 18, 2017 10:11 am
PostPosted: Wed Aug 23, 2017 12:40 am
Thank you for your time with this.. I just tried to compile and received the following:

variable or field 'ATOoverIO' declared void

sketch_aug23a:26: error: variable or field 'ATOoverIO' declared void
sketch_aug23a:26: error: 'ATOIO' was not declared in this scope
sketch_aug23a:26: error: 'ato' was not declared in this scope
sketch_aug23a.cpp: In function 'void DrawCustomMain()':
sketch_aug23a:53: error: 'class ReefAngelClass' has no member named '_IO'
sketch_aug23a.cpp: At global scope:
sketch_aug23a:96: error: expected ',' or '...' before '&&' token
sketch_aug23a.cpp: In function 'void ATOoverIO(ATOIO)':
sketch_aug23a:98: error: 'ato' was not declared in this scope
sketch_aug23a:112: error: 'class IOClass' has no member named 'GetChanngel'
sketch_aug23a:126: error: expected unqualified-id before numeric constant
sketch_aug23a:126: error: expected `)' before numeric constant
sketch_aug23a:126: error: expected `)' before ';' token
sketch_aug23a:126: error: expected `)' before ';' token
sketch_aug23a.cpp: At global scope:
sketch_aug23a:134: error: expected constructor, destructor, or type conversion before '.' token
sketch_aug23a:135: error: expected constructor, destructor, or type conversion before '.' token
sketch_aug23a:136: error: expected constructor, destructor, or type conversion before '.' token
sketch_aug23a:137: error: expected constructor, destructor, or type conversion before '.' token
sketch_aug23a:138: error: expected constructor, destructor, or type conversion before '.' token
sketch_aug23a:139: error: expected constructor, destructor, or type conversion before '.' token

Posts: 24
Joined: Fri Aug 18, 2017 10:11 am
PostPosted: Wed Aug 23, 2017 1:09 am
Fixed some of the obvious things, here is an update on the compilation fault-

variable or field 'ATOoverIO' declared void


sketch_aug23a:26: error: variable or field 'ATOoverIO' declared void
sketch_aug23a:26: error: 'ATOIO' was not declared in this scope
sketch_aug23a:26: error: 'ato' was not declared in this scope
sketch_aug23a.cpp: In function 'void ATOoverIO(ATOIO&)':
sketch_aug23a:126: error: expected unqualified-id before numeric constant
sketch_aug23a:126: error: expected `)' before numeric constant
sketch_aug23a:126: error: expected `)' before ';' token
sketch_aug23a:126: error: expected `)' before ';' token
sketch_aug23a.cpp: At global scope:
sketch_aug23a:134: error: expected constructor, destructor, or type conversion before '.' token
sketch_aug23a:135: error: expected constructor, destructor, or type conversion before '.' token
sketch_aug23a:136: error: expected constructor, destructor, or type conversion before '.' token
sketch_aug23a:137: error: expected constructor, destructor, or type conversion before '.' token
sketch_aug23a:138: error: expected constructor, destructor, or type conversion before '.' token
sketch_aug23a:139: error: expected constructor, destructor, or type conversion before '.' token

Posts: 24
Joined: Fri Aug 18, 2017 10:11 am
PostPosted: Wed Aug 23, 2017 2:26 am
Updated code with compilation fault variable or field 'ATOoverIO' declared void

RA_Ino_ino_ATO2:27: error: variable or field 'ATOoverIO' declared void
RA_Ino_ino_ATO2:27: error: 'ATOIO' was not declared in this scope
RA_Ino_ino_ATO2:27: error: 'ato' was not declared in this scope
RA_Ino_ino_ATO2.cpp: In function 'void ATOoverIO(ATOIO&)':
RA_Ino_ino_ATO2:129: error: expected unqualified-id before numeric constant
RA_Ino_ino_ATO2:129: error: expected `)' before numeric constant
RA_Ino_ino_ATO2:129: error: expected `)' before ';' token
RA_Ino_ino_ATO2:129: error: expected `)' before ';' token
RA_Ino_ino_ATO2.cpp: At global scope:
RA_Ino_ino_ATO2:137: error: expected constructor, destructor, or type conversion before '.' token
RA_Ino_ino_ATO2:138: error: expected constructor, destructor, or type conversion before '.' token
RA_Ino_ino_ATO2:139: error: expected constructor, destructor, or type conversion before '.' token
RA_Ino_ino_ATO2:140: error: expected constructor, destructor, or type conversion before '.' token
RA_Ino_ino_ATO2:141: error: expected constructor, destructor, or type conversion before '.' token
RA_Ino_ino_ATO2:142: error: expected constructor, destructor, or type conversion before '.' token

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
typedef struct _ATOIO {
  byte relay;  // port to control
  int timeout;  // max number of seconds that the ATO pump is allowed to run
  byte low_ioport; // IO port the low switch is connected
  byte high_ioport; // IO port the high switch is connected
  unsigned long timer;
  boolean topping; // are we currently topping off / running
} ATOIO;

void ATOoverIO(ATOIO &ato)
{
   unsigned long TempTimeout = ato.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(ato.low_ioport) && (!ato.topping)) {
    ato.timer = millis();
    ato.topping = true;
    ReefAngel.Relay.On(ato.relay);
  }

   // If the high switch is activated, this is a safeguard to prevent over running of the top off pump
  if ( ReefAngel.IO.GetChannel(ato.high_ioport) ) {
    ato.topping = false;
    ReefAngel.Relay.Off(ato.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() - ato.timer > TempTimeout) && ato.topping ) {
    ReefAngel.LED.On();
    // Verify the bitset function works properly
    bitSet(ReefAngel.AlertFlags, ReefAngel.ATOTimeOutFlag);
    ReefAngel.Relay.Off(ato.relay);
  }
}
// End Custom ATO Functions

// Create additional ATO's
ATOIO ato2;
ato2.relay = ATO2;  // Relay to use
ato2.timeout = 150;  // 150s timeout
ato2.low_ioport = 0;  // IO Port 0
ato2.high_ioport = 1;  // IO Port 1
ato2.timer = 0;  // always initialize to 0
ato2.topping = false;  // always initialize to false

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);
}

void loop()
{
  ReefAngel.StandardATO(ATO1); // Standard ATO
  ATOoverIO(ato2); // 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
}




User avatar
Posts: 2748
Joined: Fri Mar 18, 2011 6:20 pm
Location: Illinois
PostPosted: Wed Aug 23, 2017 4:09 am
ok. that's what I get for not testing it. I'll look more and get it figured out.

Sent from my XT1585 using Tapatalk

Posts: 24
Joined: Fri Aug 18, 2017 10:11 am
PostPosted: Wed Aug 23, 2017 8:08 am
OK thank you sir! Do you have a separate system for testing or do you just upset yours? I'm thinking of keeping one just for testing as I have another one..

Posts: 24
Joined: Fri Aug 18, 2017 10:11 am
PostPosted: Wed Aug 23, 2017 12:48 pm
Any luck with us putting this one to bed...
User avatar
Posts: 2748
Joined: Fri Mar 18, 2011 6:20 pm
Location: Illinois
PostPosted: Wed Aug 23, 2017 7:16 pm
JclaasSA wrote:OK thank you sir! Do you have a separate system for testing or do you just upset yours? I'm thinking of keeping one just for testing as I have another one..
I have several. I have 1 specifically for testing. with what I am doing for you doesn't require anything other than compiling the code.
JclaasSA wrote:Any luck with us putting this one to bed...
not tonight. I had a big issue to deal with today that kept me from getting to it. I'm sure I made a simple error.

Sent from my XT1585 using Tapatalk

Posts: 24
Joined: Fri Aug 18, 2017 10:11 am
PostPosted: Thu Aug 24, 2017 12:17 am
binder wrote:
JclaasSA wrote:OK thank you sir! Do you have a separate system for testing or do you just upset yours? I'm thinking of keeping one just for testing as I have another one..
I have several. I have 1 specifically for testing. with what I am doing for you doesn't require anything other than compiling the code.
JclaasSA wrote:Any luck with us putting this one to bed...
not tonight. I had a big issue to deal with today that kept me from getting to it. I'm sure I made a simple error.

Sent from my XT1585 using Tapatalk


I actually that that you would have one for testing, thats great! I will do the same with the extra unit i have, but i am under the impression that i may need to get a new board for it as the screen goes funny (Flickers) after a while and then goes off.

I hope you got your stuff sorted.
User avatar
Posts: 2748
Joined: Fri Mar 18, 2011 6:20 pm
Location: Illinois
PostPosted: Thu Aug 24, 2017 11:16 am
JclaasSA wrote:I hope you got your stuff sorted.

I did, thanks. I completely re-plumbed my entire fish tank/sump and had some major problems. Fortunately I was able to fix the problems but took me a lot longer than expected. Then I had to deal with a small leak, that is hopefully fixed.

I did start to look at the code last night and was checking on some of the things I did and was making sure I was using the code properly. I will hopefully have something for you tonight.


Sent from my iPad using Tapatalk

Posts: 24
Joined: Fri Aug 18, 2017 10:11 am
PostPosted: Thu Aug 24, 2017 3:12 pm
Hectic! I know what that's like.. it's at least an evening or two's work and having stuff like leaks doesn't help reduce the time. I once converted a boyu tank for someone to include an overflow and a sump.. it was a 1m tank with the cuboard being two separate compartments at the bottom so I had to build to sumps (one for the skimmer and the othe for the return which I obviously had to join. Anyway it leaked in between them.. I almost thought I wasnt going to win! So that's probably my worse leak other than an anemone blocking the overflow at 5am haha

Thanks man I appreciate it.
PreviousNext

Return to Addons

Who is online

Users browsing this forum: No registered users and 3 guests

cron