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

超声波模块介绍:

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