成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

項(xiàng)目四:串口打印超聲波測(cè)距

shusen / 1763人閱讀

摘要:通信引腳與連接方式通信數(shù)據(jù)流動(dòng)過(guò)程需要配置的串口參數(shù)與串口相關(guān)的的庫(kù)函數(shù)庫(kù)函數(shù)初始化串口步驟代碼二超聲波基礎(chǔ)知識(shí)前言是利用超聲波特性檢測(cè)距離的傳感器。其帶有兩個(gè)超聲波探頭,分別用作發(fā)射和接收超聲波。

注意!?。?!一定要??RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

打開(kāi)復(fù)用功能時(shí)鐘,雖然沒(méi)用復(fù)用功能。

一、串口通信基礎(chǔ)知識(shí)

1、STM32的串口通信接口 。

? ? ? ? UART:通用異步收發(fā)器 。

? ? ? ?USART:通用同步異步收發(fā)器 。

? ? ? ?大容量STM32F10x系列芯片,包含3個(gè)USART和2個(gè)UART。

2、通信引腳RXD與TXD連接方式

3、通信數(shù)據(jù)流動(dòng)過(guò)程?

?

4、需要配置的串口參數(shù)?

?

5、與串口相關(guān)的的庫(kù)函數(shù)?

?

?6、庫(kù)函數(shù)初始化串口步驟

?6、代碼

