原创首发于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. 树莓派项目实践 [1] —— 编程控制继电器组件实现电路开闭(C语言)

    原创首发于CSDN,转载请注明出处,谢谢!https://blog.csdn.net/weixin_46959681/article/details/115145982 文章目录 所用的树莓派与继电器 ...

  2. 经验分享:如何通过项目实践提升编程能力?

    本文经授权转载自微信公众号"crossin编程教室"(crossincode) 挑选编程实践题目的过程中,有些普遍被关注的问题,今天在这里集中聊一聊,包括我这些年指导学生的一点经验 ...

  3. 超声波测距 c语言程序流程图,超声波测距c语言源程序代码-20210413051213.docx-原创力文档...

    文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08] 超声波测距C语言源程序代码 /*{HZ即单位s的 ...

  4. 51单片机c语言测距,求助 关于C51单片机超声波测距 C语言程序设计 高手帮帮忙...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 C51编程:超声波测距程序(附图) [请帮助] 2006-9-30 18:44:03 #include #define k1 P3_4 #define c ...

  5. 水下超声波测距c语言程序,超声波测距51C程序

    原标题:超声波测距51C程序 //晶振=8M //MCU=STC10F04XE //P0.0-P0.6共阳数码管引脚 //Trig = P1^0 //Echo = P3^2 #include //包括 ...

  6. 水下超声波测距c语言程序,51单片机超声波测距C程序

    51单片机超声波测距C程序 (2010-01-26 14:09:10) 电子工程师电子资料大学校园 超声波检测原理 超声波测距的程序流程图 程序如下: //超声波模块程序 #include #defi ...

  7. 超声波测距 c语言,超声波测距C语言源程序代码

    /*{HZ即单位s的倒数}本晶振为12MHZ,因此外部的时钟频率为12MHZ,所以内部的时钟频率为(12MHZ)/12=1MH 即HZ,而机械频率为1/(1MHZ),即每完成一次计算(即定时器的值加一 ...

  8. c语言编程项目实践报告快递管理系统,学生成绩管理系统C语言程序设计实践报告.doc...

    学生成绩管理系统C语言程序设计实践报告 (此文档为word格式,下载后您可任意编辑修改!) 中南大学 C语言程序设计实践报告 题 目 学 生 成 绩 管 理 系 统 学生姓名 木雕小象 指导教师 × ...

  9. 输出高电平程序c语言,51用c语言怎么编程检测US-100超声波测距模块echo/rx引脚输出高电平时间长度,,谁能给我个模板...

    满意答案 lixsh518 2016.07.24 采纳率:46%    等级:9 已帮助:768人 #include #define uchar unsigned char #define uint ...

最新文章

  1. 智能视觉组参赛总结及体会- 西安邮电大学 - AI小布丁
  2. 钉钉扫码登录第三方_在钉钉发布公司重要文件,真的安全吗?
  3. 命令提示符_基本介绍
  4. 【转载】(EM算法)The EM Algorithm
  5. 在JDK 8中可通过反射获得构造函数/方法参数元数据
  6. Mvc 学习笔记(一)
  7. mybatis自动生成代码只有insert()和insertSelective()
  8. HDU 1114 Piggy-Bank 简单DP
  9. 基础原理系列:服务端 TCP 连接的 TIME_WAIT 问题
  10. 【积少成多】vi的进阶使用
  11. C语言丨求两个正整数的最大公约数
  12. 收藏:常用的广告代码的表达式
  13. cmmi实践访谈测试ppt_CMMI3级访谈问题--REQM
  14. 应用密码学第6章——第七章
  15. java工程师容易秃头吗_程序员更容易秃头?原因是什么?
  16. 亚马逊养号遛号Selenium自动化测试工具介绍,依托于VMLogin指纹浏览器配套实现。
  17. c++学习:多态案例之魔法门英雄无敌
  18. 杂篇-01-Unity中创建Mesh时遇到的问题
  19. python 投屏_python实现《吃鸡大法》加文字识别 玩转百万英雄!
  20. 『Python学习笔记』Mac系统汇总:终端文件显示不同颜色Pycharm代码模板JAVA环境变量

热门文章

  1. 她对他的爱,隔了万水千山
  2. PhpanAlysis分词技术
  3. 微软老将Philip Su的离职信:回首12年职场生涯的心得和随笔
  4. kubernetes-service详解
  5. 电信网管中的Java客户端(一)
  6. 通过名字获得ssdt函数的序号
  7. Qt编写物联网管理平台45-采集数据转发
  8. CSI ETABS 2016 v16.0.3
  9. [18调剂]华南理工大学软件学院非全日制调剂信息
  10. React16.4简书项目