STM32 SHT10温湿度传感器的信号采集

摘自:http://www.51hei.com/bbs/dpj-41712-1.html
    首先讲讲SHT10这款温室度传感器。SHT1x(包括SHT10,SHT11和SHT15)属于Sersirion温湿度传感器家族中的贴片封装系列。更之前我讲过的DHT11这款温湿度传感器相比,体积小了许多,特别适合用于产品中。SHT10温湿度传感器包括一个电容性聚合体测湿敏感元件、一个用能隙材料制成的测温元件(文绉绉的),传感器内部有一个精度高达14为位的A/D转换器,适应串行接口电路实现无缝连接。该产品具有品质卓越、响应速度速度快,抗干扰能力强、性价比高等优点。
     1、接口定义:
  SHT10的接口定义如下图所示:
                                                            
           如上图所示,1脚为GND,4脚为VDD。它的供电电压范围为2.4~5.5V,建议的电压为3.3V,在电源引脚(VDD、GND)之间必须加上一个0.1uf的电容,应于去耦滤波用。它的2脚DATA为数据引脚,3脚SCK为时钟控制引脚,没有发现这两个引脚很像IIC所使用的引脚功能?没错,这个传感器确实可以认为是IIC接口,但是又有却别。该传感器不能按照IIC的协议编址,但是,如果IIC总线上没有挂接别的元件,传感器可以直接连到IIC总线上,但是单片机必须按照传感器的协议工作。传感器与单片机的接线如下图所示:
                                    

    2、传感器的通讯
      
     2.1、“启动传输”时序
用一组“启动传输”时序来完成数据传输的初始化。它包括:当SCK时钟高电平时DATA翻转为低电平,紧接着SCK变成低电平,随后是在SCK时钟高电平,随后是在SCK时钟高电平DATA翻转位高电平。时序如下:

                       

     2.2、复位时序
如果与SHT1x 通讯中断,可通过下列信号时序复位:当DATA 保持高电平时,触发SCK 时钟9 次或更多。时序图如下:
                    
    2.3、命令集
传感器的命令包含三个地址位(目前只支持000,这就是他只能挂接在空闲的IIC总线上的原因)和五个命令位。。SHT1x 会以下述方式表示已正确地接收到指令:在第8 个SCK 时钟的下降沿之后,将DATA 下拉为低电平(ACK 位)。在第9 个SCK 时钟的下降沿之后,释放DATA(恢复高电平)。命令集如下:
                           

     2.4、温湿度测量
发布一组测量命令(‘00000101’表示相对湿度RH,‘00000011’表示温度T)后,控制器要等待测量结束。这个过程需要大约20/80/320ms,分别对应8/12/14bit 测量。确切的时间随内部晶振速度,最多可能有-30%的变化。。SHT1x 通过下拉DATA 至低电平并进入空闲模式,表示测量的结束。控制器在再次触发SCK 时钟前,必须等待这个“数据备妥”信号来读出数据。检测数据可以先被存储,这样控制器可以继续执行其它任务在需要时再读出数据。
在收到CRC 的确认位之后,表明通讯结束。如果不使用CRC-8 校验,控制器可以在测量值LSB 后,通过保持ACK高电平终止通讯。在测量和通讯完成后,SHT1x 自动转入休眠模式。

    2.5、状态寄存器
SHT1x 的某些高级功能可以通过给状态寄存器发送指令来实现,如选择测量分辨率,电量不足提醒,使用 OTP 加载或启动加热功能等。状态寄存器度、写如下:

 

状态寄存器写

 

 

状态寄存器读


状态寄存器的具体描述如下表所示:
 



测量分辨率:默认分辨率 14bit (温度) 和 12bit (湿度) 可以被降低为 12 和 8bit. 尤其适用于要求测量速度极高或者功耗极低的应用。
电量不足检测功能:在电压不足 2.47V 发出警告。精度为±0.05 V。
加热:可通过向状态寄存器内写入命令启动传感器内部加热器.。加热器可以使传感器的温度高于周围环境 5 – 10°C12 。功耗大约为 8mA @ 5V 。
OPT加载:开启此功能,标定数据将在每次测量前被上传到寄存器。如果不开启此功能,可减少大约 10ms的测量时间。
上面的寄存器如果没有什么特殊要求或应用于特定的场合,则无需配置,选择默认就可以了。

     2.6、通讯过程
