亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

溫濕度傳感器

mushang / 2676人閱讀

摘要:由于溫濕度傳感器對時間要求比較高,所以延時函數(shù),我這邊采用的是大佬正點原子編寫的。根據(jù)時序圖可知應(yīng)答信號為低電平,高電平。后續(xù)會逐步分塊更新,并會在最后一篇文章上傳源代碼。若是該文章對你有作用或是覺得文章寫得還行,幫忙點點贊,三連

溫濕度傳感器

硬件使用

  • STM32F103 RCT6
  • DHT11 (溫濕度傳感器)

軟件使用

  • keil5 MDK環(huán)境
  • 串口調(diào)試助手

實現(xiàn)說明

? 根據(jù) DHT11 溫濕度傳感器手冊

1. 初始化 DHT11

 復(fù)位 DHT11 ,根據(jù)時序圖寫出設(shè)置 ``` void dht_Rst(void) { 	dht_output();             //設(shè)置 dht11 為普通推挽輸出 	dht_low_input();		  //設(shè)置 dht11 為低電平 	delay_ms(20);			  //延時20ms  時間根據(jù)時序圖應(yīng)該定義為18ms到30ms之間 	dht_high_input();		  //設(shè)置 dht11 為高電平 	delay_us(30);			  //延時30us,少量延時,不易出錯	 } ``` **==注意:==** 部分代碼為博主自己編寫的函數(shù),都很==簡單!== 例如設(shè)置引腳模式,設(shè)置引腳高低電平等。由于溫濕度傳感器 DHT11 對時間要求比較高,**所以延時函數(shù),我這邊采用的是==大佬正點原子編寫的==** 。

根據(jù)時序圖可知

應(yīng)答信號為:低電平 83 us,高電平 87 us。

所以代碼編寫為:

 ``` u8 dht_Check(void) { 	u8 k = 0;							//設(shè)置 參數(shù) k,防止程序卡死 	dht_input();						//定義 dht11 為輸入 	while(dht_read_input && k < 100)  	//判斷是否有低電平輸入(dht11回應(yīng)信號),或是 超出 83 us 	{ 		k++;							//延時等待 		delay_us(1); 	} 	if(k >= 100 )return 1;				//超時退出 	else k = 0; 	while(!dht_read_input && k<100 )		//同理,87us 高電平退出while循環(huán) 	{ 		k++; 		delay_us(100);					//延時等待 	} 	if(k>=100)return 1;					//超時退出 	return 0;							//成功監(jiān)測應(yīng)答信號,返回0 } ```

所以 DHT11 初始化代碼為:

 u8 dht_Init(void) { 	dht_output();				 	dht_Rst(); 	return dht_Check(); }

2. DHT11 讀取數(shù)據(jù)信息

由 DHT11手冊 可以得到,DHT11 會輸出40位數(shù)據(jù)

每位數(shù)據(jù) 格式如下圖所示:

