Arduino控制超聲波檢測與0.96OLED及串口顯示代碼使用庫共享(包括超聲波檢測與U8glib):
使用元件:
- 0.96寸 12864 I2C OLED 128x64規格
- 超聲波檢測模塊 濕度模塊
- ARDUINO UNO
- 面包板
- 跳線



- u8glib是目前arduino上使用的最多的點陣液晶顯示器驅動庫,它支持型號眾多的液晶顯示器,詳情查閱:
u8glib
u8glib是目前arduino上使用的最多的點陣液晶顯示器驅動庫,它支持型號眾多的液晶顯示器。
由於Google被牆,原u8glib項目頁(https://code.google.com/p/u8glib/)訪問不了,為方便國內用戶,於是搬運了一個過來。僅作搬運,不對正確性做保證,且更新不定。
如有疑問,請到 Arduino中文社區(http://www.arduino.cn/) 提出
u8glib支持設備:http://clz.me/u8glib/device/
u8glib函數參考:http://clz.me/u8glib/reference/
Left: NHD-2.7-12864 OLED (SSD1325), right: EA DOGS102 LCD (UC1701)
庫文件下載鏈接:
U8glib for Arduino: https://bintray.com/olikraus/u8glib/Arduino
U8glib for AVR: https://bintray.com/olikraus/u8glib/AVR
U8glib for ARM: https://bintray.com/olikraus/u8glib/ARM
Converter for BDF fonts: bdf2u8g_101.exe on google drive.
(將文件解壓后導入到Arduino IDE安裝路徑中的library文件中即可)
OLED接線方式:
VCC<————>3.3V
GND<————>GND
SCL<————>SCL
SDA<————>SDA
超聲波接線方式:
Trig 2 //引腳Tring 連接 IO D2
Echo 3 //引腳Echo 連接 IO D3
//OLED接線方式:
//VCC<————>3.3V
//GND<————>GND
//SCL<————>SCL
//SDA<————>SDA
//接線方式:
//Trig 2 //引腳Tring 連接 IO D2
//Echo 3 //引腳Echo 連接 IO D3
//LingShun LAB
#include "U8glib.h"
// OLED庫
#define Trig 2 //引腳Tring 連接 IO D2
#define Echo 3 //引腳Echo 連接 IO D3
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE); // I2C
float cm; //距離變量
float temp; //
void draw(void) {
u8g.setFont(u8g_font_8x13); //使用8x13大小的字符
u8g.setPrintPos(0, 20); // 對應 x,y 軸值
u8g.print("Echo =");
u8g.setPrintPos(50, 20);
u8g.print(temp);
u8g.setPrintPos(0, 40);
u8g.print("Dist =");
u8g.setPrintPos(50, 40);
u8g.print(cm);
u8g.setPrintPos(100, 40);
u8g.print("");
}
void setup() {
Serial.begin(9600);
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
}
void loop() {
//給Trig發送一個低高低的短時間脈沖,觸發測距
digitalWrite(Trig, LOW); //給Trig發送一個低電平
delayMicroseconds(2); //等待 2微妙
digitalWrite(Trig,HIGH); //給Trig發送一個高電平
delayMicroseconds(10); //等待 10微妙
digitalWrite(Trig, LOW); //給Trig發送一個低電平
temp = float(pulseIn(Echo, HIGH)); //存儲回波等待時間,
//pulseIn函數會等待引腳變為HIGH,開始計算時間,再等待變為LOW並停止計時
//返回脈沖的長度
//聲速是:340m/1s 換算成 34000cm / 1000000μs => 34 / 1000
//因為發送到接收,實際是相同距離走了2回,所以要除以2
//距離(厘米) = (回波時間 * (34 / 1000)) / 2
//簡化后的計算公式為 (回波時間 * 17)/ 1000
cm = (temp * 17 )/1000; //把回波時間換算成cm
Serial.print("Echo =");
Serial.print(temp);//串口輸出等待時間的原始數據
Serial.print(" | | Distance = ");
Serial.print(cm);//串口輸出距離換算成cm的結果
Serial.println("cm");
delay(100);
u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );
delay(200);
}
