Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
AHT20.h@0:a7e98be43098, 2022-02-08 (annotated)
- Committer:
- mcm
- Date:
- Tue Feb 08 17:50:23 2022 +0000
- Revision:
- 0:a7e98be43098
- Child:
- 2:ec96fb27c02d
A driver for new sensor, AHT20, header file is completed and ready to test.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mcm | 0:a7e98be43098 | 1 | /** |
mcm | 0:a7e98be43098 | 2 | * @brief AHT20.h |
mcm | 0:a7e98be43098 | 3 | * @details Humidity and Temperature Sensor. |
mcm | 0:a7e98be43098 | 4 | * Header file. |
mcm | 0:a7e98be43098 | 5 | * |
mcm | 0:a7e98be43098 | 6 | * |
mcm | 0:a7e98be43098 | 7 | * @return N/A |
mcm | 0:a7e98be43098 | 8 | * |
mcm | 0:a7e98be43098 | 9 | * @author Manuel Caballero |
mcm | 0:a7e98be43098 | 10 | * @date 08/February/2022 |
mcm | 0:a7e98be43098 | 11 | * @version 08/February/2022 The ORIGIN |
mcm | 0:a7e98be43098 | 12 | * @pre N/A. |
mcm | 0:a7e98be43098 | 13 | * @warning N/A |
mcm | 0:a7e98be43098 | 14 | * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ). |
mcm | 0:a7e98be43098 | 15 | */ |
mcm | 0:a7e98be43098 | 16 | #ifndef AHT20_H |
mcm | 0:a7e98be43098 | 17 | #define AHT20_H |
mcm | 0:a7e98be43098 | 18 | |
mcm | 0:a7e98be43098 | 19 | #include "mbed.h" |
mcm | 0:a7e98be43098 | 20 | |
mcm | 0:a7e98be43098 | 21 | |
mcm | 0:a7e98be43098 | 22 | /** |
mcm | 0:a7e98be43098 | 23 | Example: |
mcm | 0:a7e98be43098 | 24 | @code |
mcm | 0:a7e98be43098 | 25 | |
mcm | 0:a7e98be43098 | 26 | @endcode |
mcm | 0:a7e98be43098 | 27 | */ |
mcm | 0:a7e98be43098 | 28 | |
mcm | 0:a7e98be43098 | 29 | |
mcm | 0:a7e98be43098 | 30 | /*! |
mcm | 0:a7e98be43098 | 31 | Library for the AHT20 Humidity and Temperature Sensor. |
mcm | 0:a7e98be43098 | 32 | */ |
mcm | 0:a7e98be43098 | 33 | class AHT20 |
mcm | 0:a7e98be43098 | 34 | { |
mcm | 0:a7e98be43098 | 35 | public: |
mcm | 0:a7e98be43098 | 36 | /** |
mcm | 0:a7e98be43098 | 37 | * @brief DEFAULT ADDRESS |
mcm | 0:a7e98be43098 | 38 | */ |
mcm | 0:a7e98be43098 | 39 | typedef enum { |
mcm | 0:a7e98be43098 | 40 | AHT20_ADDRESS = 0x38 /*!< AHT20 I2C Address */ |
mcm | 0:a7e98be43098 | 41 | } AHT20_address_t; |
mcm | 0:a7e98be43098 | 42 | |
mcm | 0:a7e98be43098 | 43 | |
mcm | 0:a7e98be43098 | 44 | |
mcm | 0:a7e98be43098 | 45 | |
mcm | 0:a7e98be43098 | 46 | /** |
mcm | 0:a7e98be43098 | 47 | * @brief COMMAND REGISTERS |
mcm | 0:a7e98be43098 | 48 | */ |
mcm | 0:a7e98be43098 | 49 | typedef enum { |
mcm | 0:a7e98be43098 | 50 | AHT20_TRIGGER_MEASUREMENT = 0xAC, /*!< Trigger measurement command */ |
mcm | 0:a7e98be43098 | 51 | AHT20_STATUS = 0x71, /*!< Status command */ |
mcm | 0:a7e98be43098 | 52 | AHT20_INITIALIZATION = 0xBE, /*!< Initialization */ |
mcm | 0:a7e98be43098 | 53 | AHT20_SOFTRESET = 0xBA /*!< Soft reset */ |
mcm | 0:a7e98be43098 | 54 | } AHT20_basic_commands_t; |
mcm | 0:a7e98be43098 | 55 | |
mcm | 0:a7e98be43098 | 56 | |
mcm | 0:a7e98be43098 | 57 | |
mcm | 0:a7e98be43098 | 58 | // TRIGGER MESUREMENT |
mcm | 0:a7e98be43098 | 59 | /** |
mcm | 0:a7e98be43098 | 60 | * @brief DATA |
mcm | 0:a7e98be43098 | 61 | * NOTE: N/A |
mcm | 0:a7e98be43098 | 62 | */ |
mcm | 0:a7e98be43098 | 63 | typedef enum { |
mcm | 0:a7e98be43098 | 64 | TRIGGER_MEASUREMENT_DATA_1 = 0x33, /*!< Data 1 */ |
mcm | 0:a7e98be43098 | 65 | TRIGGER_MEASUREMENT_DATA_2 = 0x00 /*!< Data 2 */ |
mcm | 0:a7e98be43098 | 66 | } AHT20_trigger_measurement_t; |
mcm | 0:a7e98be43098 | 67 | |
mcm | 0:a7e98be43098 | 68 | |
mcm | 0:a7e98be43098 | 69 | |
mcm | 0:a7e98be43098 | 70 | // STATUS |
mcm | 0:a7e98be43098 | 71 | /** |
mcm | 0:a7e98be43098 | 72 | * @brief BUS_INDICATION <7> |
mcm | 0:a7e98be43098 | 73 | * NOTE: N/A |
mcm | 0:a7e98be43098 | 74 | */ |
mcm | 0:a7e98be43098 | 75 | typedef enum { |
mcm | 0:a7e98be43098 | 76 | STATUS_BUS_INDICATION_MASK = ( 1U << 7U ), /*!< BUS_INDICATION mask */ |
mcm | 0:a7e98be43098 | 77 | STATUS_BUS_INDICATION_BUSY = ( 1U << 7U ), /*!< Busy in measurement */ |
mcm | 0:a7e98be43098 | 78 | STATUS_BUS_INDICATION_FREE = ( 0U << 7U ) /*!< Free in dormant state */ |
mcm | 0:a7e98be43098 | 79 | } AHT20_status_bus_indication_t; |
mcm | 0:a7e98be43098 | 80 | |
mcm | 0:a7e98be43098 | 81 | |
mcm | 0:a7e98be43098 | 82 | |
mcm | 0:a7e98be43098 | 83 | /** |
mcm | 0:a7e98be43098 | 84 | * @brief CAL <3> |
mcm | 0:a7e98be43098 | 85 | * NOTE: N/A |
mcm | 0:a7e98be43098 | 86 | */ |
mcm | 0:a7e98be43098 | 87 | typedef enum { |
mcm | 0:a7e98be43098 | 88 | STATUS_CAL_MASK = ( 1U << 3U ), /*!< CAL mask */ |
mcm | 0:a7e98be43098 | 89 | STATUS_CAL_CALIBRATED = ( 1U << 3U ), /*!< Calibrated */ |
mcm | 0:a7e98be43098 | 90 | STATUS_CAL_UNCALIBRATED = ( 0U << 3U ) /*!< Uncalibrated */ |
mcm | 0:a7e98be43098 | 91 | } AHT20_status_cal_t; |
mcm | 0:a7e98be43098 | 92 | |
mcm | 0:a7e98be43098 | 93 | |
mcm | 0:a7e98be43098 | 94 | |
mcm | 0:a7e98be43098 | 95 | // INITIALIZATION |
mcm | 0:a7e98be43098 | 96 | /** |
mcm | 0:a7e98be43098 | 97 | * @brief INITIALIZATION |
mcm | 0:a7e98be43098 | 98 | * NOTE: N/A |
mcm | 0:a7e98be43098 | 99 | */ |
mcm | 0:a7e98be43098 | 100 | typedef enum { |
mcm | 0:a7e98be43098 | 101 | INITIALIZATION_DATA_1 = 0x08, /*!< Data 1 */ |
mcm | 0:a7e98be43098 | 102 | INITIALIZATION_DATA_2 = 0x00 /*!< Data 2 */ |
mcm | 0:a7e98be43098 | 103 | } AHT20_initialization_t; |
mcm | 0:a7e98be43098 | 104 | |
mcm | 0:a7e98be43098 | 105 | |
mcm | 0:a7e98be43098 | 106 | |
mcm | 0:a7e98be43098 | 107 | |
mcm | 0:a7e98be43098 | 108 | |
mcm | 0:a7e98be43098 | 109 | #ifndef AHT20_VECTOR_STRUCT_H |
mcm | 0:a7e98be43098 | 110 | #define AHT20_VECTOR_STRUCT_H |
mcm | 0:a7e98be43098 | 111 | /* Temperature data */ |
mcm | 0:a7e98be43098 | 112 | typedef struct { |
mcm | 0:a7e98be43098 | 113 | uint32_t raw_temperature; /*!< Raw temperature data */ |
mcm | 0:a7e98be43098 | 114 | float temperature; /*!< Temperature */ |
mcm | 0:a7e98be43098 | 115 | } AHT20_temperature_data_t; |
mcm | 0:a7e98be43098 | 116 | |
mcm | 0:a7e98be43098 | 117 | |
mcm | 0:a7e98be43098 | 118 | /* Humidity data */ |
mcm | 0:a7e98be43098 | 119 | typedef struct { |
mcm | 0:a7e98be43098 | 120 | uint32_t raw_humidity; /*!< Raw humidity data */ |
mcm | 0:a7e98be43098 | 121 | float humidity; /*!< Humidity */ |
mcm | 0:a7e98be43098 | 122 | } AHT20_humidity_data_t; |
mcm | 0:a7e98be43098 | 123 | |
mcm | 0:a7e98be43098 | 124 | |
mcm | 0:a7e98be43098 | 125 | /* User's variables */ |
mcm | 0:a7e98be43098 | 126 | typedef struct { |
mcm | 0:a7e98be43098 | 127 | AHT20_temperature_data_t temperature; /*!< Temperature variables */ |
mcm | 0:a7e98be43098 | 128 | AHT20_humidity_data_t humidity; /*!< Humidity variables */ |
mcm | 0:a7e98be43098 | 129 | |
mcm | 0:a7e98be43098 | 130 | uint8_t state; /*!< State */ |
mcm | 0:a7e98be43098 | 131 | |
mcm | 0:a7e98be43098 | 132 | uint8_t crc; /*!< CRC */ |
mcm | 0:a7e98be43098 | 133 | } AHT20_user_data_t; |
mcm | 0:a7e98be43098 | 134 | #endif |
mcm | 0:a7e98be43098 | 135 | |
mcm | 0:a7e98be43098 | 136 | |
mcm | 0:a7e98be43098 | 137 | /** |
mcm | 0:a7e98be43098 | 138 | * @brief INTERNAL CONSTANTS |
mcm | 0:a7e98be43098 | 139 | */ |
mcm | 0:a7e98be43098 | 140 | typedef enum { |
mcm | 0:a7e98be43098 | 141 | AHT20_SUCCESS = 0U, |
mcm | 0:a7e98be43098 | 142 | AHT20_FAILURE = 1U, |
mcm | 0:a7e98be43098 | 143 | I2C_SUCCESS = 0U /*!< I2C communication was fine */ |
mcm | 0:a7e98be43098 | 144 | } AHT20_status_t; |
mcm | 0:a7e98be43098 | 145 | |
mcm | 0:a7e98be43098 | 146 | |
mcm | 0:a7e98be43098 | 147 | |
mcm | 0:a7e98be43098 | 148 | |
mcm | 0:a7e98be43098 | 149 | /** Create an AHT20 object connected to the specified I2C pins. |
mcm | 0:a7e98be43098 | 150 | * |
mcm | 0:a7e98be43098 | 151 | * @param sda I2C data pin |
mcm | 0:a7e98be43098 | 152 | * @param scl I2C clock pin |
mcm | 0:a7e98be43098 | 153 | * @param addr I2C slave address |
mcm | 0:a7e98be43098 | 154 | * @param freq I2C frequency |
mcm | 0:a7e98be43098 | 155 | */ |
mcm | 0:a7e98be43098 | 156 | AHT20 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq ); |
mcm | 0:a7e98be43098 | 157 | |
mcm | 0:a7e98be43098 | 158 | /** Delete AHT20 object. |
mcm | 0:a7e98be43098 | 159 | */ |
mcm | 0:a7e98be43098 | 160 | ~AHT20(); |
mcm | 0:a7e98be43098 | 161 | |
mcm | 0:a7e98be43098 | 162 | /** It calibrates the device. |
mcm | 0:a7e98be43098 | 163 | */ |
mcm | 0:a7e98be43098 | 164 | AHT20_status_t AHT20_Calibrate ( void ); |
mcm | 0:a7e98be43098 | 165 | |
mcm | 0:a7e98be43098 | 166 | /** It performs a soft-reset. |
mcm | 0:a7e98be43098 | 167 | */ |
mcm | 0:a7e98be43098 | 168 | AHT20_status_t AHT20_SoftReset ( void ); |
mcm | 0:a7e98be43098 | 169 | |
mcm | 0:a7e98be43098 | 170 | /** It triggers a new measurement data (raw data). |
mcm | 0:a7e98be43098 | 171 | */ |
mcm | 0:a7e98be43098 | 172 | AHT20_status_t AHT20_TriggerMeasurement ( void ); |
mcm | 0:a7e98be43098 | 173 | |
mcm | 0:a7e98be43098 | 174 | /** It triggers the state byte. |
mcm | 0:a7e98be43098 | 175 | */ |
mcm | 0:a7e98be43098 | 176 | AHT20_status_t AHT20_TriggerStatus ( void ); |
mcm | 0:a7e98be43098 | 177 | |
mcm | 0:a7e98be43098 | 178 | /** It gets the state byte. |
mcm | 0:a7e98be43098 | 179 | */ |
mcm | 0:a7e98be43098 | 180 | AHT20_status_t AHT20_GetStatus ( uint8_t* myState ); |
mcm | 0:a7e98be43098 | 181 | |
mcm | 0:a7e98be43098 | 182 | /** It gets all the raw data. |
mcm | 0:a7e98be43098 | 183 | */ |
mcm | 0:a7e98be43098 | 184 | AHT20_status_t AHT20_GetAllData ( AHT20_user_data_t* myAllData ); |
mcm | 0:a7e98be43098 | 185 | |
mcm | 0:a7e98be43098 | 186 | /** It processes the temperature data. |
mcm | 0:a7e98be43098 | 187 | */ |
mcm | 0:a7e98be43098 | 188 | float AHT20_ProcessTemperature ( uint32_t myRawTemperature ); |
mcm | 0:a7e98be43098 | 189 | |
mcm | 0:a7e98be43098 | 190 | /** It processes the humidity data. |
mcm | 0:a7e98be43098 | 191 | */ |
mcm | 0:a7e98be43098 | 192 | float AHT20_ProcessHumidity ( uint32_t myRawHumidity ); |
mcm | 0:a7e98be43098 | 193 | |
mcm | 0:a7e98be43098 | 194 | |
mcm | 0:a7e98be43098 | 195 | |
mcm | 0:a7e98be43098 | 196 | private: |
mcm | 0:a7e98be43098 | 197 | I2C _i2c; |
mcm | 0:a7e98be43098 | 198 | uint32_t _AHT20_Addr; |
mcm | 0:a7e98be43098 | 199 | }; |
mcm | 0:a7e98be43098 | 200 | |
mcm | 0:a7e98be43098 | 201 | #endif |