Manuel Caballero / AHT20
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?

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