首页 > 其他 > 详细

树莓派外设开发之超声波测距

时间:2021-04-01 00:42:03      阅读:16      评论:0      收藏:0      [点我收藏+]

#include <wiringPi.h>
#include <stdio.h>
#include <sys/time.h>
#define Trig 4
#define Echo 5

void chaoshengboInit(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); //获取当前时间 开始接收到返回信号的时候,触发信号(trig)发出

while((digitalRead(Echo) != 0));
gettimeofday(&tv2, NULL); //获取当前时间 最后接收到返回信号的时候,ECHO接收到反弹回来的信号,转变为高电平

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 !");
return 1;
}

chaoshengboInit();

while(1){
dis = disMeasure();
printf("distance = %0.2f cm\n",dis);
delay(1000);//每隔一秒刷新一次
}

return 0;
}

 

树莓派外设开发之超声波测距

原文:https://www.cnblogs.com/1402192381hqf/p/14603795.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!