666
硬件模塊:? ?樹莓派小車Arduino核心板+轉(zhuǎn)接板、超聲波測距傳感器、OLED顯示單元
??
? 硬件接線:? ?Arduino轉(zhuǎn)接板-----------OLED顯示單元
? ? ? ? ? ? ? ? ? ? ?P15----------------P1
? 實驗現(xiàn)象:? ? OLED屏幕顯示小車前后超聲波距離數(shù)據(jù)
? 更新時間:2019-09-06
********************************************************/
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4? //設置OLED引腳
Adafruit_SSD1306 display(OLED_RESET);
//前置超聲波模塊引腳
#define Trig 32 //引腳Tring 連接 IO 32
#define Echo 33 //引腳Echo 連接 IO 33
//后置超聲波模塊引腳
#define Trig1 36 //引腳Tring 連接 IO 35
#define Echo1 37 //引腳Echo 連接 IO 37
void setup()? ?{
? Serial.begin(115200);
? delay(500);
? display.begin(SSD1306_SWITCHCAPVCC, 0x3C);? // 初始化OLED
? display.clearDisplay();? ?// 清屏
? display.setTextSize(1);
? display.setTextColor(WHITE);
? display.setCursor(0, 0);
? pinMode(Trig, OUTPUT);
? pinMode(Echo, INPUT);
? pinMode(Trig1, OUTPUT);
? pinMode(Echo1, INPUT);
}
void loop() {
? display.clearDisplay();? ?// 清屏
? display.setCursor(20, 0);
? display.print("Ultrasonic Test");
? ultrasonic_A();//調(diào)用前置超聲波測距函數(shù)
? delay(100);
? ultrasonic_B();//調(diào)用后置超聲波測距函數(shù)
? display.display();//OLED屏幕更新顯示數(shù)據(jù)
??
}
double? cm; //距離變量
int a;
double b;
float temp;
float cm1; //距離變量
float temp1; //
/**************************************************************
*功? 能:前置超聲波測距函數(shù)
*參? 數(shù): 無
*返回值: 無
**************************************************************/
void ultrasonic_A()
{
? //給Trig發(fā)送一個低高低的短時間脈沖,觸發(fā)測距
? digitalWrite(Trig, LOW); //給Trig發(fā)送一個低電平
? delayMicroseconds(2);? ? //等待 2微妙
? digitalWrite(Trig, HIGH); //給Trig發(fā)送一個高電平
? delayMicroseconds(10);? ? //等待 10微妙
? digitalWrite(Trig, LOW); //給Trig發(fā)送一個低電平
? temp = float(pulseIn(Echo, HIGH)); //存儲回波等待時間,pulseIn():用于檢測引腳輸出的高低電平的脈沖寬度。
? cm = (temp * 17 ) / 1000; //把回波時間換算成cm
? a = (int)cm;
? b = (cm - a) * 100;
? display.setCursor(0, 20);
? display.print("distance_A:");
? display.print(cm);
? display.print("cm");
}
/**************************************************************
*功? 能:后置超聲波測距函數(shù)
*參? 數(shù): 無
*返回值: 無
**************************************************************/
void ultrasonic_B()
{
? //給Trig發(fā)送一個低高低的短時間脈沖,觸發(fā)測距
? digitalWrite(Trig1, LOW); //給Trig發(fā)送一個低電平
? delayMicroseconds(2);? ? //等待 2微妙
? digitalWrite(Trig1, HIGH); //給Trig發(fā)送一個高電平
? delayMicroseconds(10);? ? //等待 10微妙
? digitalWrite(Trig1, LOW); //給Trig發(fā)送一個低電平
? temp1 = float(pulseIn(Echo1, HIGH)); //存儲回波等待時間,pulseIn():用于檢測引腳輸出的高低電平的脈沖寬度。
? cm1 = (temp1 * 17 ) / 1000; //把回波時間換算成cm
? display.setCursor(0, 40);
? display.print("distance_B:");
? display.print(cm1);
? display.print("cm");
}