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