最近弄了塊樹莓派,業余研究研究。
超聲波模塊用的是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/