VariableArray class

The variable array class defines the logic for iterating through many variable objects.

This takes advantage of various time stamps within the Sensor class to optimize the timing of communications with many sensors.

In general, the order of the variables in the variable list or array should not matter. The library attempts to minimize sensor on time as much as possible by requesting data from the each sensor as soon as it is able to report a result, regardless of its position in the array. The only place the order of the variables will be reflected is in the order of the data columns in data saved by a logger or when sending data to ThingSpeak.

To use the VariableArray module, you must first create the array of pointers. This should be done outside of the setup() or loop() functions. Remember that for measured variables you must first create a new sensor instance and then one or more new variable instances for that sensor (depending on how many values it can return). The sensor functions for sensors within a variable array take advantage of all of the timestamps and status bits within the sensor object to minimize the amount of time that all sensors are powered and the processor is awake. That is, the first sensor to be warmed up will be set up or activated first; the first sensor to stabilize will be asked for values first. All calculations for any calculated variables happen after all the sensor updating has finished. The order of the variables within the array should not matter, though for code readability, I strongly suggest putting all the variables attached to a single sensor next to each other in the array. When creating a logger, the order of variables in the array determines the order the values will be written to the data file.

Constructors, destructors, conversion operators

VariableArray()
Construct a new Variable Array object.
VariableArray(uint8_t variableCount, Variable*[] variableList)
Construct a new Variable Array object.
VariableArray(uint8_t variableCount, Variable*[] variableList, const char*[] uuids)
Construct a new Variable Array object.
~VariableArray()
Destroy the Variable Array object - no action taken.

Public functions

void begin(uint8_t variableCount, Variable*[] variableList)
Begins the VariableArray. Suppiles a variable array, checks the validity of all UUID and outputs the results.
void begin(uint8_t variableCount, Variable*[] variableList, const char*[] uuids)
Begins the VariableArray. Suppiles a variable array and UUIDs, checks the validity of all UUID and outputs the results.
void begin()
Begins the VariableArray. Checks the validity of all UUID and outputs the results.
uint8_t getVariableCount(void) -> uint8_t
Get the count of variables in the variable array.
uint8_t getCalculatedVariableCount(void) -> uint8_t
Get the number of calculated variables.
uint8_t getSensorCount(void) -> uint8_t
Get the number of sensors associated with the variables in the array.
void matchUUIDs(const char*[] uuids)
Match UUID's from the given variables in the variable array.
bool setupSensors(void) -> bool
Set up all of the sensors in the tied to variables in the array.
void sensorsPowerUp(void)
Power up each sensor.
bool sensorsWake(void) -> bool
Wake up each sensor.
bool sensorsSleep(void) -> bool
Put all sensors to sleep.
void sensorsPowerDown(void)
Cut power to all sensors. Runs the powerDown sensor function for each unique sensor.
bool updateAllSensors(void) -> bool
Update the values for all connected sensors.
bool completeUpdate(void) -> bool
Update the values for all connected sensors including powering them and waking and putting them to sleep.
void printSensorData(Stream* stream = &Serial)
Print out the results for all connected sensors to a stream.

Public variables

Variable** arrayOfVars
Pointer to the array of variable pointers.

Protected variables

uint8_t _variableCount
The count of variables in the array.
uint8_t _sensorCount
The count of unique sensors tied to variables in the array.
uint8_t _maxSamplestoAverage
The maximum number of samples to average of an single sensor.

Function documentation

VariableArray::VariableArray(uint8_t variableCount, Variable*[] variableList)

Construct a new Variable Array object.

Parameters
variableCount The number of variables in the array
variableList An array of pointers to variable objects. The pointers may be to calculated or measured variable objects.

VariableArray::VariableArray(uint8_t variableCount, Variable*[] variableList, const char*[] uuids)

Construct a new Variable Array object.

Parameters
variableCount The number of variables in the array
variableList An array of pointers to variable objects. The pointers may be to calculated or measured variable objects.
uuids An array of UUID's. These are linked 1-to-1 with the variables by array position.

void VariableArray::begin(uint8_t variableCount, Variable*[] variableList)

Begins the VariableArray. Suppiles a variable array, checks the validity of all UUID and outputs the results.

Parameters
variableCount The number of variables in the array. Supercedes any value given in the constructor.
variableList An array of pointers to variable objects. The pointers may be to calculated or measured variable objects. Supercedes any value given in the constructor.

void VariableArray::begin(uint8_t variableCount, Variable*[] variableList, const char*[] uuids)

Begins the VariableArray. Suppiles a variable array and UUIDs, checks the validity of all UUID and outputs the results.

Parameters
variableCount The number of variables in the array. Supercedes any value given in the constructor.
variableList An array of pointers to variable objects. The pointers may be to calculated or measured variable objects. Supercedes any value given in the constructor.
uuids An array of UUID's. These are linked 1-to-1 with the variables by array position.

uint8_t VariableArray::getVariableCount(void)

Get the count of variables in the variable array.

Returns uint8_t The number of variables

uint8_t VariableArray::getCalculatedVariableCount(void)

Get the number of calculated variables.

Returns uint8_t The number of calculated (ie, not measured by a sensor) variables

uint8_t VariableArray::getSensorCount(void)

Get the number of sensors associated with the variables in the array.

Returns uint8_t The number of sensors

This will often be different from the number of variables because many sensors can return multiple variables.


void VariableArray::matchUUIDs(const char*[] uuids)

Match UUID's from the given variables in the variable array.

Parameters
uuids An array of UUID's

This over-writes all UUID's previously assigned to every variable. The match is 1-to-1 based on array position.


bool VariableArray::setupSensors(void)

Set up all of the sensors in the tied to variables in the array.

Returns bool True indicates all sensors have been set up successfully.

This sets up all of the variables in the array and their respective sensors by running all of their setup() functions. A single sensor attached to may variables is only set up one time. If a sensor doesn't respond to its setup command, the command is called 5 times in attempt to make a connection. If all sensors are set up successfully, returns true.


void VariableArray::sensorsPowerUp(void)

Power up each sensor.

Runs the powerUp sensor function for each unique sensor.


bool VariableArray::sensorsWake(void)

Wake up each sensor.

Returns bool True if all wake functions were run successfully.

Runs the wake sensor function for each unique sensor. Repeatedly checks each sensor's readiness state to optimize timing.


bool VariableArray::sensorsSleep(void)

Put all sensors to sleep.

Returns bool True if all sleep functions were run successfully.

Runs the sleep sensor function for each unique sensor.


bool VariableArray::updateAllSensors(void)

Update the values for all connected sensors.

Returns bool True if all steps of the update succeeded.

Does not power or wake/sleep sensors. Returns a boolean indication the overall success. Does NOT return any values. Repeatedly checks each sensor's readiness state to optimize timing.


bool VariableArray::completeUpdate(void)

Update the values for all connected sensors including powering them and waking and putting them to sleep.

Returns bool True if all steps of the update succeeded.

Returns a boolean indication the overall success. Does NOT return any values. Repeatedly checks each sensor's readiness state to optimize timing.


void VariableArray::printSensorData(Stream* stream = &Serial)

Print out the results for all connected sensors to a stream.

Parameters
stream An Arduino Stream instance

This prints current sensor values along with meta-data to a stream (either hardware or software serial). By default, it will print to the first Serial port. Note that the input is a pointer to a stream instance

  • to use a hardware serial instance you must use an ampersand before the serial name (ie, &Serial1).