OpenHarmony南向学习笔记——Hi3861+HC-SR04超声波检测

张开发
2026/4/9 16:12:13 15 分钟阅读

分享文章

OpenHarmony南向学习笔记——Hi3861+HC-SR04超声波检测
Hi3861HC-SR04超声波检测前言模块介绍1. GPIO模式时序图通信流程代码前言最近参加立创训练营用Hi3861做机器狗接着上一段时间的学习继续OpenHarmony的设备开发学习之前的笔记中一直没有使用到超声波模块在这次的训练营中笔者打算尝试在Hi3861试试。模块介绍产商的手册如下所示笔者购买的是2022款链接如下「超声波测距模块 HC-SR04 超声波传感器 支持兼容UNO R3/51/STM32」。该模块支持四种模式来获取距离可以通过背面的电阻设置进行选择。1. GPIO模式时序图此模式需要使用Hi3861的两个IO口来与超声波模块的TRIG和ECHO两个脚进行通信。通信流程根据厂商资料可以知道该模块的通信流程如下1.主控芯片与TRIG连接的IO配置为输出模式与ECHO连接的IO配置为输入模式2.MCU给TRIG引脚输出一个大于10us的高电平脉冲3.模块通过ECHO脚返回一个高电平脉冲信号4.主控记录ECHO脚高电平脉冲时间T并代入公式计算。代码此代码参考了润和的智能循迹避障小车样例代码。笔者此处使用的是传智教育的元气派有部分接口定义不太一样。// An highlighted block#define Echo8//Echo //GPIO8#define Trig7//Trig //GPIO7#defineGPIO_FUNC0floatGetDistance(void){staticunsigned long start_time0,time0;float distance0.0;IotGpioValue valueIOT_GPIO_VALUE0;unsigned int flag0;/* GPIO通信模式流程 1初始化GPIO */IoTIoSetFunc(Echo,GPIO_FUNC);//设置Echo连接IO为普通GPIO模式无复用IoTGpioSetDir(Echo,IOT_GPIO_DIR_IN);//设置Echo连接IO为输入模式IoTGpioSetDir(Trig,IOT_GPIO_DIR_OUT);//设置Trig连接IO为输出模式/* GPIO通信模式流程 2输出起始信号 */IoTGpioSetOutputVal(Trig,IOT_GPIO_VALUE1);//拉高TrigIoTUdelay(20);//20usIoTGpioSetOutputVal(Trig,IOT_GPIO_VALUE0);//拉低Trig/* GPIO通信模式流程 3检测Echo脚输出的高电平时间 */while(1){IoTGpioGetInputVal(Echo,value);//读取Echo脚的电平状态if(valueIOT_GPIO_VALUE1flag0){//如果为高start_timeIoTGetUs();//获取此时时间flag1;}if(valueIOT_GPIO_VALUE0flag1){//高电平结束变成低电平timeIoTGetUs()-start_time;//计算高电平维持时间start_time0;break;}}/* GPIO通信模式流程 4代入公式计算 */distancetime*0.034/2;// printf(distance is %f\r\n,distance);returndistance;}打印结果有关其他三种模式的通信等笔者的10K欧0603电阻到了在做介绍。

更多文章