A simple WIP that logs data from a Grove sensor, and can send and receive information over USB and SMS.
Dependencies: DHT DS_1337 SDFileSystem USBDevice mbed
Handlers/GroveDht22.h@0:2df78a4443cd, 2016-04-10 (annotated)
- Committer:
- Joseph Radford
- Date:
- Sun Apr 10 15:47:33 2016 +1000
- Revision:
- 0:2df78a4443cd
Initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Joseph Radford |
0:2df78a4443cd | 1 | #ifndef __GROVE_DHT_22_H__ |
Joseph Radford |
0:2df78a4443cd | 2 | #define __GROVE_DHT_22_H__ |
Joseph Radford |
0:2df78a4443cd | 3 | |
Joseph Radford |
0:2df78a4443cd | 4 | #include "DHT.h" |
Joseph Radford |
0:2df78a4443cd | 5 | #include "mbed.h" |
Joseph Radford |
0:2df78a4443cd | 6 | #include "AbstractHandler.h" |
Joseph Radford |
0:2df78a4443cd | 7 | |
Joseph Radford |
0:2df78a4443cd | 8 | class MeasurementHandler; |
Joseph Radford |
0:2df78a4443cd | 9 | |
Joseph Radford |
0:2df78a4443cd | 10 | /*! |
Joseph Radford |
0:2df78a4443cd | 11 | * \brief The Dht22Result struct is the information read from a Dht22 Grove sensor |
Joseph Radford |
0:2df78a4443cd | 12 | */ |
Joseph Radford |
0:2df78a4443cd | 13 | struct Dht22Result { |
Joseph Radford |
0:2df78a4443cd | 14 | time_t resultTime; ///< timestamp of when the result was returned from the Dht22 |
Joseph Radford |
0:2df78a4443cd | 15 | float lastCelcius; ///< Temperature result (degC) |
Joseph Radford |
0:2df78a4443cd | 16 | float lastHumidity; ///< Humidity result |
Joseph Radford |
0:2df78a4443cd | 17 | float lastDewpoint; ///< Dewpoint result |
Joseph Radford |
0:2df78a4443cd | 18 | }; |
Joseph Radford |
0:2df78a4443cd | 19 | |
Joseph Radford |
0:2df78a4443cd | 20 | /*! |
Joseph Radford |
0:2df78a4443cd | 21 | * \brief The GroveDht22 class handles the interface to the DHT22 humidity and temperature sensor. |
Joseph Radford |
0:2df78a4443cd | 22 | * |
Joseph Radford |
0:2df78a4443cd | 23 | * The state machine checks for errors and retries and will power cycle the sensor if there are |
Joseph Radford |
0:2df78a4443cd | 24 | * GROVE_NUM_RETRIES number of retries. |
Joseph Radford |
0:2df78a4443cd | 25 | |
Joseph Radford |
0:2df78a4443cd | 26 | * The state machine also ensures that at least two seconds is left between readings. |
Joseph Radford |
0:2df78a4443cd | 27 | |
Joseph Radford |
0:2df78a4443cd | 28 | * At any time the parent class can access the last good readings, or the last error. |
Joseph Radford |
0:2df78a4443cd | 29 | |
Joseph Radford |
0:2df78a4443cd | 30 | * The newInfo flag exists so that the parent can decide to only notify (print to terminal or otherwise) when there |
Joseph Radford |
0:2df78a4443cd | 31 | * is new information available. Calling the newInfo getter will clear the newInfo flag. |
Joseph Radford |
0:2df78a4443cd | 32 | */ |
Joseph Radford |
0:2df78a4443cd | 33 | class GroveDht22 : public AbstractHandler |
Joseph Radford |
0:2df78a4443cd | 34 | { |
Joseph Radford |
0:2df78a4443cd | 35 | public: |
Joseph Radford |
0:2df78a4443cd | 36 | GroveDht22(MeasurementHandler *_measure, MyTimers * _timer); |
Joseph Radford |
0:2df78a4443cd | 37 | ~GroveDht22(); |
Joseph Radford |
0:2df78a4443cd | 38 | |
Joseph Radford |
0:2df78a4443cd | 39 | void run(); |
Joseph Radford |
0:2df78a4443cd | 40 | |
Joseph Radford |
0:2df78a4443cd | 41 | void setRequest(int request, void *data = 0); |
Joseph Radford |
0:2df78a4443cd | 42 | |
Joseph Radford |
0:2df78a4443cd | 43 | // getters |
Joseph Radford |
0:2df78a4443cd | 44 | float lastCelcius() { return _lastCelcius; } |
Joseph Radford |
0:2df78a4443cd | 45 | float lastHumidity() { return _lastHumidity; } |
Joseph Radford |
0:2df78a4443cd | 46 | float lastDewPoint() { return _lastDewpoint; } |
Joseph Radford |
0:2df78a4443cd | 47 | eError lastError() { return _lastError; } |
Joseph Radford |
0:2df78a4443cd | 48 | unsigned char newInfo(); |
Joseph Radford |
0:2df78a4443cd | 49 | |
Joseph Radford |
0:2df78a4443cd | 50 | private: |
Joseph Radford |
0:2df78a4443cd | 51 | // state machine |
Joseph Radford |
0:2df78a4443cd | 52 | typedef enum { |
Joseph Radford |
0:2df78a4443cd | 53 | dht_StartTurnOff, ///< Begin by ensuring the sensor is switched off |
Joseph Radford |
0:2df78a4443cd | 54 | dht_StartTurnOffWait, ///< Allow it to power down completely |
Joseph Radford |
0:2df78a4443cd | 55 | dht_StartTurnOn, ///< Turn the sensor on |
Joseph Radford |
0:2df78a4443cd | 56 | dht_StartTurnOnWait, ///< Allow sensor to settle after powering on |
Joseph Radford |
0:2df78a4443cd | 57 | dht_TakeMeasurement, ///< Take a measurement, check if valid, update measurment vars, set newInfo |
Joseph Radford |
0:2df78a4443cd | 58 | dht_WaitMeasurement ///< Wait for 2 seconds between measurements |
Joseph Radford |
0:2df78a4443cd | 59 | } mode_t; |
Joseph Radford |
0:2df78a4443cd | 60 | |
Joseph Radford |
0:2df78a4443cd | 61 | mode_t mode; ///< The current state in the state machine |
Joseph Radford |
0:2df78a4443cd | 62 | |
Joseph Radford |
0:2df78a4443cd | 63 | float _lastCelcius; ///< Last temperature reading from the Dht22 sensor |
Joseph Radford |
0:2df78a4443cd | 64 | float _lastHumidity; ///< Last humidity reading from the Dht22 sensor |
Joseph Radford |
0:2df78a4443cd | 65 | float _lastDewpoint; ///< Last dewpoint calculation from last temp, humidity vales |
Joseph Radford |
0:2df78a4443cd | 66 | unsigned char _newInfo; ///< This flag indicates there is new information (an error, or a measurement) |
Joseph Radford |
0:2df78a4443cd | 67 | int _retries; ///< Number of bad readings from the Dht22 sensor |
Joseph Radford |
0:2df78a4443cd | 68 | eError _lastError; ///< The last error, or lack thereof |
Joseph Radford |
0:2df78a4443cd | 69 | |
Joseph Radford |
0:2df78a4443cd | 70 | /*! |
Joseph Radford |
0:2df78a4443cd | 71 | * \brief powerOn powers the Dht22 on or off, by toggling the enable pin |
Joseph Radford |
0:2df78a4443cd | 72 | * \param ON true to power on, false to power off |
Joseph Radford |
0:2df78a4443cd | 73 | */ |
Joseph Radford |
0:2df78a4443cd | 74 | void powerOn(unsigned char ON); |
Joseph Radford |
0:2df78a4443cd | 75 | |
Joseph Radford |
0:2df78a4443cd | 76 | MeasurementHandler *m_measure; ///< Reference to send measurement results and errors to for handling |
Joseph Radford |
0:2df78a4443cd | 77 | |
Joseph Radford |
0:2df78a4443cd | 78 | DHT *m_sensor; ///< Interface to hardware DHT sensor |
Joseph Radford |
0:2df78a4443cd | 79 | }; |
Joseph Radford |
0:2df78a4443cd | 80 | |
Joseph Radford |
0:2df78a4443cd | 81 | #endif // __GROVE_DHT_22_H__ |