4)头文件
作用:使用打印函数sprintf和strlen。
位置:位于/* USER CODE BEGIN Includes */沙箱内。
/* USER CODE BEGIN Includes */
#include <stdio.h> //sprintf函数头文件
#include <string.h> //strlen函数头文件
/* USER CODE END Includes */
5)函数声明
作用:声明函数。
位置:位于/* USER CODE BEGIN PM */沙箱内。 (注:根据封装的思想这些函数应该自建dht11.h文件存放,这里为了方便直接写在主函数里,方便演示,读者可自行操作,并且自定义一些宏定义,方便对代码的理解)
/* USER CODE BEGIN PM */
void Delay_us(uint16_t delay); //通过TIM3定时器微秒级延时
void Dht11_DATA_OUT(void); //设置数据交互口为输出
void Dht11_DATA_IN(void); //设置数据交互口为输入
void DHT11_Rst(void); //复位DHT11
uint8_t DHT11_Check(void); //DHT11状态反馈
uint8_t DHT11_Read_Bit(void); //读DHT11一位数据
uint8_t DHT11_Read_Byte(void); //读DHT11一字节数据
uint8_t DHT11_Read_Data(uint8_t* humi,uint8_t* temp); //DHT11数据显示
/* USER CODE END PM */
6)主函数变量声明
作用:声明主函数内变量。
位置:位于/* USER CODE BEGIN 1 */沙箱内。
/* USER CODE BEGIN 1 */
uint8_t temperature = 1; //温度值
uint8_t humidity = 1; //湿度值
char* CntState = "No Connect!\r\n"; //连接状态
uint8_t aTxBuffer[50]; //打印信息
/* USER CODE END 1 */
7)DHT11预处理
作用:复位DHT11并且检测DHT11是否存在。
位置:位于/* USER CODE BEGIN 2 */沙箱内。
/* USER CODE BEGIN 2 */
DHT11_Rst(); //复位DHT11
while(DHT11_Check()) //检测DHT11连接
{
HAL_UART_Transmit(&huart1, CntState, strlen(CntState), 200);
HAL_Delay(500);
}
CntState = "Success!\r\n";
HAL_UART_Transmit(&huart1, CntState, strlen(CntState), 200);
/* USER CODE END 2 */
8)主函数
作用:这里用地址的概念拿出函数中计算的值并且直接打印。
位置:位于/* USER CODE END WHILE */沙箱内。
/* USER CODE BEGIN WHILE */
while (1)
{
DHT11_Read_Data(&humidity,&temperature); //检测出温湿度的值
sprintf(aTxBuffer,"temperature : %d ^C "
"humidity : %d %% \r\n", temperature,humidity); //打印温湿度的值
HAL_UART_Transmit(&huart1,aTxBuffer,strlen((const char*)aTxBuffer),200);
HAL_Delay(500);
/* USER CODE END WHILE */