【Orangepi Zero2 全志H616】驱动超声波测距、gettimeofday时间函数API

news2024/11/25 3:03:20

一、HC-SR04超声波模块

  • 超声波测距原理
  • 超声波的时序图

二、时间函数

  • API测试代码
  • 代码实现和验证

一、HC-SR04超声波模块

型号:HC-SR04
接线参考:模块除了两个电源引脚外,还有TRIG、ECHO引脚 / P0、P1
在这里插入图片描述

超声波测距原理

  • 让它发送波:给Trig端口至少10us的高电平
  • 开始发送波:Echo信号由低电平跳转到高电平
  • 接收返回波:Echo信号由高电平跳转回低电平
  • 计算时间 :Echo引脚维持高电平的时间!
    开始发送波,启动定时器,接收到返回波,停止计时器
  • 计算距离 :测试距离=(高电平时间*声速(340m/s))/2

超声波的时序图

在这里插入图片描述

二、时间函数

API测试代码

#include<sys/time.h>

struct timeval {
long tv_sec;/*秒*/
long tv_usec;/*微妙*/
};

int gettimeofday(struct timeval *tv, struct timezone *tz )
gettimeofday()会把目前的时间用tv 结构体返回,当地时区的信息则放到tz所指的结构中

代码实现和验证

//计算程序在当前环境中数数10万次耗时多少
#include <sys/time.h>
#include <stdio.h>
//int gettimeofday(struct timeval *tv, struct timezone *tz )

void mydelay()
{
	int i, j;
	
	for(i=0; i<100; i++){
		for(j=0; j<1000; j++);
		}
}

int main()
{
	struct timeval startTime;
	struct timeval stopTime;
	
	gettimeofday(&startTime, NULL);
	mydelay();
	gettimeofday(&stopTime, NULL);
	long diffTime = 1000000 * (stopTime.tv_sec - startTime.tv_sec) + (stopTime.tv_usec - startTime.tv_usec);
	printf("全志H616的Linux数100000耗时%ldus\n", diffTime);
	
	return 0;
}

在这里插入图片描述

代码实现和验证

#include <stdio.h>
#include <sys/time.h>
#include <wiringPi.h>
#include <stdlib.h>
#include <unistd.h>

#define Trig 0
#define Echo 1

double getDistance()
{
	double dis;
	struct timeval start;
	struct timeval stop;
	
	pinMode(Trig, OUTPUT);
	pinMode(Echo, INPUT);
	
	digitalWrite(Trig, LOW);
	usleep(5);
	
	digitalWrite(Trig, HIGH);
	usleep(10);
	digitalWrite(Trig, LOW);
	/*above init HC-SR04*/
	
	while (!digitalRead(Echo));
	gettimeofday(&start, NULL);
	while (digitalRead(Echo));
	gettimeofday(&stop, NULL);
	
	long diffTime = 1000000 * (stop.tv_sec - start.tv_sec) + (stop.tv_usec - start.tv_usec);
	printf("diffTime = %ld\n", diffTime);
	dis = (double)diffTime / 1000000 * 34000 / 2;
	
	return dis;
}

int main()
{
	double dis;

	if (wiringPiSetup() == -1){
		fprintf(stderr, "%s","initWringPi error");
		exit(-1);
	}

	while (1){
		dis = getDistance();
		printf("dis = %lf\n", dis);
		usleep(500000);
	}
	
	return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1170971.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

竞赛选题 深度学习手势检测与识别算法 - opencv python

文章目录 0 前言1 实现效果2 技术原理2.1 手部检测2.1.1 基于肤色空间的手势检测方法2.1.2 基于运动的手势检测方法2.1.3 基于边缘的手势检测方法2.1.4 基于模板的手势检测方法2.1.5 基于机器学习的手势检测方法 3 手部识别3.1 SSD网络3.2 数据集3.3 最终改进的网络结构 4 最后…

Oracle安全基线检查

一、账户安全 1、禁止SYSDBA用户远程连接 用户具备数据库超级管理员(SYSDBA)权限的用户远程管理登录SYSDBA用户只能本地登录,不能远程。REMOTE_LOGIN_PASSWORDFILE函数的Value值为NONE。这意味着禁止共享口令文件,只能通过操作系统认证登录Oracle数据库。 1)检查REMOTE…

【漏洞复现】Apache_HTTPD_换行解析漏洞(CVE-2017-15715)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证 1.5、深度利用GetShell 1.6、修复建议 说明内容漏洞编号CVE-2017-15715漏洞名称Ap…

基础课20——智能客服系统的使用维护

1.智能客服系统的维护 智能客服系统在上线后&#xff0c;仍然需要定期的维护和更新。这是因为智能客服系统是一个复杂的软件系统&#xff0c;涉及到多个组件和功能&#xff0c;需要不断优化和改进以满足用户需求和保持市场竞争力。 保持系统的稳定性和性能&#xff1a;随着用…

医学影像处理系统源码(PACS)

通用医学图像处理平台覆盖全模态、多维度临床应用&#xff0c;助力提供医学图像分析的全景高清视角&#xff0c;赋能临床精准诊断。 一、PACS覆盖CT、MR、MI等多模态影像及心血管、肿瘤、神经等多临床场景&#xff0c;助力医生精准高效诊断。 二、临床应用 1.基础应用 &#…

大模型在代码缺陷检测领域的实践

静态代码扫描(SA)能快速识别代码缺陷&#xff0c;如空指针访问、数组越界等&#xff0c;以较高ROI保障质量及提升交付效率。当前扫描能力主要依赖人工经验生成规则&#xff0c;泛化能力弱且迭代滞后&#xff0c;导致漏出。本文提出基于代码知识图谱解决给机器学什么的问题&…

