@@ -119,32 +119,22 @@ aht20_status_t aht20_calibrate(I2C_HandleTypeDef *hi2c, uint8_t status_word) {
119
119
* Datasheet: AHT20 Product manuals
120
120
* 5.4 Sensor reading process, paragraph 2
121
121
*/
122
- aht20_status_t aht20_measure (I2C_HandleTypeDef * hi2c , uint8_t * measured_data ) {
123
- uint8_t received_crc = 0 ;
124
-
122
+ aht20_status_t aht20_measure (I2C_HandleTypeDef * hi2c , uint8_t * measured_data , uint16_t measured_data_size ) {
125
123
if (HAL_OK != HAL_I2C_Master_Transmit (hi2c , DEVICE_ADDRESS , MEASURE_CMD , (uint16_t )sizeof (MEASURE_CMD ), HAL_MAX_DELAY )) {
126
124
return AHT20_STATUS_NOT_TRANSMITTED ;
127
125
}
128
126
HAL_Delay (80 );
129
127
130
- uint8_t measuring_status = 0 ;
131
- HAL_I2C_Master_Receive (hi2c , DEVICE_ADDRESS , & measuring_status , (uint16_t )sizeof (measuring_status ), HAL_MAX_DELAY );
132
-
133
- uint8_t all_data [7 ];
134
- if (measuring_status & (1 << 7 )) {
135
- return AHT20_STATUS_NOT_MEASURED ;
136
- } else {
137
- HAL_I2C_Master_Receive (hi2c , DEVICE_ADDRESS , all_data , (uint16_t )sizeof (all_data ), HAL_MAX_DELAY );
128
+ if (HAL_OK != HAL_I2C_Master_Receive (hi2c , DEVICE_ADDRESS , measured_data , measured_data_size , HAL_MAX_DELAY )) {
129
+ return AHT20_STATUS_NOT_RECEIVED ;
138
130
}
139
131
140
- // Copy 6 data bytes to measured_data
141
- for (uint8_t i = 0 ; i < 6 ; ++ i ) {
142
- measured_data [i ] = all_data [i ];
132
+ if (measured_data [0 ] & (1 << 7 )) {
133
+ return AHT20_STATUS_NOT_MEASURED ;
143
134
}
144
- received_crc = all_data [6 ]; // CRC is the 7th byte
145
135
146
- uint8_t calculated_crc = calculate_crc (measured_data );
147
- if (calculated_crc == received_crc ) {
136
+ uint8_t calculated_crc = calculate_crc (measured_data + 1 );
137
+ if (calculated_crc == measured_data [ 0 ] ) {
148
138
uint8_t ack = 0x06 ;
149
139
if (HAL_OK != HAL_I2C_Master_Transmit (hi2c , DEVICE_ADDRESS , & ack , (uint16_t )sizeof (ack ), HAL_MAX_DELAY )) {
150
140
return AHT20_STATUS_NOT_TRANSMITTED ;
0 commit comments