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

最近弄了块树莓派,业余研究研究。

超声波模块用的是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
", dis);
        delay(1000);
    }

    return 0;
}

 结果如下图:

参考:

http://blog.csdn.net/jcdjx/article/details/27313345

http://blog.csdn.net/xdw1985829/article/details/39580401/

原文地址:https://www.cnblogs.com/tiandsp/p/8325798.html