63 lines
1.7 KiB
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);
|
|
}
|
|
}
|