C-Libs/SHT40.c

63 lines
1.7 KiB
C

/*
* 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);
}
}