基础课19——客服系统知识库的搭建流程

1.收集整理业务数据 注意&#xff1a;我们在做业务数据收集时&#xff0c;往往是甲方提供给我们的&#xff0c;这时就需要确定一个标准&#xff0c;否则对知识库梳理工作会带来很大的难度&#xff0c;建议和甲方沟通确认一个双方都统一的知识库原材料。 2.创建知识库 在创建知…

JavaScript函数传递的秘密武器:apply、call和bind的完全指南

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;JavaScript小贴士 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要的是继续…

MySQL:一文掌握MySQL索引

目录 概念优缺点索引的数据结构Hash索引有序数组索引二叉搜索树平衡二叉树B树B树 索引的物理结构MyISAM存储引擎InnoDB存储引擎 索引的分类页、区、段change buffer 和索引回表和覆盖索引索引优化面试题索引哪些情况下会失效什么是索引下推主键选择自增和uuid的区别 概念 官方…

一键混剪软件、根据模板批量剪辑、多种分割、多种合并、多种混剪、文案提取、文字转语音等

在这个短视频时代&#xff0c;视频剪辑已经成为了一个炙手可热的行业。但是&#xff0c;对于大多数人来说&#xff0c;视频剪辑是一项既复杂又繁琐的工作。不过&#xff0c;现在有了我们的新伙伴——视频闪闪&#xff0c;一键混剪软件&#xff0c;您将迎来全新的视频剪辑体验&a…

Spring源码编译步骤

Spring源码学习 一、Gradle 为什么下载gradle呢&#xff1f;我们平时不都是用maven吗&#xff1f;原因只有一个&#xff0c;spring源码是用gradle构建的&#xff0c;所以&#xff0c;你想看spring源码必须安装和学会使用gradle&#xff0c;那么&#xff0c;让我们开始gradle之…

【RabbitMQ】 RabbitMQ 消息的延迟 —— 深入探索 RabbitMQ 的死信交换机,消息的 TTL 以及延迟队列

文章目录 一、死信交换机1.1 什么是死信和死信交换机1.2 死信交换机和死信队列的创建方式 二、消息的 TTL2.1 什么是消息的 TTL2.2 基于死信交换机和 TTL 实现消息的延迟 三、基于 DelayExchang 插件实现延迟队列3.1 安装 DelayExchang 插件3.2 DelayExchang 实现消息延迟的原理…

通讯录(C语言文件版本)(超详细过程)

❇️❇️❇️❇️❇️❇️❇️❇️❇️❇️❇️❇️❇️ ❇️❇️❇️❇️ 不同的信念 ❇️❇️❇️❇️ ❇️❇️❇️ 决定不同的命运 ❇️❇️❇️ ❇️❇️❇️❇️❇️❇️❇️❇️❇️❇️❇️❇️ &#x1f4d6;通讯录 ✅具备的功能 ℹ️需要的头文件名 #include<…

二叉树按二叉链表形式存储,试编写一个判别给定二叉树是否是完全二叉树的算法

完全二叉树&#xff1a;就是每层横着划过去是连起来的&#xff0c;中间不会断开 比如下面的左图就是完全二叉树 再比如下面的右图就是非完全二叉树 那我们可以采用层序遍历的方法&#xff0c;借助一个辅助队列 当辅助队列不空的时候&#xff0c;出队头元素&#xff0c;入队头…

开发知识点-PHP从小白到拍簧片

从小白到拍簧片 位异或运算&#xff08;^ &#xff09;引用符号(&)strlen() 函数base64_encode预定义 $_POST 变量session_start($array);操作符php 命令set_time_limit(7200)isset()PHP 命名空间(namespace)new 实例化类extends 继承 一个类使用另一个类方法error_reporti…

如何利用Jmeter从0到1做一次完整的压测?这2个步骤很关键!

压测&#xff0c;在很多项目中都有应用&#xff0c;是测试小伙伴必备的一项基本技能&#xff0c;刚好最近接手了一个小游戏的压测任务&#xff0c;一轮压测下来&#xff0c;颇有收获&#xff0c;赶紧记录下来&#xff0c;与大家分享一下&#xff0c;希望大家能少踩坑。 一、压…

ADO实战指南

这里写目录标题 ADO概念ADO主要对象对象间的相互联系对象模型示意图 关键代码关于代码中的一些问题设置字符串连接对象OLE DB是什么&#xff1f;与ADO的关系是什么&#xff1f;执行命令时&#xff0c;使用连接对象来访问数据库。close与nothing做了什么事&#xff1f;连接对象为…

Splunk 创建特色 dashboard 报表

1: 背景: 对原有的dashboard 进行增加点东西,特别是文字部分: 比如: 增加:“this is a guidline for how to use performance". 这段话,就不能写在title, 那样,这段文字,会出现在dashboard 的PDF 文件的分割线的上面,不符合要求。 2: 解决问题: 正确的做法是…

torch安装

https://download.pytorch.org/whl/torch_stable.html cp36 是python3.6的意思 python3.6对应torch1.8

外卖系统内部机理揭秘:了解更多

外卖系统是一个涉及多个环节和技术的复杂系统&#xff0c;包括前端用户交互、后端数据处理、订单管理和配送等多个方面。 技术架构概述&#xff1a; 前端应用程序&#xff1a; 包括用户界面和餐厅界面&#xff0c;常见的技术包括 HTML、CSS、JavaScript 和前端框架&#xff…