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

Posted winhaus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树莓派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!!!
");    
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
",t_start);
46     
47     }    
48     
49     if(digitalRead (23) == LOW)
50     {
51     t_end = micros();
52     
53     printf("Echo got:%d us
",t_end);
54     
55     t = t_end - t_start;
56     
57     Dist = (t*100*340)/2/1000000;
58     
59     printf("Target distance: %d cm
",Dist);    
60     
61     exit(-1);
62     
63     }    
64     
65  
66 }
View Code

 

以上是关于树莓派3b+ HC-SR04超声波模块驱动(C语音编写,wiringPi)的主要内容,如果未能解决你的问题,请参考以下文章

树莓派学习目录

树莓派使用HC-SR04超声波测距

《树莓派项目实战》第六节 使用超声波模块测距

《树莓派项目实战》第六节 使用超声波模块测距

树莓派超声测距

linux系统下超声波测距(树莓派)