1.测距原理
1.怎么让它发波
Trig,给Trig端口至少10us的高电平
2.怎么知道开始发了
Echo信号,由低电平跳转到高电平,表示开始发送波
3.怎么知道接收了返回波
Echo,由高电平跳转回低电平,表示波回来了
4.怎么算时间
Echo引脚维持高电平的时间!
波发出去的那一下,开始启动定时器
波回来的拿一下,我们开始停止定时器,计算出中间经过多少时间
5.怎么算距离
距离=速度(340m/s)*时间/2
2.代码实现
#include <stdio.h>
2 #include <stdlib.h>
3 #include <sys/time.h>
4 #include <unistd.h>
5 #include <wiringPi.h>
6
7 #define Trig 0
8 #define Echo 1
9 double getDistance(){
10 struct timeval start;//start time
11 struct timeval stop;//over time
12 pinMode(Trig,OUTPUT);
13 pinMode(Echo,INPUT);
14 digitalWrite(Trig,LOW);
15 usleep(5);
16 digitalWrite(Trig,HIGH);
17 usleep(10);
18 digitalWrite(Trig,LOW);
19
20 /*above initpin*/
21 while(!digitalRead(Echo));//Echo引脚从低电平到高电平说明开始发波
22 //digitalRead()返回当前引脚电平状态 0低电平 1高电平
23 gettimeofday(&start,NULL);
24 while(digitalRead(Echo));
25 gettimeofday(&stop,NULL);
26 long diffTime=1000000*(stop.tv_sec-start.tv_sec)+(stop.tv_usec-start.tv_usec);
27
28 printf("time is %ld\n",diffTime);
29 double dis=(double)diffTime/1000000*34000/2;//单位cm
30 return dis;
31
32
33
34 }
35
36 int main(){
37 double dis;
38 if(wiringPiSetup()==-1){
39 fprintf(stderr,"%s","wiringPiSetup Error");
40 exit(-1);
41
42 }
43 while(1){
44 dis=getDistance();
45 printf("%lf cm\n",dis);
46 usleep(500000);
47
48 }
49
50
51 return 0;
52 }