void uart_init1(u32 bound)	{    //GPIO define    GPIO_InitTypeDef GPIO_InitStructure;	  USART_InitTypeDef USART_InitStructure;	  NVIC_InitTypeDef NVIC_InitStructure;	 	  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);	//open USART1,GPIOA clk 	  USART_DeInit(USART1);  //release uart1	 //USART1_TX   PA.9    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//output mode    GPIO_Init(GPIOA, &GPIO_InitStructure); // Set PA9       //USART1_RX	  PA.10    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;    GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;//    GPIO_Init(GPIOA, &GPIO_InitStructure);  //Set PA10   //Usart1 NVIC  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=4 ;//	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;		//	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//	NVIC_Init(&NVIC_InitStructure);	//     //USART1	USART_InitStructure.USART_BaudRate = bound;//9600;	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//	USART_InitStructure.USART_StopBits = USART_StopBits_1;//	USART_InitStructure.USART_Parity = USART_Parity_No;//	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//    USART_Init(USART1, &USART_InitStructure); //    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//    USART_Cmd(USART1, ENABLE);                    //}

二、超聲波基礎(chǔ)知識(shí)

前言:SR04是利用超聲波特性檢測(cè)距離的傳感器。其帶有兩個(gè)超聲波探頭,分別用作發(fā)射和接收超聲波。其測(cè)量的范圍是3-500cm。

1、基本原理

(1)先使用STM32的數(shù)字引腳13向TRIG腳輸入至少10us的高電平信號(hào),觸發(fā)模塊的測(cè)距功能。

(2)測(cè)距功能觸發(fā)后,模塊將自動(dòng)發(fā)出 8 個(gè) 40kHz 的超聲波脈沖,并自動(dòng)檢測(cè)是否有信號(hào)返回,這一步由模塊內(nèi)部自動(dòng)完成。

(3)一旦檢測(cè)到有回波信號(hào)則ECHO引腳會(huì)輸出高電平。高電平持續(xù)的時(shí)間就是超聲波從發(fā)射到返回的時(shí)間。此時(shí)可以使用定時(shí)器獲取高電平的時(shí)間, 并計(jì)算出距被測(cè)物體的實(shí)際距離。公式: 距離=高電平時(shí)間*聲速(340M/S)/2。

2、電路圖

?

?3、庫(kù)函數(shù)編寫(xiě)流程

(1)初始化超聲波引腳,打開(kāi)相應(yīng)管腳時(shí)鐘。

(2)由于需要運(yùn)用定時(shí)器測(cè)量返回的高電平的時(shí)間,所以需要對(duì)定時(shí)器(周期為1ms)進(jìn)行初始化。

(3)由公式: 距離=高電平時(shí)間*聲速(340M/S)/2,所以還需要編寫(xiě)一個(gè)函數(shù)把測(cè)量的時(shí)間轉(zhuǎn)換為距離,測(cè)量五次取平均值。

三、總體編程流程

1、串口初始化(有中斷),打開(kāi)串口。

2、超聲波管腳初始化。

3、定時(shí)器初始化(有中斷)。

4、測(cè)距函數(shù)編寫(xiě)

4、主函數(shù)輸出

四、代碼(注釋詳細(xì))

main.c

#include "motor.h"#include "stdio.h"#include "delay.h"#include "stm32f10x.h"#include "followline.h"#include "sys.h"#include "ultrasonic.h"u8 UART3_data,UART1_data;u8 UART3_rcv[20],UART3_rcv_count;u8 UART1_rcv[50],UART1_rcv_count,Uart1_finish;int main(void){	float length;	delay_init();//延遲初始化	uart_init1(9600);//串口初始化	ultrasonic_gpio_init();//超聲波管腳初始化	ultrasonic_time2_init();//超聲波定時(shí)器初始化		while(1)	{		    printf("start  work!!/n");		length=transfer_ditigal();		printf("distance:%fcm/n",length);		delay_s(1);			}}

ultrasonic.c?

#include "ultrasonic.h"#include "stm32f10x_tim.h"#include "stm32f10x_rcc.h"int overcount;//計(jì)數(shù)變量/************************超聲波管腳初始化***************************************/	void ultrasonic_gpio_init(void){	//超聲波發(fā)送管腳		//定義GPIO_A初始化的結(jié)構(gòu)體	GPIO_InitTypeDef GPIO_InitStruct_A;	 //打開(kāi)PA管腳的時(shí)鐘	 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);   RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);	 //將管腳PB4特殊功能關(guān)掉	 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);  //	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);	 //配置PA15的參數(shù)	GPIO_InitStruct_A.GPIO_Mode=GPIO_Mode_Out_PP;	GPIO_InitStruct_A.GPIO_Pin=GPIO_Pin_15;	GPIO_InitStruct_A.GPIO_Speed=GPIO_Speed_50MHz;	 //初始化PA15管腳	GPIO_Init(GPIOA, &GPIO_InitStruct_A);	 //置PA15低位	GPIO_ResetBits(GPIOA, GPIO_Pin_15);			//超聲波接收管腳		//配置PA12的參數(shù)  GPIO_InitStruct_A.GPIO_Mode=GPIO_Mode_IPD;	GPIO_InitStruct_A.GPIO_Pin=GPIO_Pin_12;	//初始化PA12管腳	GPIO_Init(GPIOA, &GPIO_InitStruct_A);	}/************************************************************************************************************//********************************超聲使用定時(shí)器2初始化*******************************************************/void ultrasonic_time2_init(void){	//定義TIME_2初始化的結(jié)構(gòu)體	TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStruct_TIME2;	//打開(kāi)定時(shí)器2的時(shí)鐘	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);	//配置TIME_2的參數(shù)	TIM_TimeBaseInitStruct_TIME2.TIM_ClockDivision=TIM_CKD_DIV1;	TIM_TimeBaseInitStruct_TIME2.TIM_CounterMode=TIM_CounterMode_Up;	TIM_TimeBaseInitStruct_TIME2.TIM_Period=999;	TIM_TimeBaseInitStruct_TIME2.TIM_Prescaler=71;	//初始化TIME_2	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct_TIME2);  //定義NVIC初始化的結(jié)構(gòu)體	NVIC_InitTypeDef NVIC_InitStruct;	//中斷分組	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);	//配置NVIC的參數(shù)	NVIC_InitStruct.NVIC_IRQChannel=TIM2_IRQn;	NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2;	NVIC_InitStruct.NVIC_IRQChannelSubPriority=0;	//中斷NVIC的初始化	NVIC_Init(&NVIC_InitStruct);	//清除定時(shí)器TIME_2更新中斷標(biāo)志	TIM_ClearITPendingBit(TIM2, TIM_IT_Update);	//開(kāi)啟定時(shí)器TIME_2的中斷	TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);	 //使能定時(shí)器TIME_2  //TIM_Cmd(TIM2,ENABLE );	}/*************************************************************************************************************************//*********************************************距離測(cè)量函數(shù)*********************************************************************/float transfer_ditigal(void){    float length =0,sum=0;  u16 time;  unsigned int i=0;/*測(cè)則5次數(shù)據(jù)計(jì)算—次平均值*/	while(i!=5)	{    GPIO_SetBits(GPIOA,GPIO_Pin_15);//拉高信號(hào),作為觸發(fā)信號(hào)		delay_us(20);//高電平信號(hào)超過(guò)10us    GPIO_ResetBits(GPIOA,GPIO_Pin_15);/*等待回響信號(hào)*/   while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12) ==RESET);		TIM_Cmd(TIM2,ENABLE);//回響信號(hào)到來(lái),開(kāi)啟定時(shí)器計(jì)數(shù)    i+=1; //每收到一次回響信號(hào)+1收到5次就計(jì)算均值    while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12)== SET);//回響信號(hào)消失		TIM_Cmd(TIM2,DISABLE) ;//關(guān)閉定時(shí)器    time=TIM_GetCounter(TIM2);//獲取計(jì)TIw2數(shù)寄存器中的計(jì)數(shù)值,一邊計(jì)算回響信號(hào)時(shí)間    length=(time+overcount*1000)/58.0;//通過(guò)回響信號(hào)計(jì)算距離     sum=length+sum;    TIM2->CNT = 0; //將tiem2計(jì)數(shù)寄存器的計(jì)數(shù)值清零		overcount = 0;//中斷溢出次數(shù)清零     delay_ms(1);	}    length =sum/5;	  return length;//距離作為函數(shù)返回值}/**********************************************************************************************************************/void TIM2_IRQHandler()   //TIM2中斷{        if (TIM_GetITStatus(TIM2, TIM_IT_Update))//檢查T(mén)IM2更新中斷發(fā)生與否        {						 TIM_ClearITPendingBit(TIM2, TIM_IT_Update);//清除TIM2更新中斷標(biāo)志 					   overcount++;				}}

ultrasonic.h

#ifndef __ULTRASONIC_H#define __ULTRASONIC_H#include "stm32f10x_tim.h"#include "stm32f10x_rcc.h"#include "delay.h"#include "stm32f10x.h"#include "stm32f10x_gpio.h"float transfer_ditigal(void);//距離展示void ultrasonic_gpio_init(void);//超聲波管腳初始化void ultrasonic_time2_init(void);//超聲波定時(shí)器初始化#endif

usart.c

#include "sys.h"#include "ultrasonic.h"#include "stdio.h"#include "sys.h"#include "usart.h"extern u8 UART3_data,UART1_data;extern u8 UART3_rcv[20],UART3_rcv_count;extern u8 UART1_rcv[50],UART1_rcv_count,Uart1_finish;//uart1 //bound:9600//加入以下代碼,支持printf函數(shù),而不需要選擇use MicroLIB	  #if 1#pragma import(__use_no_semihosting)             //標(biāo)準(zhǔn)庫(kù)需要的支持函數(shù)                 struct __FILE { 	int handle; }; FILE __stdout;       //定義_sys_exit()以避免使用半主機(jī)模式    void _sys_exit (int  x) { 	x = x; } //重定義fputc函數(shù) int fputc(int ch, FILE *f){      	  while((USART1->SR&0X40)==0)			;                    //循環(huán)發(fā)送,直到發(fā)送完畢       USART1->DR = (u8) ch;      	  return ch;}#endif void uart_init1(u32 bound)	{    //GPIO define    GPIO_InitTypeDef GPIO_InitStructure;	  USART_InitTypeDef USART_InitStructure;	  NVIC_InitTypeDef NVIC_InitStructure;	 	  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);	//open USART1,GPIOA clk 	  USART_DeInit(USART1);  //release uart1	 //USART1_TX   PA.9    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//output mode    GPIO_Init(GPIOA, &GPIO_InitStructure); // Set PA9       //USART1_RX	  PA.10    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;    GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;//    GPIO_Init(GPIOA, &GPIO_InitStructure);  //Set PA10   //Usart1 NVIC  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=4 ;//	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;		//	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//	NVIC_Init(&NVIC_InitStructure);	//     //USART1	USART_InitStructure.USART_BaudRate = bound;//9600;	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//	USART_InitStructure.USART_StopBits = USART_StopBits_1;//	USART_InitStructure.USART_Parity = USART_Parity_No;//	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//    USART_Init(USART1, &USART_InitStructure); //    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//    USART_Cmd(USART1, ENABLE);                    //}//uart3 //bound:9600void uart_init3(u32 bound){    //GPIO    GPIO_InitTypeDef GPIO_InitStructure;	USART_InitTypeDef USART_InitStructure;	NVIC_InitTypeDef NVIC_InitStructure;	 	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);	//open USART3 clk	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	//open GPIOB clk 	USART_DeInit(USART3);  //release uart3	 //USART3_TX   PB.10    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB.10    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//output mode    GPIO_Init(GPIOB, &GPIO_InitStructure); //configure PB10       //USART3_RX	  PB.11    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//input mode    GPIO_Init(GPIOB, &GPIO_InitStructure);  //configure PB11   //Usart3 NVIC     NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=5 ;//	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;		//	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//	NVIC_Init(&NVIC_InitStructure);	//     //USART	USART_InitStructure.USART_BaudRate = bound;//9600;	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//data bit	USART_InitStructure.USART_StopBits = USART_StopBits_1;//stop bit	USART_InitStructure.USART_Parity = USART_Parity_No;//	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//    USART_Init(USART3, &USART_InitStructure); //    USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//    USART_Cmd(USART3, ENABLE);                    // } void USART1_SendByByter(u8 Data){	//	USART_GetFlagStatus(USART1, USART_FLAG_TC);		USART_SendData(USART1, Data);	while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);	}void USART3_SendByByter(u8 Data){	//	USART_GetFlagStatus(USART3, USART_FLAG_TC);		USART_SendData(USART3, Data);	while (USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);	}void USART1_IRQHandler(void)                	//uart1 ISR	{		u8 Res;		if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //		{   		  Res =USART_ReceiveData(USART1);//(USART1->DR);	//		  UART1_data=Res;			if(Res==0x7E && UART1_rcv_count==0)		{       UART1_rcv[UART1_rcv_count++]=Res;    }    else if(Res!=0x7E && UART1_rcv_count>0)    {      UART1_rcv[UART1_rcv_count++]=Res;			    }    else if(Res==0x7E && UART1_rcv_count>0)    {       UART1_rcv[UART1_rcv_count++]=Res;			 Uart1_finish=2;		 }    else      ;		 } }		void USART3_IRQHandler(void)                	//uart3 ISR	{		if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)  //RX set		{		UART3_data=USART_ReceiveData(USART3);//(USART1->DR);	//		UART3_rcv[UART3_rcv_count]=UART3_data;		if(UART3_rcv_count<6) UART3_rcv_count++;		    } 	}	

sys.h

#ifndef __SYS_H#define __SYS_H	#include "stm32f10x.h"http://	 //本程序只供學(xué)習(xí)使用,未經(jīng)作者許可,不得用于其它任何用途//ALIENTEK STM32開(kāi)發(fā)板		   //正點(diǎn)原子@ALIENTEK//技術(shù)論壇:www.openedv.com//修改日期:2012/8/18//版本:V1.7//版權(quán)所有,盜版必究。//Copyright(C) 廣州市星翼電子科技有限公司 2009-2019//All rights reserved// 	 //0,不支持ucos//1,支持ucos#define SYSTEM_SUPPORT_OS		0		//定義系統(tǒng)文件夾是否支持UCOS																	    	 //位帶操作,實(shí)現(xiàn)51類(lèi)似的GPIO控制功能//具體實(shí)現(xiàn)思想,參考<>第五章(87頁(yè)~92頁(yè)).//IO口操作宏定義#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) #define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr)) #define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum)) //IO口地址映射#define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C #define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C #define GPIOC_ODR_Addr    (GPIOC_BASE+12) //0x4001100C #define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C #define GPIOE_ODR_Addr    (GPIOE_BASE+12) //0x4001180C #define GPIOF_ODR_Addr    (GPIOF_BASE+12) //0x40011A0C    #define GPIOG_ODR_Addr    (GPIOG_BASE+12) //0x40011E0C    #define GPIOA_IDR_Addr    (GPIOA_BASE+8) //0x40010808 #define GPIOB_IDR_Addr    (GPIOB_BASE+8) //0x40010C08 #define GPIOC_IDR_Addr    (GPIOC_BASE+8) //0x40011008 #define GPIOD_IDR_Addr    (GPIOD_BASE+8) //0x40011408 #define GPIOE_IDR_Addr    (GPIOE_BASE+8) //0x40011808 #define GPIOF_IDR_Addr    (GPIOF_BASE+8) //0x40011A08 #define GPIOG_IDR_Addr    (GPIOG_BASE+8) //0x40011E08  //IO口操作,只對(duì)單一的IO口!//確保n的值小于16!#define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  //輸出 #define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)  //輸入 #define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  //輸出 #define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)  //輸入 #define PCout(n)   BIT_ADDR(GPIOC_ODR_Addr,n)  //輸出 #define PCin(n)    BIT_ADDR(GPIOC_IDR_Addr,n)  //輸入 #define PDout(n)   BIT_ADDR(GPIOD_ODR_Addr,n)  //輸出 #define PDin(n)    BIT_ADDR(GPIOD_IDR_Addr,n)  //輸入 #define PEout(n)   BIT_ADDR(GPIOE_ODR_Addr,n)  //輸出 #define PEin(n)    BIT_ADDR(GPIOE_IDR_Addr,n)  //輸入#define PFout(n)   BIT_ADDR(GPIOF_ODR_Addr,n)  //輸出 #define PFin(n)    BIT_ADDR(GPIOF_IDR_Addr,n)  //輸入#define PGout(n)   BIT_ADDR(GPIOG_ODR_Addr,n)  //輸出 #define PGin(n)    BIT_ADDR(GPIOG_IDR_Addr,n)  //輸入void USART1_SendByByter(u8 Data);void uart_init1(u32 bound);#endif

五、運(yùn)行結(jié)果:?

最后,小白的學(xué)習(xí)筆記,歡迎大佬指教。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/119150.html

相關(guān)文章

  • 基于藍(lán)牙的聲波無(wú)線測(cè)距系統(tǒng)

    摘要:設(shè)計(jì)簡(jiǎn)介本設(shè)計(jì)是基于藍(lán)牙的超聲波無(wú)線測(cè)距的設(shè)計(jì),主要實(shí)現(xiàn)以下功能實(shí)現(xiàn)通過(guò)測(cè)量當(dāng)前溫度值實(shí)現(xiàn)通過(guò)溫差補(bǔ)償法公式修改超聲波在當(dāng)前空氣中的傳播速度實(shí)現(xiàn)通過(guò)超聲波傳感器測(cè)量距離值。 設(shè)計(jì)簡(jiǎn)介: 本設(shè)計(jì)是基于藍(lán)牙的超聲波無(wú)線測(cè)距的設(shè)計(jì),主要實(shí)現(xiàn)以下功能: ① 實(shí)現(xiàn)通過(guò)DS18B20測(cè)量當(dāng)前溫度值 ② ...

    zxhaaa 評(píng)論0 收藏0
  • 10. STM32——PWM 控制舵機(jī)(聲波感應(yīng)開(kāi)蓋垃圾桶)

    摘要:中央對(duì)齊模式向上計(jì)數(shù)時(shí)當(dāng)時(shí)通道為無(wú)效電平,否則為有效電平向下計(jì)數(shù)時(shí)一旦通道為有效電平,否則為無(wú)效電平。一般來(lái)說(shuō),舵機(jī)接收的信號(hào)頻率為,即周期為。 STM32——P...

    jasperyang 評(píng)論0 收藏0
  • 樹(shù)莓派31/100 - Pico連接HC-SR04聲波傳感器,為自動(dòng)避障智能小車(chē)打好基礎(chǔ)

    摘要:超聲波傳感器,英文,既可以發(fā)射超聲波,也可以接收超聲波,它有一個(gè)重要作用,可以提前探測(cè)到附近的物體,而且通過(guò)聲波速度,能夠推算出附近物體離傳感器的大概距離。 超聲波...

    neuSnail 評(píng)論0 收藏0
  • push主機(jī)是什么-什么是push技術(shù)?

    摘要:由于擔(dān)心會(huì)對(duì)主干網(wǎng)造成影響人們開(kāi)始轉(zhuǎn)向可以嚴(yán)格控制帶寬要求的產(chǎn)品和技術(shù)比如多址發(fā)送。對(duì)網(wǎng)絡(luò)造成的巨大負(fù)擔(dān)也是多址發(fā)送發(fā)展的巨大動(dòng)力因?yàn)槎嘀钒l(fā)送是一種發(fā)送大量數(shù)據(jù)包的有效方法。什么是push技術(shù)?  所謂PUSH技術(shù)是一種基于客戶服務(wù)器機(jī)制,由服務(wù)器主動(dòng)的將信息發(fā)往客戶端的技術(shù)。同傳統(tǒng)的拉技術(shù)(PULL)相比,兩者最為主要的區(qū)別在于前者的是由服務(wù)器主動(dòng)發(fā)送信息,而后者則是由客戶機(jī)主動(dòng)請(qǐng)求信息。...

    chenatu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<