樹莓派練習程序(超聲波測距)


最近弄了塊樹莓派,業余研究研究。

超聲波模塊用的是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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM