您的位置:首页 > 其它

树莓派练习程序(超声波测距)

2018-01-21 22:05 218 查看
最近弄了块树莓派,业余研究研究。

超声波模块用的是HC-SR04,一共四个引脚,如下图:



树莓派的引脚如下图:



我们将Vcc连接物理接口2,Trig连接物理接口38,Echo连接物理接口40,Gnd连接物理接口39。

实物连接如下图:



编程使用WiringPi库,使用wpi引脚编码方式控制GPIO。

代码如下:

#include <wiringPi.h>
#include <stdio.h>
#include <sys/time.h>

#define Trig    28
#define Echo    29

void ultraInit(void)
{
pinMode(Echo, INPUT);
pinMode(Trig, OUTPUT);
}

float disMeasure(void)
{
struct timeval tv1;
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) { //when initialize wiring failed,print messageto screen
printf("setup wiringPi failed !");
return 1;
}

ultraInit();

while (1) {
dis = disMeasure();
printf("distance = %0.2f cm\n", dis);
delay(1000);
}

return 0;
}


结果如下图:



参考:
http://blog.csdn.net/jcdjx/article/details/27313345 http://blog.csdn.net/xdw1985829/article/details/39580401/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: