树莓派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。
#include "wiringPi.h" #include "stdio.h" #include "stdlib.h" void EchoCac(void); int t, t_start,t_end; int Dist; int main(int argc, char * argv[]) { int i, cnt; wiringPiSetupGpio (); // use BCM GPIO mapping pinMode (22, OUTPUT); pinMode (23, INPUT); i = wiringPiISR (23, INT_EDGE_BOTH, &EchoCac); digitalWrite(22, HIGH); delayMicroseconds(10); digitalWrite(22, LOW); printf("Ultrasonic Wave fire out!!!\n"); while(1) { cnt++; } } void EchoCac(void) { if(digitalRead (23) == HIGH) { t_start = micros(); printf("Wave start:%d us\n",t_start); } if(digitalRead (23) == LOW) { t_end = micros(); printf("Echo got:%d us\n",t_end); t = t_end - t_start; Dist = (t*100*340)/2/1000000; printf("Target distance: %d cm\n",Dist); exit(-1); } }