所以每位數(shù)據(jù)獲取代碼為:

 u8 dht_ReadBit(void) { 	u8 k = 0;							//定義 參數(shù)k ,防止超時 	while(dht_read_input && k<100)		//一檢測出低電平跳出循環(huán) 或 超時跳出 	{ 		k++; 		delay_us(1);					//延時等待 	} 	k = 0; 	while(!dht_read_input && k<100)		//一檢測出高電平跳出循環(huán) 或 超時跳出 	{ 		k++;	 		delay_us(1);					//延時等待 	} 	delay_us(40);						//這時候為剛檢測出高電平,由于數(shù)據(jù)格式 數(shù)據(jù)為 和數(shù)據(jù)位 只在高電平的時間不同,所以延時 40us ,如果還為高電平,則為 數(shù)據(jù)位 1 	if(dht_read_input) return 1; 	else return 0; }

由于手冊下關(guān)于數(shù)據(jù)位描述為下圖:

可知:應(yīng)該把代碼分為8位一組,并且先測出的為 高位
代碼為:

u8 dht_ReadByte(void){	u8 i,dat;	dat = 0;					for(i=0;i<8;i++)				{		dat<<=1;					//數(shù)據(jù)左移 不夠補0		dat|=dht_ReadBit();			// | 字符	與0相或,結(jié)果為 后面的那個,即只取決于dht_ReadBit() 得到的數(shù)據(jù)	}	return dat;						//返回數(shù)據(jù)}

3. DHT11 具體讀取數(shù)據(jù)代碼

u8 dht_ReadData(u8 *t,u8 *h){	u8 temp[5];								//存放40位數(shù)據(jù),每8位一組,總共5組	u8 i;	dht_Rst();								//復(fù)位 DHT11,防止傳感器處在其他狀態(tài)	if(dht_Check() == 0)					//判斷是否應(yīng)答成功	{		for(i=0;i<5;i++)		{			temp[i] = dht_ReadByte();		//取出數(shù)值		}		if(temp[0]+temp[1]+temp[2]+temp[3] == temp[4])		//判斷檢驗和		{			*h = temp[0];									//傳出參數(shù),只傳整數(shù)值,0和2為整數(shù)值,1和3位小數(shù)值			*t = temp[2];		}	}else return 1;	return 0;}

4.通過串口發(fā)送到串口調(diào)試助手

? ?(1)初始化串口

GPIO_InitTypeDef GPIO_InitStrue;	USART_InitTypeDef USART_InitStrue;	NVIC_InitTypeDef NVIC_InitStrue;		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //使能 USART1		GPIO_InitStrue.GPIO_Mode = GPIO_Mode_AF_PP;	//復(fù)用推挽輸出								//USART1_Tx  USB Rx  STM32中為 Tx,需要接到 USB轉(zhuǎn)TTL串口中的 Rx	GPIO_InitStrue.GPIO_Pin = GPIO_Pin_9;	GPIO_InitStrue.GPIO_Speed = GPIO_Speed_10MHz;		GPIO_Init(GPIOA,&GPIO_InitStrue);		//USART1_Rx  USB Tx	GPIO_InitStrue.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入						GPIO_InitStrue.GPIO_Pin = GPIO_Pin_10;	GPIO_InitStrue.GPIO_Speed = GPIO_Speed_10MHz;		GPIO_Init(GPIOA,&GPIO_InitStrue);		USART_InitStrue.USART_BaudRate = 115200;	USART_InitStrue.USART_HardwareFlowControl = USART_HardwareFlowControl_None;	USART_InitStrue.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;			USART_InitStrue.USART_Parity = USART_Parity_No; 	USART_InitStrue.USART_StopBits = USART_StopBits_1; 	USART_InitStrue.USART_WordLength = USART_WordLength_8b;		USART_Init(USART1,&USART_InitStrue);		USART_Cmd(USART1,ENABLE);															USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); 		NVIC_InitStrue.NVIC_IRQChannel = USART1_IRQn;//設(shè)置中斷	NVIC_InitStrue.NVIC_IRQChannelCmd = ENABLE;	   	NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority = 1; //搶占優(yōu)先級1	NVIC_InitStrue.NVIC_IRQChannelSubPriority = 1;			//子優(yōu)先級1		NVIC_Init(&NVIC_InitStrue);

?(2)中斷發(fā)送數(shù)據(jù)

void USART1_IRQHandler(void)                {			  u8 s;	  while(*s!="/0")	{ 		while(USART_GetFlagStatus(USART1,USART_FLAG_TC )==RESET);			USART_SendData(USART1,*s);		s++;	}} 

最后

?第一次嘗試編寫博客,若是有什么建議,歡迎批評指出。

?后續(xù)會逐步分塊更新,并會在最后一篇文章上傳源代碼。

?若是該文章對你有作用或是覺得文章寫得還行,幫忙點點贊,三連!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/121370.html

相關(guān)文章

  • 4G DTU+MODBUS溫濕傳感+MQTT連接電信云

    摘要:溫濕度傳感器的對應(yīng)轉(zhuǎn)的將溫濕度傳感器接入中,根據(jù)下圖提示,完成和溫濕度傳感器的連接。 4G DTU+MODBUS溫濕度傳感器+MQTT連接電信云 一、材料準(zhǔn)備 二、...

    jsyzchen 評論0 收藏0
  • [ Ruff 開發(fā)套件 ] Lesson 4 - LCD 溫濕

    摘要:向項目中添加名為的溫濕度傳感器模塊,選擇,驅(qū)動版本選擇最新版。使用溫濕度傳感器模塊的函數(shù)獲取當(dāng)前濕度溫濕度模塊的函數(shù)用法如下設(shè)置光標(biāo)到第二行第二個字符處打印和當(dāng)前濕度使用函數(shù)每秒鐘重新檢測和顯示當(dāng)前濕度。 showImg(https://segmentfault.com/img/bVC3uE?w=2552&h=1418); 誰將登場 LCD 模塊 溫濕度傳感器 你將學(xué)會 ...

    since1986 評論0 收藏0
  • 02_基于西門子CM1241的ModbusRTU串口通訊實現(xiàn)

    摘要:但是我對此協(xié)議并不熟悉,本文便以測試為目的基于西門子模塊主站,采用通訊協(xié)議與溫濕度傳感器從站通訊獲取數(shù)據(jù)。 文章目錄 前言 一、前期準(zhǔn)備 二、編寫通訊程序 1.通訊測試工具和軟件 2.編寫TIA Portal程序 三、基于OPC UA的通訊傳輸 總結(jié) 前言 最近作者在...

    不知名網(wǎng)友 評論0 收藏0
  • (超簡單)ESP8266深度睡眠模式下遠(yuǎn)程采集溫濕信息

    摘要:超簡單深度睡眠模式下遠(yuǎn)程采集溫濕度信息項目背景相關(guān)技術(shù)深度睡眠模式溫濕度采集數(shù)據(jù)收發(fā)前后端實現(xiàn)后端前端項目背景自己用收納箱做了一個用于存放打印耗材的干燥箱,想用閑置的開發(fā)板和溫濕度傳感器做一個遠(yuǎn)程溫濕度監(jiān)測的小項目。 ...

    pkhope 評論0 收藏0
  • 基于STM32的OLED屏顯示AHT20采集的溫濕數(shù)據(jù)

    摘要:三小結(jié)本次實驗在實現(xiàn)了溫濕度數(shù)據(jù)采集并通過串口顯示和利用屏數(shù)據(jù)顯示代碼的基礎(chǔ)上,完成屏顯示采集的溫濕度數(shù)據(jù)也并不復(fù)雜,其中,溫濕度數(shù)據(jù)采集的過程使用的是模擬,屏的數(shù)據(jù)顯示采用的是。 ...

    vincent_xyb 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<