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

Committer:
Joseph Radford
Date:
Sun Apr 10 15:47:33 2016 +1000
Revision:
0:2df78a4443cd
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew 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__