Multiple classes in a single library with shared functionality?

I hadn't thought of a container model, that makes much more logical sense than a potentially circular update, however I would still have no idea how to go about building one.

I think to get specifics I will need to be more specific.
My project, and I use the term loosely because it is anything but planned, involve charging batteries from solar panels and a generator.
I have the kit in place with various cobbled together systems 'mostly' controlling it.
There is currently no central control or HMI functionality and I just bought some additional PV's, far more than my charge regulator can handle, so I have to turn the PV's off if I am out to avoid the possibility of damaging the batteries.

What I want to end up with is a system that will :-
Manage temperature compensated charging of my main batteries, AGM's
Start - Manage, including battery charge algorithm - Stop the generator.
Manage opportunity charging from the PV's and generate the appropriate PWM signals to modulate the PV output.
Log data, voltage current temperatures etc.
Provide a web based interface that will mimic the loacal HMI and provide access to the logs.
Possibly - Drive a solar tracker if I ever get around to building one for my higher output PV's
Possibly - Manage a wind turbine if I ever get around to building one.
Turn local loads on and off including checking internet connectivity and restarting the satellite modem if required.

Prerequisites and assumptions ...
I don't want to build the core processor boards but I am happy to build the power electronics and sensor interfaces.
I appreciate that I will probably need to employ distributed control, IE several processors with a communication link of some sort.

Arduino, in its various forms, seemed like a quick win. Plenty of code and examples, a large active community, various implementations on several scales and pre built processor boards as well as difficult to construct items like USB and Ethernet interfaces.

SO ...
I bought a Mega 2560 and an Ethernet shield, with SD, to get me started.
I have put together a small 20X4 display with 4 keys arranged as 'soft function' keys, two at either end and a 5 key 'Nav-pad' below.

The keyboard scan, 3 rows by 3 columns, is working just fine with a global denounce routine looking for a stable output, from the binary weighted keys.
The display looks good using the standard LiquidCrystal library.
essentially with each 'screen' defining the key function and being repainted when its display data changes.

I have a good idea how I want to proceed with the program divided into two sections, HMI control and equipment control.
Each section will then be divided into functions, some functions will always run whilst others will only be called when it is applicable.
On the control side the status of my batteries for example, voltage and current will always need to be monitored, whilst I will only need to run generator routines when the generator is operating.
The HMI routines will also be divided to keep it all manageable, dividing the functionality into pages or screens.
For a given page specific data will be displayed and buttons will have a given function, press a button that is assigned to load a different page and everything changes.

OK I know that is a big task but its constituent parts are not that complex.
I could for example code all the pages/screens as functions just giving them an ordinal to track them.
MY loop could then use a case or a load of if's check the number and call a function that displayed what I wanted and performed actions based on the current key-code.

However I know that is not the best way to go ...
Far better to have a class look at a definition file, display some text with replaceable parameters.
O and if I am doing that then my key-scan routines should work the same way, load a definition that maps keys to functions, be that load a new page or move the cursor or modify the number at that cursor address.

All of this will need to interrogate and update functions, and possibly classes, that are interacting with the real world ...

OK I know its a little board not a full blown OO environment DCOM fingers in loads of external pies but still, if I keep the actual implementation relatively simple I see no reason why this approach shouldn't work.
In fact I expect that if I run out of processing power and have to distribute my logic and functionality then this approach will be a positive advantage.

And all of that brings me back to getting classes to track each others existence, or at the very least have some centralised class be aware of neighbours and progeny.
Perhaps I am shooting for the moon but it seems to me that if I am going to write a definition file that specifies displaying data from a particular source or taking a specific action then the code that implements that should at least be aware of the subjects exist!!

When all is said and done, I actually don't know what I want to do, not in detail anyway.
This thread was born out of my requirement to make a simple timer for the key repeat function.
I tried an interrupt based timer and found that it messed with the LCD and as I don't need anything like that accuracy I decided to write code that monitors the scan time and maintains an array of count and compare registers, one seemed silly.
When that worked I decided to turn it into a library and found that library's were actually classes which meant that I could potentially ditch the array, use class variables.
Again it works just fine but now if I implement 3 timers from my GeneralTimers library I need 3 Update timer calls where it would be much nicer to have one that would update any instances of a generaltimer.

I want to explore possibilities ... Learn what is practical ... Test a few scenarios and then plan the detail of my project.
With any luck I will gain a little something along the way which will be useful to many other folk as well.

Al