SHT20は、I2C通信を使用した温度および湿度センサーです。
次のI2Cプログラムは、独自のI2Cプログラムに置き換える必要があります
SoftReset関数:ハードウェアの初期化
SET_Resolution関数:解像度を設定します
ReadSht20関数:測定を開始します
main.cのmain関数でこのように呼び出します
if(SoftReset() == 0){
printf("初始化成功\r\n");
}
while(1){
printf("Humidity %f \r\n",ReadSht20((char)0xF5));
printf("Temperature %f \r\n",ReadSht20((char)0xF3));
delay_ms(1000);
}
sht20.c
#include "sht20.h"
#include "hardiic.h"
#include "delay.h"
#include "usart.h"
#define SHT20ADDR 0x80
char SoftReset(void) {
IIC_Start();
IIC_Send_Byte(SHT20ADDR&0xfe); //I2C address + write
if(IIC_Wait_Ack() == 1)return 1;
IIC_Send_Byte(0xfe); //soft reset
if(IIC_Wait_Ack() == 1)return 1;
IIC_Stop(); //stop I2C
return 0;
}
char SET_Resolution(void){
IIC_Start();
IIC_Send_Byte(SHT20ADDR&0xfe);
if(IIC_Wait_Ack() == 1)return 1;
IIC_Send_Byte(0xe6);
if(IIC_Wait_Ack() == 1)return 1;
IIC_Send_Byte(0x83);
if(IIC_Wait_Ack() == 1)return 1;
IIC_Stop();
return 0;
}
float ReadSht20(char whatdo){
float temp = 0.0f;
unsigned char MSB,LSB;
float Humidity = 0.0f;
float Temperature = 0.0f;
if(SET_Resolution() == 0){
//printf("set ok \r\n");
}
delay_ms(20);
IIC_Start();
IIC_Send_Byte(SHT20ADDR&0xfe);
if(IIC_Wait_Ack() == 1)return 0;
IIC_Send_Byte(whatdo);
if(IIC_Wait_Ack() == 1)return 0;
do{
delay_ms(6);
IIC_Start();
IIC_Send_Byte(SHT20ADDR|0x01);
}while(IIC_Wait_Ack() != 0);
MSB = IIC_Read_Byte(1);
LSB = IIC_Read_Byte(1);
IIC_Read_Byte(0);
IIC_Stop();
LSB &= 0xfc;
temp = MSB*256 + LSB;
delay_ms(20);
if (whatdo==((char)0xF5)){
Humidity = (temp*125)/65536-6;
return Humidity;
}else{
Temperature = (temp*175.72)/65536-46.85;
return Temperature;
}
}
sht20.h
#ifndef __SHT20_H
#define __SHT20_H
#include "sys.h"
char SoftReset(void);
char SET_Resolution(void);
float ReadSht20(char whatdo);
#endif
ステーションBの住所:https://www.bilibili.com/read/cv8106605
問題が発生した場合は、私のBステーションhttps://space.bilibili.com/309103931に質問してください。