失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 树莓派控制超声波测距原理及实现

树莓派控制超声波测距原理及实现

时间:2018-11-10 16:35:53

相关推荐

树莓派控制超声波测距原理及实现

Trig引脚 :发出脉冲波

Echo引脚:在Trig发送脉冲波期间一直维持高电平

超声波原理:在超声波模块的 Trig触发引脚 输入10微妙以上的高电位,即可发射超声波。发射超声波之后,与接收到传回的超声波之前,Echo这个响应引脚会一直呈现高电位。因此,程序可以从 Echo响应引脚位的高电位脉冲持续时间,换算出被测物体的距离。

代码来自:/yuemo/p/8888342.html

#include <wiringPi.h>#include <stdio.h>#include <sys/time.h>#define Trig 4#define Echo 5void ultraInit(void){pinMode(Echo, INPUT); //设置端口为输入pinMode(Trig, OUTPUT); //设置端口为输出}float disMeasure(void){struct timeval tv1; //timeval是time.h中的预定义结构体 其中包含两个一个是秒,一个是微秒struct timeval tv2;long start, stop;float dis;digitalWrite(Trig, LOW);delayMicroseconds(2);digitalWrite(Trig, HIGH);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(void){float dis;if(wiringPiSetup() == -1){//如果初始化失败,就输出错误信息 程序初始化时务必进行printf("setup wiringPi failed !");return 1;}ultraInit();while(1){dis = disMeasure();printf("distance = %0.2f cm\n",dis);delay(1000);}return 0;}

如果觉得《树莓派控制超声波测距原理及实现》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。