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


    前言

    最近参加立创训练营,用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 Echo  8   //Echo   //GPIO8
    #define Trig  7   //Trig   //GPIO7
    #define GPIO_FUNC 0
    
    float GetDistance  (void) {
        static unsigned long start_time = 0, time = 0;
        float distance = 0.0;
        IotGpioValue value = IOT_GPIO_VALUE0;
        unsigned int flag = 0;
                /*
    =============== 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);//拉高Trig
        IoTUdelay(20);//20us
        IoTGpioSetOutputVal(Trig, IOT_GPIO_VALUE0);//拉低Trig
               /*
    =============== GPIO通信模式流程 3检测Echo脚输出的高电平时间========================================
                */
        while (1) {
            IoTGpioGetInputVal(Echo, &value);//读取Echo脚的电平状态
            if ( value == IOT_GPIO_VALUE1 && flag == 0) {//如果为高
                start_time = IoTGetUs();//获取此时时间
                flag = 1;
            }
            if (value == IOT_GPIO_VALUE0 && flag == 1) {//高电平结束变成低电平
                time = IoTGetUs() - start_time;//计算高电平维持时间
                start_time = 0;
                break;
            }
        }
                   /*
    =============== GPIO通信模式流程 4代入公式计算========================================
                */
        distance = time * 0.034 / 2;
        // printf("distance is %f\r\n",distance);
        return distance;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    打印结果
    在这里插入图片描述
    有关其他三种模式的通信,等笔者的10K欧0603电阻到了在做介绍。

  • 相关阅读:
    JDK8到JDK17新特性
    java-php-net-python-论坛网站计算机毕业设计程序
    词法分析基础
    DeepStream--测试lpdnet车牌检测模型
    JAVA Annotation 详解
    xml文件报错 ORA-00907: 缺失右括号
    使用Python绘制CPI和PPI曲线
    ms office学习记录11:Excel㈤
    第03章 卷积神经网络
    浏览器——主页修改及恢复方法
  • 原文地址:https://blog.csdn.net/qq_41954556/article/details/125910794