传感器的通讯过程为:发送”启动传输“时序,初始化传感器——>发送命令——>等待传感器应答,及测量结束——>接收传感器的16位数据值——>接收8为的CRC校验数据——>休眠,等待下一次传输开始。
传输的过程的测量时序可以由下图示意:


  上图中 TS = 传输开始, MSB = 高有效字节,LSB =低有效字节, LSb = 低有效位。
下面举个实际测量时的相对湿度测量时序例子。时序如下:


这张图可以知道:我们接收到的数据数值为”0000 0100 0011 0001“ = 1073 = 35.50% RH (位含温度补偿),至于怎么计算的,请接着往下看。

     2.7、信号转化  
       2.7.1 温度的转化
设T 2 1 SOt为从传感器上读出来的测量数值,我们需要用下面的公式将测量数值转换成整整的温度值。
T = d1 + d2 * SOt  (其中d1,d2的值根据实际情况选择,选项如下)
 



      2.7.2 湿度的转换
湿度的转换公式如下:。其中湿度的转化参数如下选择:根据采样的精度不同而不同。


99%以上的湿度已经接近饱和必须经过处理显示100%RH13.请注意 湿度传感器对电压无依赖性。测量值与相对湿度的转化如下图所示:


  相对湿度根据上面的参数与公式算出来之后,还需要考虑当前环境温度而进行适当的补偿。补偿的公式及其参数选择如下:



       2.7.3、露点的计算
