找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 494|回复: 0
打印 上一主题 下一主题
收起左侧

自学HC-SR04超声波模块 附Arduino程序 UART iic GPIO

[复制链接]
跳转到指定楼层
楼主
ID:1109414 发表于 2024-1-16 16:45 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
使用的硬件:STM32F103C8T6,HC-SR04,ST-Link(其他烧录器也可以),0.96寸OLED屏幕(非必须,仅供显示测距结果,可以使用串口助手代替),若干杜邦线。

涉及操作stm32的GPIO口,外部中断,定时器,本文中不会详细解释,仅提供代码思路。

源程序:
  1. /*
  2. 模块:          带UART功能的HC-SR04(2020款)系列超声波测距模块   
  3. 主控芯片:      RCWL-9300系列
  4. 功能:          串口模式下读取HC-SR04(2020款)系列超声波测距模块距离数据并串口显示
  5. 注意:          HC-SR04(2020款)系列模块选择成UART模式,即模式选择UART。
  6. 编写:          无锡日晨物联科技有限公司
  7. 方案定制:      18851501095
  8. 串口数据格式:  RCWL-1661串口输出3位8BIT数据,距离MM值=24位数据转换成10进制/10000。
  9. 连线:
  10.    -VCC          = 5V /3.3V/3-40V   
  11.    -TRIG/RX/SCL  = A5
  12.    -ECHO/TX/SDA  = A4
  13.    -GND          = GND
  14. */
  15. #include "SoftwareSerial.h"
  16. SoftwareSerial mySerial(A4, A5);    // A4为RX, A5为TX;  A4接模块TX,A5接模块RX
  17. float     Data_h = 0;                 //高8位数据
  18. float     Data_m = 0;                 //中8位数据
  19. float     Data_l = 0;                 //低8位数据
  20. float     distance = 0;               //距离数据十进制值

  21. void setup()
  22. {
  23.   Serial.begin(9600);                //定义串口波特率9600 出厂默认波特率9600
  24.   mySerial.begin(9600);               //定义模拟串口波特率
  25.   Serial.println("HC-SR04(2020款) 测距开始:");
  26. }

  27. void loop()
  28. {
  29.     Data_h = 0;
  30.     Data_m = 0;   
  31.     Data_l = 0;
  32.     distance=0;
  33.     mySerial.flush();                     //清模拟串口缓存数据
  34.     mySerial.write(0XA0);                 //发送开始测试数据0XA0,0XA0为开始测试命令数据
  35.    delay(120);                            //测量周期延时,一个周期为100mS,设置120MS,留余量   
  36.    if (mySerial.available()>0)            //等待接收完3个数据
  37.    {
  38.     Data_h= mySerial.read();              //读取缓存数据
  39.     Data_m= mySerial.read();
  40.     Data_l= mySerial.read();
  41.    }
  42.   else
  43.    {
  44.     Data_h= 0;                             //读取缓存数据
  45.     Data_m= 0;
  46.     Data_l= 0;     
  47.     }
  48.    distance=(Data_h*65536+Data_m*256+Data_l)/10000;   //计算成CM值     
  49.    Serial.print("距离 : ");
  50.    if ((1<=distance)&&(900>=distance))     //1CM-9M之间数值显示
  51.     {
  52.    Serial.print(distance);
  53.    Serial.print(" CM ");  
  54.     }
  55.    else
  56.     {
  57.    Serial.print(" - - - - ");             //无效数值数值显示 - - - -
  58.     }
  59.    Serial.println();   
  60. //   delay(100);                             //调节测量周期  
  61. }
复制代码

原理图: 无
仿真: 无
代码: HC-SR04(2020款)ARDUINO测试资料.7z (48.02 KB, 下载次数: 12)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表