树莓派项目实践 [2] —— 编程控制实现超声波测距(C语言)
原创首发于CSDN,转载请注明出处,谢谢!https://blog.csdn.net/weixin_46959681/article/details/115256556
文章目录
- 超声波模块
- 树莓派与超声波模块相连
- 超声波测距原理
- 通过树莓派引脚编程操作超声波模块
- |测距源代码: `chaoShengBo.c`
- |运行
- 拓展:面向时间的编程
- 参考资料
- 文章更新记录
超声波模块
Q:为什么能发出超声波呢?
树莓派与超声波模块相连
VCC — 5V,Trig — GPIO.2,Echo — GPIO.3。(读者请自行对应树莓派引脚图。)
超声波测距原理
在给出的原理图中可以明确的看到,给设置为输出的触发端一个低电平,紧接着再给一个持续时间10微秒的高电平,就成功地让元器件内部发波了。具体的代码编写在源代码中也有体现。
通过树莓派引脚编程操作超声波模块
|测距源代码: chaoShengBo.c
/* chaoShengBo.c */
#include <stdio.h>
#include <sys/time.h>
#include <wiringPi.h>
#define Trig 2
#define Echo 3void chaoShengBoInit()
{//超声波接收端设为输入端。pinMode(Echo,INPUT); //超声波触发端设为输出端。pinMode(Trig,OUTPUT);
}float disMeasure()
{struct timeval tv1;struct timeval tv2;long start;long stop;float dis;//超声波触发端拉高拉低过程。digitalWrite(Trig,LOW);delayMicroseconds(4);digitalWrite(Trig,HIGH);//触发端发出10微秒的超声波脉冲。delayMicroseconds(10);digitalWrite(Trig,LOW);//获取当前时间,开始接收到返回信号的时间点。while(!(digitalRead(Echo) == 1));gettimeofday(&tv1,NULL);//获取当前时间,最后接收到返回信号的时间点。while(!(digitalRead(Echo) == 0));gettimeofday(&tv2,NULL);start = tv1.tv_sec * 1000000 + tv1.tv_usec;stop = tv2.tv_sec * 1000000 + tv2.tv_usec;dis = (float)(stop - start) / 1000000 * 34000 / 2;return dis;
}int main()
{float dis;if(wiringPiSetup() == -1){printf("Setup wiringPi failed.\n");return -1;}chaoShengBoInit();while(1){dis = disMeasure();printf("distance = %0.2f cm\n",dis);delay(1000);}return 0;
}
|运行
终端运行指令gcc chaoShengBo.c -lwiringPi
,运行 ./a.out
可以看到超声波模块被激活开始测距,界面终端也返回测量的实测数据。
拓展:面向时间的编程
在 Linux 系统中,struct timeval
结构体函数在头文件time.h中的定义为:
//最高精度为微秒。
struct timeval
{time_t tv_sec; // secondslong tv_usec; // microseconds
};
一般由函数 int gettimeofday(struct timeval *tv, struct timezone *tz)
获取系统的时间,gettimeofday()
功能是得到当前时间和时区,分别写到 tv 和 tz 中。后者写入 NULL 则表示为空。
函数原型:
/* Get the current time of day and timezone information,putting it into *TV and *TZ. If TZ is NULL, *TZ is not filled.Returns 0 on success, -1 on errors.NOTE: This form of timezone information is obsolete.Use the functions and variables declared in <time.h> instead. */extern int gettimeofday (struct timeval *__restrict __tv,__timezone_ptr_t __tz) __THROW __nonnull ((1));
参考资料
- struct timeval结构体
- struct timespec 和 struct timeval
- struct timeval结构体 以及 gettimeofday()函数、struct timespec结构体
文章更新记录
- “树莓派与超声波模块连接展示”一节完成。「2021.3.27 21:46」
- “拓展:面向时间的编程”一节完成。 「2021.3.28 16:49」
树莓派项目实践 [2] —— 编程控制实现超声波测距(C语言)相关推荐
- 树莓派项目实践 [1] —— 编程控制继电器组件实现电路开闭(C语言)
原创首发于CSDN,转载请注明出处,谢谢!https://blog.csdn.net/weixin_46959681/article/details/115145982 文章目录 所用的树莓派与继电器 ...
- 经验分享:如何通过项目实践提升编程能力?
本文经授权转载自微信公众号"crossin编程教室"(crossincode) 挑选编程实践题目的过程中,有些普遍被关注的问题,今天在这里集中聊一聊,包括我这些年指导学生的一点经验 ...
- 超声波测距 c语言程序流程图,超声波测距c语言源程序代码-20210413051213.docx-原创力文档...
文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] 超声波测距C语言源程序代码 /*{HZ即单位s的 ...
- 51单片机c语言测距,求助 关于C51单片机超声波测距 C语言程序设计 高手帮帮忙...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 C51编程:超声波测距程序(附图) [请帮助] 2006-9-30 18:44:03 #include #define k1 P3_4 #define c ...
- 水下超声波测距c语言程序,超声波测距51C程序
原标题:超声波测距51C程序 //晶振=8M //MCU=STC10F04XE //P0.0-P0.6共阳数码管引脚 //Trig = P1^0 //Echo = P3^2 #include //包括 ...
- 水下超声波测距c语言程序,51单片机超声波测距C程序
51单片机超声波测距C程序 (2010-01-26 14:09:10) 电子工程师电子资料大学校园 超声波检测原理 超声波测距的程序流程图 程序如下: //超声波模块程序 #include #defi ...
- 超声波测距 c语言,超声波测距C语言源程序代码
/*{HZ即单位s的倒数}本晶振为12MHZ,因此外部的时钟频率为12MHZ,所以内部的时钟频率为(12MHZ)/12=1MH 即HZ,而机械频率为1/(1MHZ),即每完成一次计算(即定时器的值加一 ...
- c语言编程项目实践报告快递管理系统,学生成绩管理系统C语言程序设计实践报告.doc...
学生成绩管理系统C语言程序设计实践报告 (此文档为word格式,下载后您可任意编辑修改!) 中南大学 C语言程序设计实践报告 题 目 学 生 成 绩 管 理 系 统 学生姓名 木雕小象 指导教师 × ...
- 输出高电平程序c语言,51用c语言怎么编程检测US-100超声波测距模块echo/rx引脚输出高电平时间长度,,谁能给我个模板...
满意答案 lixsh518 2016.07.24 采纳率:46% 等级:9 已帮助:768人 #include #define uchar unsigned char #define uint ...
最新文章
- 智能视觉组参赛总结及体会- 西安邮电大学 - AI小布丁
- 钉钉扫码登录第三方_在钉钉发布公司重要文件,真的安全吗?
- 命令提示符_基本介绍
- 【转载】(EM算法)The EM Algorithm
- 在JDK 8中可通过反射获得构造函数/方法参数元数据
- Mvc 学习笔记(一)
- mybatis自动生成代码只有insert()和insertSelective()
- HDU 1114 Piggy-Bank 简单DP
- 基础原理系列:服务端 TCP 连接的 TIME_WAIT 问题
- 【积少成多】vi的进阶使用
- C语言丨求两个正整数的最大公约数
- 收藏:常用的广告代码的表达式
- cmmi实践访谈测试ppt_CMMI3级访谈问题--REQM
- 应用密码学第6章——第七章
- java工程师容易秃头吗_程序员更容易秃头?原因是什么?
- 亚马逊养号遛号Selenium自动化测试工具介绍,依托于VMLogin指纹浏览器配套实现。
- c++学习:多态案例之魔法门英雄无敌
- 杂篇-01-Unity中创建Mesh时遇到的问题
- python 投屏_python实现《吃鸡大法》加文字识别 玩转百万英雄!
- 『Python学习笔记』Mac系统汇总:终端文件显示不同颜色Pycharm代码模板JAVA环境变量