树莓派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);
}
}