标签:out ppi gpio target com 树莓派3 pen har 测距
超声波模块介绍:
信号连接:
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!!!\n"); 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\n",t_start); 46 47 } 48 49 if(digitalRead (23) == LOW) 50 { 51 t_end = micros(); 52 53 printf("Echo got:%d us\n",t_end); 54 55 t = t_end - t_start; 56 57 Dist = (t*100*340)/2/1000000; 58 59 printf("Target distance: %d cm\n",Dist); 60 61 exit(-1); 62 63 } 64 65 66 }
树莓派3b+ HC-SR04超声波模块驱动(C语音编写,wiringPi)
标签:out ppi gpio target com 树莓派3 pen har 测距
原文地址:https://www.cnblogs.com/winhaus/p/12240888.html