树莓派3b+ HC-SR04超声波模块驱动(C语音编写,wiringPi)

超声波模块介绍:

信号连接:

Vcc -- 5v

Trig -- Pin 15 (Broadcom GPIO 22)

Echo -- Pin 16 (Broadcom GPIO 23)

Gnd -- Gnd

主要逻辑介绍:

使用wiringPi中的中断函数,wiringPiISR (23, INT_EDGE_BOTH, &EchoCac); 上升、下降沿皆可触发。

中断服务函数:EchoCac()记录上升沿、下降沿时间。

设置 Broadcom GPIO 22发射10us高电平,之后低电平,然后等待中断触发。

该代码可以工作,返回探测距离,单位为cm。

 1 #include "wiringPi.h"
 2 #include "stdio.h"
 3 #include "stdlib.h"
 4 
 5 void EchoCac(void);
 6 
 7 
 8 int t, t_start,t_end;
 9 int Dist;
10     
11 
12 int main(int argc, char * argv[])
13 {
14     int i, cnt;
15     
16     wiringPiSetupGpio ();   // use BCM GPIO mapping
17     
18     pinMode (22, OUTPUT);
19     
20     pinMode (23, INPUT);
21     
22     i = wiringPiISR (23, INT_EDGE_BOTH, &EchoCac);
23                 
24     digitalWrite(22, HIGH);
25     delayMicroseconds(10);
26     digitalWrite(22, LOW);    
27     printf("Ultrasonic Wave fire out!!!\n");    
28             
29 
30     while(1)
31     {
32         cnt++;
33     }
34 
35 }
36 
37 void EchoCac(void)
38 {
39     
40     if(digitalRead (23) == HIGH)
41     {
42     
43     t_start = micros();
44     
45     printf("Wave start:%d us\n",t_start);
46     
47     }    
48     
49     if(digitalRead (23) == LOW)
50     {
51     t_end = micros();
52     
53     printf("Echo got:%d us\n",t_end);
54     
55     t = t_end - t_start;
56     
57     Dist = (t*100*340)/2/1000000;
58     
59     printf("Target distance: %d cm\n",Dist);    
60     
61     exit(-1);
62     
63     }    
64     
65  
66 }
View Code

猜你喜欢

转载自www.cnblogs.com/winhaus/p/12240888.html