100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 温湿度传感器SHT20的驱动与使用

温湿度传感器SHT20的驱动与使用

时间:2023-06-19 00:37:15

相关推荐

温湿度传感器SHT20的驱动与使用

最近公司里的一个小的项目:基于冰库的温度检测,采用无线通讯的方式,将采集到的温度信息传送给基站,基站通过UDP传输给上位机。

实验平台

编译软件: IAR Embedded Workbench for ARM version 6.40

KEIL Keil uVision4

硬件平台:(1)测温度标签: Nrf24LE1与SHT20 (2)基站:STM32F107与NRF24LE1

SHT20的驱动代码可以点击这里

在原来网上找到的源码,发现IIC写寄存器的时候,有些偏差。因此自己参考了之前驱动ADXL345加速度传感器的模拟IIC程序,对写寄存器部分进行了优化。

以下是读取的函数,将该函数放在while(1)的循环里,即可实现对温度的读取。

float ReadSht20(char whatdo)

{

float temp;

uchar MSB,LSB;

float Humidity;

float Temperature;

SET_Resolution();

I2CStart();

if(I2C_Write_Byte(SHT20ADDR&0xfe)==ACK)

{

if(I2C_Write_Byte(whatdo)==ACK)

{

do

{

Delay(6);

I2CStart();

}while(I2C_Write_Byte(SHT20ADDR|0x01)==NACK);

MSB = I2C_Read_Byte(ACK);

LSB = I2C_Read_Byte(ACK);

I2C_Read_Byte(NACK);

I2CStop();

LSB &= 0xfc;

temp = MSB*256 + LSB;

if (whatdo==((char)0xF5))

{

Humidity = (temp*125)/65536-6;

return Humidity;

}

else

{

Temperature = (temp*175.72)/65536-46.85;

return Temperature;

}

}

}

return 0;

}

读取的函数读出的函数是float类型。可以使用union进行转化,

typedef union

{

float x;

INT8U y[4];

}Temperature;

typedef union

{

float x;

INT8U y[4];

}Humidity;

Temperature TagTemperature;

Humidity TagHumidity;

通过以下两个语句可以使用float类型的数据

TagHumidity.x=ReadSht20((char)0xF5);

TagTemperature.x=ReadSht20((char)0xF3);

而使用以下的两个语句可以实现串口吐出4个byte的温度值

Temperature_BUFF[0]=TagTemperature.y[0];

Temperature_BUFF[1]=TagTemperature.y[1];

Temperature_BUFF[2]=TagTemperature.y[2];

Temperature_BUFF[3]=TagTemperature.y[3];

UART0_SendBuff(Temperature_BUFF,sizeof(Temperature_BUFF));

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。