Arduino控制超聲波檢測與0.96OLED及串口顯示


Arduino控制超聲波檢測與0.96OLED及串口顯示代碼使用庫共享(包括超聲波檢測與U8glib):

使用元件:

  1. 0.96寸 12864 I2C OLED 128x64規格
  2. 超聲波檢測模塊 濕度模塊
  3. ARDUINO UNO
  4. 面包板
  5. 跳線
    在這里插入圖片描述在這里插入圖片描述
    在這里插入圖片描述
  • 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);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM