#include <src/SensorBase.h>
Sensor
class
The "Sensor" class is used for all sensor-level operations - waking, sleeping, and taking measurements.
- Reference
- Detailed Descriptions
A sensor is some sort of device that is capable of taking one or more measurements using some sort of method. Most often we can think of these as probes or other instruments that can give back information about the world around them. Sensors can usually be given power or have that power cut. They may be awoken or activated and then returned to a sleeping/low power use state. The may need to be asked to begin a single reading or they may continuously return data. They must be capable of returning the value of their readings to a logger of some type.
Derived classes
- class AOSongAM2315
- The Sensor sub-class for the AOSong AM2315.
- class AOSongDHT
- The Sensor sub-class for the AOSong digital-output relative humidity and temperature sensor modules.
- class AlphasenseCO2
- The Sensor sub-class for the [Alphasense IRC-A1 CO2](Alphasense IRC-A1 CO2) sensor.
- class AnalogElecConductivity
- Class for the analog [Electrical Conductivity monitor](Conductivity via Analog Electrical Resistance)
- class ApogeeSQ212
- The Sensor sub-class for the Apogee SQ-212 sensor.
- class AtlasParent
- A parent class for Atlas EZO circuits and sensors.
- class BoschBME280
- The Sensor sub-class for the Bosch BME280.
- class BoschBMP3xx
- The Sensor sub-class for the Bosch BMP3xx.
- class CampbellOBS3
- The Sensor sub-class for the Campbell OBS3 analog turbidity sensor.
- class EverlightALSPT19
- The Sensor sub-class for the Everlight ALS-PT19.
- class FreescaleMPL115A2
- The Sensor sub-class for the Freescale Semiconductor MPL115A2 sensor.
- class GroPointParent
- The Sensor sub-class for all the GroPoint sensors.
- class KellerParent
- The Sensor sub-class for all Keller water level sensors.
- class MaxBotixSonar
- The Sensor sub-class for the MaxBotix ultrasonic range finders.
- class MaximDS18
- The Sensor sub-class for the DS18 one-wire temperature sensors.
- class MaximDS3231
- The Sensor sub-class for the Maxim DS3231 when used as a low-accuracy temperature sensor.
- class MeaSpecMS5803
- The Sensor sub-class for the Measurement Specialties MS5803 sensor.
- class PaleoTerraRedox
- The Sensor sub-class for the PaleoTerra redox sensor.
- class ProcessorStats
- The main class to use the main processor (MCU) as a sensor.
- class RainCounterI2C
- The Sensor sub-class for the Arduino-based external tipping bucket counter.
- class SDI12Sensors
- The main class for SDI-12 Sensors.
- class SensirionSHT4x
- The Sensor sub-class for the Sensirion SHT4x.
- class TIADS1x15
- The Sensor sub-class for the external votlage as measured by TI ADS1115 or ADS1015.
- class TIINA219
- The Sensor sub-class for the TexasInstruments INA219 sensor.
- class TallyCounterI2C
- The Sensor sub-class for the Tally Counter I2C.
- class TurnerCyclops
- The Sensor sub-class for the Turner Cyclops-7F submersible fluorometer.
- class TurnerTurbidityPlus
- The Sensor sub-class for the Turner Turbidity Plus turbiditysensor".
- class YosemitechParent
- The Sensor sub-class for all the Yosemitech sensors.
Constructors, destructors, conversion operators
- Sensor(const char* sensorName = "Unknown", const uint8_t totalReturnedValues = 1, uint32_t warmUpTime_ms = 0, uint32_t stabilizationTime_ms = 0, uint32_t measurementTime_ms = 0, int8_t powerPin = -1, int8_t dataPin = -1, uint8_t measurementsToAverage = 1, uint8_t incCalcValues = 0)
- Construct a new Sensor object.
- Sensor(const Sensor& copy_from_me) deleted
- Dis-allowed constructor for a new Sensor object from a copy of another Sensor object - the deleted copy constructor.
- ~Sensor() virtual
- Destroy the Sensor object - no action taken.
Public functions
- Sensor& operator=(const Sensor& copy_from_me) -> Sensor& deleted
- Dis-allowed assignment of one Sensor object to another - the deleted assignment operator.
- String getSensorLocation(void) -> String virtual
- Get the pin or connection location between the mcu and the sensor.
- String getSensorName(void) -> String virtual
- Get the name of the sensor.
- String getSensorNameAndLocation(void) -> String
- Concatentate and returns the name and location of the sensor.
- int8_t getPowerPin(void) -> int8_t virtual
- Get the pin number controlling sensor power.
- void setNumberMeasurementsToAverage(uint8_t nReadings)
- Set the number measurements to average.
- uint8_t getNumberMeasurementsToAverage(void) -> uint8_t
- Get the number of measurements to average.
- uint8_t getStatus(void) -> uint8_t
- Get the 8-bit code for the current status of the sensor.
- bool setup(void) -> bool virtual
- Do any one-time preparations needed before the sensor will be able to take readings.
- bool update(void) -> bool virtual
- Update the sensor's values.
- void powerUp(void) virtual
- Turn on the sensor power, if applicable.
- void powerDown(void) virtual
- Turn off the sensor power, if applicable.
- bool wake(void) -> bool virtual
- Wake the sensor up, if necessary. Do whatever it takes to get a sensor in the proper state to begin a measurement.
- bool sleep(void) -> bool virtual
- Puts the sensor to sleep, if necessary.
- bool startSingleMeasurement(void) -> bool virtual
- Tell the sensor to start a single measurement, if needed.
- bool addSingleMeasurementResult(void) -> bool pure virtual
- Get the results from a single measurement.
- void clearValues()
- Clear the values array - that is, sets all values to -9999.
- void verifyAndAddMeasurementResult(uint8_t resultNumber, float resultValue)
- Verify that a measurement is OK (ie, not -9999) before adding it to the result array.
- void verifyAndAddMeasurementResult(uint8_t resultNumber, int16_t resultValue)
- Verify that a measurement is OK (ie, not -9999) before adding it to the result array.
- void verifyAndAddMeasurementResult(uint8_t resultNumber, int32_t resultValue)
- Average the results of all measurements by dividing the sum of all measurements by the number of measurements taken.
- void averageMeasurements(void)
- Average the results of all measurements by dividing the sum of all measurements by the number of measurements taken.
- void registerVariable(int sensorVarNum, Variable* var)
- Register a variable object to a sensor.
- void notifyVariables(void)
- Notify attached variables of new values.
- bool checkPowerOn(bool debug = false) -> bool
- Check if the _
powerPin is currently high. - bool isWarmedUp(bool debug = false) -> bool virtual
- Check whether or not enough time has passed between the sensor receiving power and being ready to respond to logger commands.
- void waitForWarmUp(void)
- Hold all further program execution until this sensor is ready to receive commands.
- bool isStable(bool debug = false) -> bool virtual
- Check whether or not enough time has passed between the sensor being awoken/activated and being ready to output stable values.
- void waitForStability(void)
- Hold all further program execution until this sensor is reporting stable values.
- bool isMeasurementComplete(bool debug = false) -> bool virtual
- Check whether or not enough time has passed between when the sensor was asked to take a single measurement and when that measurement is expected to be complete.
- void waitForMeasurementCompletion(void)
- Hold all further program execution until this sensor is has finished the current measurement.
Public variables
- float sensorValues
- The array of result values for each sensor.
Protected variables
- int8_t _dataPin
- Digital pin number on the mcu receiving sensor data.
- int8_t _powerPin
- Digital pin number on the mcu controlling sensor power.
- const char* _sensorName
- The sensor name.
- const uint8_t _numReturnedValues
- The number of values the sensor is capable of reporting.
- uint8_t _measurementsToAverage
- The number of measurements from the sensor to average.
- uint8_t _incCalcValues
- The number of included calculated variables from the sensor, if any.
- uint8_t numberGoodMeasurementsMade
- Array with the number of valid measurement values taken by the sensor in the current update cycle.
- uint32_t _warmUpTime_ms
- The time needed from the when a sensor has power until it's ready to talk.
- uint32_t _millisPowerOn
- The processor elapsed time when the power was turned on for the sensor.
- uint32_t _stabilizationTime_ms
- The time needed from the when a sensor is activated until the readings are stable.
- uint32_t _millisSensorActivated
- The processor elapsed time when the sensor was activiated - ie, when the wake() function was run.
- uint32_t _measurementTime_ms
- The time needed from the when a sensor is told to take a single reading until that reading is expected to be complete.
- uint32_t _millisMeasurementRequested
- The processor elapsed time when a measuremnt was started - ie, when the startSingleMeasurement() function was run.
- uint8_t _sensorStatus
- An 8-bit code for the sensor status.
- Variable* variables
- An array for each sensor containing pointers to the variable objects tied to that sensor. The MAX_
NUMBER_ VARS cannot be determined on a per-sensor basis, because of the way memory is used on an Arduino. It must be defined once for the whole class.
Function documentation
Sensor:: Sensor(const char* sensorName = "Unknown",
const uint8_t totalReturnedValues = 1,
uint32_t warmUpTime_ms = 0,
uint32_t stabilizationTime_ms = 0,
uint32_t measurementTime_ms = 0,
int8_t powerPin = -1,
int8_t dataPin = -1,
uint8_t measurementsToAverage = 1,
uint8_t incCalcValues = 0)
Construct a new Sensor object.
Parameters | |
---|---|
sensorName | The name of the sensor. Defaults to "Unknown". |
totalReturnedValues | The total number of value results (raw or calculated internally) returned by the sensor. Defaults to 1. |
warmUpTime_ms | The time in ms between when the sensor is powered on and when it is ready to receive a wake command. Defaults to 0. |
stabilizationTime_ms | The time in ms between when the sensor receives a wake command and when it is able to return stable values. Defaults to 0. |
measurementTime_ms | The time in ms between when a measurement is started and when the result value is available. Defaults to 0. |
powerPin | The pin on the mcu controlling power to the sensor Use -1 if it is continuously powered. |
dataPin | The pin on the mcu receiving data from the sensor. Defaults to -1. |
measurementsToAverage | The number of measurements to take and average before giving a "final" result from the sensor; optional with a default value of 1. |
incCalcValues | The number of included calculated variables from the sensor, if any. These are used for values that we would always calculate for a sensor and depend only on the raw results of that single sensor; optional with a default value of 0. |
Sensor:: Sensor(const Sensor& copy_from_me) deleted
Dis-allowed constructor for a new Sensor object from a copy of another Sensor object - the deleted copy constructor.
Parameters | |
---|---|
copy_from_me | The Sensor object to copy. |
The copy constructor is explicitly deleted. Sensor objects should not (and here cannot) be copied to avoid confusion over which sensor object specific variables are tied to.
Sensor& Sensor:: operator=(const Sensor& copy_from_me) deleted
Dis-allowed assignment of one Sensor object to another - the deleted assignment operator.
The assignment operator is explicitly deleted. Sensor objects should not (and here cannot) be assigned to each other to avoid confusion over which sensor object specific variables are tied to.
String Sensor:: getSensorLocation(void) virtual
Get the pin or connection location between the mcu and the sensor.
Returns | String Text describing how the sensor is attached to the mcu. |
---|
String Sensor:: getSensorName(void) virtual
Get the name of the sensor.
Returns | String The sensor name as given in the constructor. |
---|
String Sensor:: getSensorNameAndLocation(void)
Concatentate and returns the name and location of the sensor.
Returns | String A concatenation of the sensor name and its "location"
|
---|
int8_t Sensor:: getPowerPin(void) virtual
Get the pin number controlling sensor power.
Returns | int8_t The pin on the mcu controlling power to the sensor. |
---|
void Sensor:: setNumberMeasurementsToAverage(uint8_t nReadings)
Set the number measurements to average.
Parameters | |
---|---|
nReadings | The number of readings to take and average to create a result from the sensor. Overrides any value given in the constructor. |
This will become the number of readings actually taken by a sensor prior to data averaging. Any "bad" (-9999) values returned by the sensor will not be included in the final averaging. This means that the actual number of "good" values that are averaged may be less than what was requested.
uint8_t Sensor:: getNumberMeasurementsToAverage(void)
Get the number of measurements to average.
Returns | uint8_t The number of readings to take and average to create a result from the sensor. |
---|
This will become the number of readings actually taken by a sensor prior to data averaging. Any "bad" (-9999) values returned by the sensor will not be included in the final averaging. This means that the actual number of "good" values that are averaged may be less than what was requested.
uint8_t Sensor:: getStatus(void)
Get the 8-bit code for the current status of the sensor.
Returns | uint8_t The status as a uint8_t. |
---|
Bit 0
- 0 => Has NOT been successfully set up
- 1 => Has been setup
Bit 1
- 0 => No attempt made to power sensor
- 1 => Attempt made to power sensor
Bit 2
- 0 => Power up attampt failed
- 1 => Power up attempt succeeded
- Use the isWarmedUp() function to check if enough time has passed to be ready for sensor communication.
Bit 3
- 0 => Activation/wake attempt made
- 1 => No activation/wake attempt made
- check _millisSensorActivated or bit 4 to see if wake() attempt was successful
- a failed activation attempt will give _millisSensorActivated = 0
Bit 4
- 0 => Wake/Activate failed
- 1 => Is awake/actively measuring
- Use the isStable() function to check if enough time has passed to begin a measurement.
Bit 5
- 0 => Start measurement requested attempt made
- 1 => No measurements have been requested
- check _millisMeasurementRequested or bit 6 to see if startSingleMeasurement() attempt was successful
- a failed request attempt will give _millisMeasurementRequested = 0
Bit 6
- 0 => Measurement start failed
- 1 => Measurement attempt succeeded
- Use the isMeasurementComplete() to check if enough time has passed for a measurement to have been completed.
Bit 7
- 0 => No known errors
- 1 => Some sort of error has occurred
bool Sensor:: setup(void) virtual
Do any one-time preparations needed before the sensor will be able to take readings.
Returns | bool True if the setup was successful. |
---|
This sets the pin modes of the _powerPin and _dataPin, updates _
bool Sensor:: update(void) virtual
Update the sensor's values.
Returns | bool True if all steps of the sensor update completed successfully. |
---|
For digital sensors with a single information return, this only needs to be called once for each sensor, even if there are multiple variable subclasses for the sensor.
In general, the update function clears the value results array, powers the sensor, wakes or activates it, tells it one or more times to a start measurement and get the result, averages all the values, notifies the attached variables that new values are available, puts the sensor back to sleep (if it had been asleep) and powers the sensor down (if it had been unpowered). All possible waits are included in this function. To get new results from a single sensor, this is the function that should be used. To work with many sensors together, use the VariableArray class which optimizes the timing and waits for many sensors working together.
void Sensor:: powerUp(void) virtual
Turn on the sensor power, if applicable.
Generally this is done by setting the _HIGH
. Also sets the _
void Sensor:: powerDown(void) virtual
Turn off the sensor power, if applicable.
Generally this is done by setting the _LOW
. Also un-sets the _
bool Sensor:: wake(void) virtual
Wake the sensor up, if necessary. Do whatever it takes to get a sensor in the proper state to begin a measurement.
Returns | bool True if the wake function completed successfully. |
---|
Verifies that the power is on and updates the _
bool Sensor:: sleep(void) virtual
Puts the sensor to sleep, if necessary.
Returns | bool True if the sleep function completed successfully. |
---|
Does not take any action if not necessary.
bool Sensor:: startSingleMeasurement(void) virtual
Tell the sensor to start a single measurement, if needed.
Returns | bool True if the start measurement function completed successfully. |
---|
This also sets the _
bool Sensor:: addSingleMeasurementResult(void) pure
virtual
Get the results from a single measurement.
Returns | bool True if the function completed successfully. |
---|
This asks the sensor for a new result, verifies that it passes sanity range checks, and then adds the value to the result array.
This also un-sets the _
void Sensor:: verifyAndAddMeasurementResult(uint8_t resultNumber,
float resultValue)
Verify that a measurement is OK (ie, not -9999) before adding it to the result array.
Parameters | |
---|---|
resultNumber | The position of the result within the result array. |
resultValue | The value of the result. |
void Sensor:: verifyAndAddMeasurementResult(uint8_t resultNumber,
int16_t resultValue)
Verify that a measurement is OK (ie, not -9999) before adding it to the result array.
Parameters | |
---|---|
resultNumber | The position of the result within the result array. |
resultValue | The value of the result. |
void Sensor:: verifyAndAddMeasurementResult(uint8_t resultNumber,
int32_t resultValue)
Average the results of all measurements by dividing the sum of all measurements by the number of measurements taken.
Parameters | |
---|---|
resultNumber | The position of the result within the result array. |
resultValue | The value of the result. |
void Sensor:: registerVariable(int sensorVarNum,
Variable* var)
Register a variable object to a sensor.
Parameters | |
---|---|
sensorVarNum | The position the variable result holds in the variable result array. |
var | A ponter to the Variable object. |
bool Sensor:: checkPowerOn(bool debug = false)
Check if the _
Parameters | |
---|---|
debug | True to output the result to the debugging Serial |
Returns | bool True indicates the _HIGH . |
bool Sensor:: isWarmedUp(bool debug = false) virtual
Check whether or not enough time has passed between the sensor receiving power and being ready to respond to logger commands.
Parameters | |
---|---|
debug | True to output the result to the debugging Serial |
Returns | bool True indicates that enough time has passed that the sensor should be ready to respond to commands. |
bool Sensor:: isStable(bool debug = false) virtual
Check whether or not enough time has passed between the sensor being awoken/activated and being ready to output stable values.
Parameters | |
---|---|
debug | True to output the result to the debugging Serial |
Returns | bool True indicates that enough time has passed that the sensor should have stabilized. |
bool Sensor:: isMeasurementComplete(bool debug = false) virtual
Check whether or not enough time has passed between when the sensor was asked to take a single measurement and when that measurement is expected to be complete.
Parameters | |
---|---|
debug | True to output the result to the debugging Serial |
Returns | bool True indicates that enough time has passed the measurement should have completed |
Variable documentation
const uint8_t Sensor:: _numReturnedValues protected
The number of values the sensor is capable of reporting.
This includes raw values from the sensor and any values that are always calculated within the library for the sensor. The _
uint8_t Sensor:: _measurementsToAverage protected
The number of measurements from the sensor to average.
This will become the number of readings actually taken by a sensor prior to data averaging. Any "bad" (-9999) values returned by the sensor will not be included in the final averaging. This means that the actual number of "good" values that are averaged may be less than what was requested.
uint8_t Sensor:: _incCalcValues protected
The number of included calculated variables from the sensor, if any.
These are used for values that we would always calculate for a sensor and depend only on the raw results of that single sensor. This is separate from any calculated variables that are created on-the-fly and depend on multiple other sensors.
uint32_t Sensor:: _millisPowerOn protected
The processor elapsed time when the power was turned on for the sensor.
The _
uint32_t Sensor:: _millisSensorActivated protected
The processor elapsed time when the sensor was activiated - ie, when the wake() function was run.
The _
uint32_t Sensor:: _millisMeasurementRequested protected
The processor elapsed time when a measuremnt was started - ie, when the startSingleMeasurement() function was run.
The _