树莓派外设开发——超声波
生活随笔
收集整理的這篇文章主要介紹了
树莓派外设开发——超声波
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.綜述
樹莓派外設開發需要用的wiringPi()庫函數
在調用時需要包含#include<wiringPi.h>文件
使用wiringPi()庫函數時需要將其初始化,方法為:調用
int wiringPiSetup();函數
編譯時需要連接 -lwiringPi庫函數
2.Linux中的測時方法
2.1 Linux中的struct timeval的結構體
timeval是time.h中的預定義結構體 其中包含兩個一個是秒,一個是微秒
struct timeval {
__kernel_time_t tv_sec; /* seconds /
__kernel_suseconds_t tv_usec; / microseconds */
};
2.2用 gettimeofday(&tv1, NULL);函數來獲取當前的時刻
2.3 獲取時間函數的具體用法
獲得當前時間相對于某一時刻(1970年1月1日到現在的時間)的時間的秒和微秒部分
3.超聲波測距代碼實現
#include <stdio.h> #include <sys/time.h> #include <stdlib.h> #include <wiringPi.h>#define echo 27 #define trig 28void ultrasonicInit() {pinMode(echo,INPUT);pinMode(trig,OUTPUT);}double getDistance() {double dis;struct timeval start_tv;struct timeval end_tv;double start_time,end_time;//1.trig端口發送至少10us的高電平digitalWrite(trig,LOW);//先將trig引腳置低usleep(5);digitalWrite(trig,HIGH);//拉高usleep(10);//延遲10usdigitalWrite(trig,LOW);//2.echo 由低電平變為高電平表示開始發生while(!digitalRead(echo));//等待echo由低電平變為高電平gettimeofday(&start_tv,NULL);//獲取開始發送的start_time = start_tv.tv_sec*1000000+start_tv.tv_usec;//3.echo由高電平變為低電平表示超聲波遇障礙物反彈回來接收回來的時間gettimeofday(&end_tv,NULL);end_time = end_tv.tv_sec*1000000+end_tv.tv_usec;//4.計算距離: 距離 = 速度 * 時間 dis = (end_time - start_time)/1000000*34000/2;return dis;return dis; } int int main(int argc, char const *argv[]) {double distance;//wiringPi庫的初始化if(wiringPiSetup() == -1){printf("wiringPi庫的初始化失敗\n");exit(-1);}//引腳初始化ultrasonicInit();//不斷測量距離while(1){distance = getDistance();printf("distance = %0.2f\n",distance );delay(1000);}return 0; }總結
以上是生活随笔為你收集整理的树莓派外设开发——超声波的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: curl网络访问时报错:(56) Rec
- 下一篇: sqldeveloper修改jdk配置