/* * SHT40.c * * Created on: Nov 15, 2021 * Author: angoosh */ #include "SHT40.h" #include "main.h" extern I2C_HandleTypeDef STH40_I2C_HANDLE; void STH40_Read_Sensor_Data(STH40_COMMANDS command, float *retVal); /* @brief Read sensor data of SHT40 * @param command to send * @param returns temperature and humidity * @retval float temperature or humidity */ void STH40_Read_Sensor_Data(STH40_COMMANDS command, float *retVal){ uint8_t data[1] = {command}; uint8_t SHT40_data[6]; if((command != Serial_Number) || (command != Soft_Reset)){ HAL_I2C_Master_Transmit(&STH40_I2C_HANDLE, (STH40_ADDRESS << 1), data, 2, 0xFFFF); if((command == High_Precision) || (command == Medium_Precision) || (command == Low_Precision)){ HAL_Delay(10); } else if((command == Heater_200mW_1s) || (command == Heater_110mW_1s) || (command == Heater_20mW_1s)){ HAL_Delay(1010); } else{ HAL_Delay(110); } HAL_I2C_Master_Receive(&STH40_I2C_HANDLE, (STH40_ADDRESS << 1), SHT40_data, 6, 0xFFFF); int t_ticks = SHT40_data[0] * 256 + SHT40_data[1]; int rh_ticks = SHT40_data[3] * 256 + SHT40_data[4]; float temp = -45 + 175 * t_ticks/65535; float hum = -6 + 125 * rh_ticks/65535; if(hum > 100){ hum = 100; } if(hum < 0){ hum = 0; } retVal[0] = temp; retVal[1] = hum; } else if(command == Serial_Number){ HAL_I2C_Master_Transmit(&STH40_I2C_HANDLE, (STH40_ADDRESS << 1), data, 2, 0xFFFF); HAL_Delay(10); HAL_I2C_Master_Receive(&STH40_I2C_HANDLE, (STH40_ADDRESS << 1), SHT40_data, 6, 0xFFFF); retVal[0] = SHT40_data[0] * 256 + SHT40_data[1]; retVal[1] = SHT40_data[3] * 256 + SHT40_data[4]; } else{ HAL_I2C_Master_Transmit(&STH40_I2C_HANDLE, (STH40_ADDRESS << 1), data, 2, 0xFFFF); } }