![](https://img-blog.csdnimg.cn/img_convert/841578303957cfdd4f32ddab562e8efe.png)
代码如下:详细解析
1 #include <sys/time.h>
2 #include <unistd.h>
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <wiringPi.h>
6
7 #define Ting 0
8 #define Echo 1
9
10 double getDistance()
11 {
12 double dis;
13 struct timeval start;
14 struct timeval stop;
15
16 pinMode(Ting,OUTPUT);
17 pinMode(Echo,INPUT);
18
19 digitalWrite(Ting,LOW);
20 usleep(5);
21
22 digitalWrite(Ting,HIGH);
23 usleep(10);
24 digitalWrite(Ting,LOW);
25
26 //上面是初始化CSB
27
28 //下面是读取信号的发送时间节点
29 while(!digitalRead(Echo));
30 gettimeofday(&start,NULL);
31 while(digitalRead(Echo));
32 gettimeofday(&stop,NULL);
33
34
35 long difftime = 1000000*(stop.tv_sec-start.tv_sec)+(stop.tv_usec-start.tv_usec);//单位是us
36 dis = (double)difftime/1000000*34000/2;//计算两者距离,单位为厘米
37 return dis;
38
39
40 }
41
42
43 int main()
44 {
45 double data;
46
47 if(wiringPiSetup()== -1){//判断wiringpi是否初始化成功
48 fprintf(stderr,"%s","initWiriPi error");
49 exit(-1);
50
51 }
52 while(1){
53 data = getDistance();
54 printf("distance=%lfcm\n",data);
55 usleep(500000);
56 }
57 return 0;
58
59 }
./build.sh csb.c
sudo ./a.out
即可获得图一