最近弄了块树莓派,业余研究研究。
超声波模块用的是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/