露点的定义:露点温度指空气在此温度下能保持最多的水汽,当温度冷却到露点,空气变得饱和,就会出现雾、露或霜。
SHT1x 并不直接进行露点测量,,但露点可以通过温度和湿度读数计算得到.。由于温度和湿度在同一块集成电路上测量,SHT1x 可测量露点。 一块集成电路上测量,SHT1x 可测量露点。 下面直接给出结论性的露点计算公式了。
LogEW=(0.66077+7.5*T/(237.3+T)+(log10(RH)-2)         
露点:Dp=((0.66077-logEW)*237.3/(logEW-8.16077)         
例如:RH=10% T=25C  ->EW=23.7465->露点=-8.69℃
  RH=90% T=50C  ->EW=92.4753->露点=47.89℃

   2.8、STM32上的SHT10驱动程序
      2.8.1、SHT10.h文件的编写
这个文件主要定义些重要的参数,以及更硬件相关的一些定义。
 

  1. /*************************************************************
  2.                              \(^o^)/
  3.   Copyright (C), 2013-2020, ZheJiang University of Technology
  4.   File name  : SHT10.h
  5.   Author     : ziye334   
  6.   Version    : V1.0
  7.   Data       : 2014/3/10      
  8.   Description: Digital temperature and humidity sensor driver code
  9.   
  10. *************************************************************/
  11. #ifndef __SHT10_H__
  12. #define __SHT10_H__
  13. #include "stm32f10x.h"
  14.  
  15. enum {TEMP, HUMI};
  16.  
  17. /* GPIO相关宏定义 */
  18. #define SHT10_AHB2_CLK        RCC_APB2Periph_GPIOD
  19. #define SHT10_DATA_PIN        GPIO_Pin_0
  20. #define SHT10_SCK_PIN        GPIO_Pin_1
  21. #define SHT10_DATA_PORT        GPIOD
  22. #define SHT10_SCK_PORT        GPIOD
  23.  
  24. #define SHT10_DATA_H()        GPIO_SetBits(SHT10_DATA_PORT, SHT10_DATA_PIN)                         //拉高DATA数据线
  25. #define SHT10_DATA_L()        GPIO_ResetBits(SHT10_DATA_PORT, SHT10_DATA_PIN)                         //拉低DATA数据线
  26. #define SHT10_DATA_R()        GPIO_ReadInputDataBit(SHT10_DATA_PORT, SHT10_DATA_PIN)         //读DATA数据线
  27.  
  28. #define SHT10_SCK_H()        GPIO_SetBits(SHT10_SCK_PORT, SHT10_SCK_PIN)                                 //拉高SCK时钟线
  29. #define SHT10_SCK_L()        GPIO_ResetBits(SHT10_SCK_PORT, SHT10_SCK_PIN)                         //拉低SCK时钟线
  30.  
  31. /* 传感器相关宏定义 */
  32. #define        noACK        0
  33. #define ACK                1
  34.                                                                 //addr  command         r/w
  35. #define STATUS_REG_W        0x06        //000         0011          0          写状态寄存器
  36. #define STATUS_REG_R        0x07        //000         0011          1          读状态寄存器
  37. #define MEASURE_TEMP         0x03        //000         0001          1          测量温度
  38. #define MEASURE_HUMI         0x05        //000         0010          1          测量湿度
  39. #define SOFTRESET       0x1E        //000         1111          0          复位
  40.  
  41.  
  42. void SHT10_Config(void);
  43. void SHT10_ConReset(void);
  44. u8 SHT10_SoftReset(void);
  45. u8 SHT10_Measure(u16 *p_value, u8 *p_checksum, u8 mode);
  46. void SHT10_Calculate(u16 t, u16 rh,float *p_temperature, float *p_humidity);
  47. float SHT10_CalcuDewPoint(float t, float h);
  48.  
  49.  
  50. #endif

复制代码




2.8.2、SHT10.c驱动程序的编写
不废话了,直接贴代码:

  1. /*************************************************************
  2.                              \(^o^)/
  3.   Copyright (C), 2013-2020, ZheJiang University of Technology
  4.   File name  : SHT10.c
  5.   Author     : ziye334   
  6.   Version    : V1.0
  7.   Data       : 2014/3/10      
  8.   Description: Digital temperature and humidity sensor driver code
  9.   
  10. *************************************************************/
  11. #include "SHT10.h"
  12. #include <math.h>
  13.  
  14.  
  15. /*************************************************************
  16.   Function   :SHT10_Dly  
  17.   Description:SHT10时序需要的延时
  18.   Input      : none        
  19.   return     : none   
  20. *************************************************************/
  21. void SHT10_Dly(void)
  22. {
  23.         u16 i;
  24.         for(i = 500; i > 0; i--);
  25. }
  26.  
  27.  
  28. /*************************************************************
  29.   Function   :SHT10_Config  
  30.   Description:初始化 SHT10引脚
  31.   Input      : none        
  32.   return     : none   
  33. *************************************************************/
  34. void SHT10_Config(void)
  35. {
  36.         GPIO_InitTypeDef GPIO_InitStructure;        
  37.         //初始化SHT10引脚时钟
  38.         RCC_APB2PeriphClockCmd(SHT10_AHB2_CLK ,ENABLE);
  39.                
  40.         //PD0 DATA 推挽输出        
  41.         GPIO_InitStructure.GPIO_Pin = SHT10_DATA_PIN;
  42.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  43.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  44.         GPIO_Init(SHT10_DATA_PORT, &GPIO_InitStructure);
  45.         //PD1 SCK 推挽输出
  46.         GPIO_InitStructure.GPIO_Pin = SHT10_SCK_PIN;
  47.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
  48.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  49.         GPIO_Init(SHT10_SCK_PORT, &GPIO_InitStructure);
  50.  
  51.         SHT10_ConReset();        //复位通讯
  52. }
  53.  
  54.  
  55. /*************************************************************
  56.   Function   :SHT10_DATAOut
  57.   Description:设置DATA引脚为输出
  58.   Input      : none        
  59.   return     : none   
  60. *************************************************************/
  61. void SHT10_DATAOut(void)
  62. {
  63.         GPIO_InitTypeDef GPIO_InitStructure;
  64.         //PD0 DATA 推挽输出        
  65.         GPIO_InitStructure.GPIO_Pin = SHT10_DATA_PIN;
  66.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  67.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
  68.         GPIO_Init(SHT10_DATA_PORT, &GPIO_InitStructure);
  69. }
  70.  
  71.  
  72. /*************************************************************
  73.   Function   :SHT10_DATAIn  
  74.   Description:设置DATA引脚为输入
  75.   Input      : none        
  76.   return     : none   
  77. *************************************************************/
  78. void SHT10_DATAIn(void)
  79. {
  80.         GPIO_InitTypeDef GPIO_InitStructure;
  81.         //PD0 DATA 浮动输入        
  82.         GPIO_InitStructure.GPIO_Pin = SHT10_DATA_PIN;
  83.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  84.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  85.         GPIO_Init(SHT10_DATA_PORT, &GPIO_InitStructure);
  86. }
  87.  
  88.  
  89. /*************************************************************
  90.   Function   :SHT10_WriteByte  
  91.   Description:写1字节
  92.   Input      : value:要写入的字节        
  93.   return     : err: 0-正确  1-错误   
  94. *************************************************************/
  95. u8 SHT10_WriteByte(u8 value)
  96. {
  97.         u8 i, err = 0;
  98.         
  99.         SHT10_DATAOut();                          //设置DATA数据线为输出
  100.  
  101.         for(i = 0x80; i > 0; i /= 2)  //写1个字节
  102.         {
  103.                 if(i & value)
  104.                         SHT10_DATA_H();
  105.                 else
  106.                         SHT10_DATA_L();
  107.                 SHT10_Dly();
  108.                 SHT10_SCK_H();
  109.                 SHT10_Dly();
  110.                 SHT10_SCK_L();
  111.                 SHT10_Dly();
  112.         }
  113.         SHT10_DATAIn();                                  //设置DATA数据线为输入,释放DATA线
  114.         SHT10_SCK_H();
  115.         err = SHT10_DATA_R();                  //读取SHT10的应答位
  116.         SHT10_SCK_L();
  117.  
  118.         return err;
  119. }
  120.  
  121. /*************************************************************
  122.   Function   :SHT10_ReadByte  
  123.   Description:读1字节数据
  124.   Input      : Ack: 0-不应答  1-应答        
  125.   return     : err: 0-正确 1-错误   
  126. *************************************************************/
  127. u8 SHT10_ReadByte(u8 Ack)
  128. {
  129.         u8 i, val = 0;
  130.  
  131.         SHT10_DATAIn();                                  //设置DATA数据线为输入
  132.         for(i = 0x80; i > 0; i /= 2)  //读取1字节的数据
  133.         {
  134.                 SHT10_Dly();
  135.                 SHT10_SCK_H();
  136.                 SHT10_Dly();
  137.                 if(SHT10_DATA_R())
  138.                         val = (val | i);
  139.                 SHT10_SCK_L();
  140.         }
  141.         SHT10_DATAOut();                          //设置DATA数据线为输出
  142.         if(Ack)
  143.                 SHT10_DATA_L();                          //应答,则会接下去读接下去的数据(校验数据)
  144.         else
  145.                 SHT10_DATA_H();                          //不应答,数据至此结束
  146.         SHT10_Dly();
  147.         SHT10_SCK_H();
  148.         SHT10_Dly();
  149.         SHT10_SCK_L();
  150.         SHT10_Dly();
  151.  
  152.         return val;                                          //返回读到的值
  153. }
  154.  
  155.  
  156. /*************************************************************
  157.   Function   :SHT10_TransStart  
  158.   Description:开始传输信号,时序如下:
  159.                      _____         ________
  160.                DATA:      |_______|
  161.                          ___     ___
  162.                SCK : ___|   |___|   |______        
  163.   Input      : none        
  164.   return     : none   
  165. *************************************************************/
  166. void SHT10_TransStart(void)
  167. {
  168.         SHT10_DATAOut();                          //设置DATA数据线为输出
  169.  
  170.         SHT10_DATA_H();
  171.         SHT10_SCK_L();
  172.         SHT10_Dly();
  173.         SHT10_SCK_H();
  174.         SHT10_Dly();
  175.         SHT10_DATA_L();
  176.         SHT10_Dly();
  177.         SHT10_SCK_L();
  178.         SHT10_Dly();
  179.         SHT10_SCK_H();
  180.         SHT10_Dly();
  181.         SHT10_DATA_H();
  182.         SHT10_Dly();
  183.         SHT10_SCK_L();
  184.  
  185. }
  186.  
  187.  
  188. /*************************************************************
  189.   Function   :SHT10_ConReset  
  190.   Description:通讯复位,时序如下:
  191.                      _____________________________________________________         ________
  192.                DATA:                                                      |_______|
  193.                         _    _    _    _    _    _    _    _    _        ___     ___
  194.                SCK : __| |__| |__| |__| |__| |__| |__| |__| |__| |______|   |___|   |______
  195.   Input      : none        
  196.   return     : none   
  197. *************************************************************/
  198. void SHT10_ConReset(void)
  199. {
  200.         u8 i;
  201.  
  202.         SHT10_DATAOut();
  203.  
  204.         SHT10_DATA_H();
  205.         SHT10_SCK_L();
  206.  
  207.         for(i = 0; i < 9; i++)                  //触发SCK时钟9c次
  208.         {
  209.                 SHT10_SCK_H();
  210.                 SHT10_Dly();
  211.                 SHT10_SCK_L();
  212.                 SHT10_Dly();
  213.         }
  214.         SHT10_TransStart();                          //启动传输
  215. }
  216.  
  217.  
  218.  
  219. /*************************************************************
  220.   Function   :SHT10_SoftReset  
  221.   Description:软复位
  222.   Input      : none        
  223.   return     : err: 0-正确  1-错误   
  224. *************************************************************/
  225. u8 SHT10_SoftReset(void)
  226. {
  227.         u8 err = 0;
  228.  
  229.         SHT10_ConReset();                              //通讯复位
  230.         err += SHT10_WriteByte(SOFTRESET);//写RESET复位命令
  231.  
  232.         return err;
  233. }
  234.  
  235.  
  236. /*************************************************************
  237.   Function   :SHT10_ReadStatusReg  
  238.   Description:读状态寄存器
  239.   Input      : p_value-读到的数据;p_checksun-读到的校验数据      
  240.   return     : err: 0-正确  0-错误   
  241. *************************************************************/
  242. u8 SHT10_ReadStatusReg(u8 *p_value, u8 *p_checksum)
  243. {
  244.         u8 err = 0;
  245.  
  246.         SHT10_TransStart();                                        //开始传输
  247.         err = SHT10_WriteByte(STATUS_REG_R);//写STATUS_REG_R读取状态寄存器命令
  248.         *p_value = SHT10_ReadByte(ACK);                //读取状态数据
  249.         *p_checksum = SHT10_ReadByte(noACK);//读取检验和数据
  250.         
  251.         return err;
  252. }
  253.  
  254.  
  255.  
  256. /*************************************************************
  257.   Function   :SHT10_WriteStatusReg  
  258.   Description:写状态寄存器
  259.   Input      : p_value-要写入的数据值      
  260.   return     : err: 0-正确  1-错误   
  261. *************************************************************/
  262. u8 SHT10_WriteStatusReg(u8 *p_value)
  263. {
  264.         u8 err = 0;
  265.  
  266.         SHT10_TransStart();                                         //开始传输
  267.         err += SHT10_WriteByte(STATUS_REG_W);//写STATUS_REG_W写状态寄存器命令
  268.         err += SHT10_WriteByte(*p_value);         //写入配置值
  269.  
  270.         return err;
  271. }
  272.  
  273.  
  274.  
  275. /*************************************************************
  276.   Function   :SHT10_Measure  
  277.   Description:从温湿度传感器读取温湿度
  278.   Input      : p_value-读到的值;p_checksum-读到的校验数        
  279.   return     : err: 0-正确 1—错误   
  280. *************************************************************/
  281. u8 SHT10_Measure(u16 *p_value, u8 *p_checksum, u8 mode)
  282. {
  283.         u8 err = 0;
  284.         u32 i;
  285.         u8 value_H = 0;
  286.         u8 value_L = 0;
  287.  
  288.         SHT10_TransStart();                                                 //开始传输
  289.         switch(mode)                                                         
  290.         {
  291.         case TEMP:                                                                 //测量温度
  292.                 err += SHT10_WriteByte(MEASURE_TEMP);//写MEASURE_TEMP测量温度命令
  293.                 break;
  294.         case HUMI:
  295.                 err += SHT10_WriteByte(MEASURE_HUMI);//写MEASURE_HUMI测量湿度命令
  296.                 break;
  297.         default:
  298.                 break;
  299.         }
  300.         SHT10_DATAIn();
  301.         for(i = 0; i < 72000000; i++)                             //等待DATA信号被拉低
  302.         {
  303.                 if(SHT10_DATA_R() == 0) break;             //检测到DATA被拉低了,跳出循环
  304.         }
  305.         if(SHT10_DATA_R() == 1)                                //如果等待超时了
  306.                 err += 1;
  307.         value_H = SHT10_ReadByte(ACK);
  308.         value_L = SHT10_ReadByte(ACK);
  309.         *p_checksum = SHT10_ReadByte(noACK);           //读取校验数据
  310.         *p_value = (value_H << 8) | value_L;
  311.         return err;
  312. }
  313.  
  314.  
  315. /*************************************************************
  316.   Function   :SHT10_Calculate  
  317.   Description:计算温湿度的值
  318.   Input      : Temp-从传感器读出的温度值;Humi-从传感器读出的湿度值
  319.                p_humidity-计算出的实际的湿度值;p_temperature-计算出的实际温度值        
  320.   return     : none   
  321. *************************************************************/
  322. void SHT10_Calculate(u16 t, u16 rh, float *p_temperature, float *p_humidity)
  323. {
  324.         const float d1 = -39.7;
  325.         const float d2 = +0.01;
  326.         const float C1 = -2.0468;
  327.         const float        C2 = +0.0367;
  328.         const float C3 = -0.0000015955;        
  329.         const float T1 = +0.01;
  330.         const float T2 = +0.00008;
  331.  
  332.         float RH_Lin;                                                                                  //RH线性值        
  333.         float RH_Ture;                                                                                 //RH真实值
  334.         float temp_C;
  335.  
  336.         temp_C = d1 + d2 * t;                                                              //计算温度值        
  337.         RH_Lin = C1 + C2 * rh + C3 * rh * rh;                            //计算湿度值
  338.         RH_Ture = (temp_C -25) * (T1 + T2 * rh) + RH_Lin;        //湿度的温度补偿,计算实际的湿度值
  339.  
  340.         if(RH_Ture > 100)                                                                        //设置湿度值上限
  341.                 RH_Ture        = 100;
  342.         if(RH_Ture < 0.1)
  343.                 RH_Ture = 0.1;                                                                        //设置湿度值下限
  344.  
  345.         *p_humidity = RH_Ture;
  346.         *p_temperature = temp_C;
  347.  
  348. }
  349.  
  350.  
  351. /*************************************************************
  352.   Function   :SHT10_CalcuDewPoint  
  353.   Description:计算露点
  354.   Input      : h-实际的湿度;t-实际的温度        
  355.   return     : dew_point-露点   
  356. *************************************************************/
  357. float SHT10_CalcuDewPoint(float t, float h)
  358. {
  359.         float logEx, dew_point;
  360.  
  361.         logEx = 0.66077 + 7.5 * t / (237.3 + t) + (log10(h) - 2);
  362.         dew_point = ((0.66077 - logEx) * 237.3) / (logEx - 8.16077);
  363.  
  364.         return dew_point;
  365. }
  366.  
  367.  
  368. 2.8.3、main函数的编写:
  369. int main(void)
  370. {  
  371.         u16 humi_val, temp_val;
  372.         u8 err = 0, checksum = 0;
  373.         float humi_val_real = 0.0;
  374.         float temp_val_real = 0.0;
  375.         float dew_point = 0.0;
  376.         
  377.         BSP_Init();
  378.         printf("\nSHT10温室度测试程序!!!\n");
  379.         SHT10_Config();
  380.         while(1)
  381.         {
  382.                 err += SHT10_Measure(&temp_val, &checksum, TEMP);                  //获取温度测量值
  383.                 err += SHT10_Measure(&humi_val, &checksum, HUMI);                  //获取湿度测量值
  384.                 if(err != 0)
  385.                         SHT10_ConReset();
  386.                 else
  387.                 {
  388.                         SHT10_Calculate(temp_val, humi_val, &temp_val_real, &humi_val_real); //计算实际的温湿度值
  389.                         dew_point = SHT10_CalcuDewPoint(temp_val_real, humi_val_real);                 //计算露点温度
  390.                 }
  391.                 printf("当前环境温度为:%2.1f℃,湿度为:%2.1f%%,露点温度为%2.1f℃\r\n", temp_val_real, humi_val_real, dew_point);
  392.                 LED1_Toggle();
  393.                 Delay_ms(1000);
  394.         }
  395. }

复制代码

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值