600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 树莓派控制超声波测距原理

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

时间:2018-10-26 17:57:33

相关推荐

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

原理:

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

#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;}

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