使用的硬件:STM32F103C8T6,HC-SR04,ST-Link(其他燒錄器也可以),0.96寸OLED屏幕(非必須,僅供顯示測距結果,可以使用串口助手代替),若干杜邦線。
涉及操作stm32的GPIO口,外部中斷,定時器,本文中不會詳細解釋,僅提供代碼思路。
源程序:
- /*
- 模塊: 帶UART功能的HC-SR04(2020款)系列超聲波測距模塊
- 主控芯片: RCWL-9300系列
- 功能: 串口模式下讀取HC-SR04(2020款)系列超聲波測距模塊距離數據并串口顯示
- 注意: HC-SR04(2020款)系列模塊選擇成UART模式,即模式選擇UART。
- 編寫: 無錫日晨物聯科技有限公司
- 方案定制: 18851501095
- 串口數據格式: RCWL-1661串口輸出3位8BIT數據,距離MM值=24位數據轉換成10進制/10000。
- 連線:
- -VCC = 5V /3.3V/3-40V
- -TRIG/RX/SCL = A5
- -ECHO/TX/SDA = A4
- -GND = GND
- */
- #include "SoftwareSerial.h"
- SoftwareSerial mySerial(A4, A5); // A4為RX, A5為TX; A4接模塊TX,A5接模塊RX
- float Data_h = 0; //高8位數據
- float Data_m = 0; //中8位數據
- float Data_l = 0; //低8位數據
- float distance = 0; //距離數據十進制值
- void setup()
- {
- Serial.begin(9600); //定義串口波特率9600 出廠默認波特率9600
- mySerial.begin(9600); //定義模擬串口波特率
- Serial.println("HC-SR04(2020款) 測距開始:");
- }
- void loop()
- {
- Data_h = 0;
- Data_m = 0;
- Data_l = 0;
- distance=0;
- mySerial.flush(); //清模擬串口緩存數據
- mySerial.write(0XA0); //發送開始測試數據0XA0,0XA0為開始測試命令數據
- delay(120); //測量周期延時,一個周期為100mS,設置120MS,留余量
- if (mySerial.available()>0) //等待接收完3個數據
- {
- Data_h= mySerial.read(); //讀取緩存數據
- Data_m= mySerial.read();
- Data_l= mySerial.read();
- }
- else
- {
- Data_h= 0; //讀取緩存數據
- Data_m= 0;
- Data_l= 0;
- }
- distance=(Data_h*65536+Data_m*256+Data_l)/10000; //計算成CM值
- Serial.print("距離 : ");
- if ((1<=distance)&&(900>=distance)) //1CM-9M之間數值顯示
- {
- Serial.print(distance);
- Serial.print(" CM ");
- }
- else
- {
- Serial.print(" - - - - "); //無效數值數值顯示 - - - -
- }
- Serial.println();
- // delay(100); //調節測量周期
- }
復制代碼
原理圖: 無
仿真: 無
代碼:
HC-SR04(2020款)ARDUINO測試資料.7z
(48.02 KB, 下載次數: 13)
2024-1-16 22:24 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|