以下的函數描述是源自原文: https://github.com/olikraus/u8g2/wiki/u8g2reference#begin
自己再通過測試後才發布,采用一個更新方式(精力有限,學習為主),客官覺得不錯,就打賞一下唄~
U8G2是U8GLIB的增強版,相對舊版更加好用,強大,兼容板子多。U8G2有兩種模式:U8g2是增強版模式,U8X8是簡便模式省內存,在setup()裏必須設定模式.
函數開始前,先講一個東西。arduino 和OLED連接的方法(示例NANO和128X64 API OLED)
顏色對顏色線連接。
nano的板子上的D4567腳可以修改。不修改也行。
SCL=S&COLCK //時鍾 SDA=S&DATA //數據 RES/RST = Reset //複位 D/C = DC
API連接這4條交互線就行了,和另外供電。 那麼在代碼中一開始必須定義好腳: (D3號腳可以不接)
U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI u8g2 (U8G2_R0, /* clock=*/ 4, /* data=*/ 5, /* cs=*/ 3, /* dc=*/ 6, /* reset=*/ 7); //這個定義腳代碼細心看就懂了。
//U8G2支持的OLED控製芯片: https://github.com/olikraus/u8g2/wiki/gallery
//不同芯片的不同腳定義代碼: https://github.com/olikraus/u8g2/wiki/u8g2setupcpp
例子:
#include <Arduino.h>
#include <SPI.h>
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 4, /* data=*/ 5, /* cs=*/ 3, /* dc=*/ 6, /* reset=*/ 7);
void setup(void) {
u8g2.begin(); //選擇U8G2模式,或者U8X8模式
}
void loop(void) {
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_ncenB14_tr);
u8g2.drawStr(0,15,"Hello World!");
} while ( u8g2.nextPage() );
delay(1000);
}
複製代碼
U8G2_R0 是一個參數: 指定大局顯示的基本布局:
------------------------------------------------- 屏幕基本函數 -------------------------------------------
u8g2.begin( ) //開始構造U8G2, 在setup()內使用。 特別說明: 初始化在 Arduino的環境。 配置OLED的顯示模式initDiplay或者省電模式setPowerSave,或者重置(清屏)clearDisplay 。同時檢測六個按鈕程序(比如前進、後退、確認、上一級...)。如果沒有,可以在裏定義按鈕事件的引腳,用GetMenuEvent函數來定義,來進入到用戶想要的界麵,詳情就看userInterfaceMessage 和 GetMenuEvent 函數。無返回值。
關聯使用函數:initDispaly 、setPowersave、clearDisplay、
u8g2.clear() // 清除緩衝區"Buffer"內的所有像素點
關聯使用函數:print、home、clearBuffer
u8g2.clearBuffer() //清除內存中的所有緩衝區內的像素,而後可以用sendBuffer函數來把緩衝區“Buffer”在屏幕上顯示出來,以便清屏。因這個過程是在微處理器中RAM裏的副本"Buffer"中進行,標誌“F”,所以 sendBuffer也就是直接操作副本“Buffer”。
關聯使用函數:sendBuffer 例子:
void loop(void) {
u8g2.clearBuffer(); //清除當前Buffer內的像素
// 在Buffer內一些操作
u8g2.sendBuffer(); //發送Buffer內容到屏上
delay(1000);
複製代碼
u8g2.clearDisplay() //清除顯示中所有像素。此過程在begin()中調用。在程序中一般用不上,也是通過sendBuffer和clearBuffer函數顯示出來,一樣的處理方式。
關聯使用函數:begin
u8g2.disableUTF8Print() //禁用 UTF8字集 (萬國語字庫),默認是開啟的。 關聯使用函數:print 、enableUTF8Print
u8g2.enableUTF8Print () //啟用 UTF8字集,許可UniCode向print發送字符串。這個函數通常在begin()後調用。
關聯使用函數:print、disableUTF8Print
例子:
void setup(void) {
u8g2.begin();
u8g2.enableUTF8Print(); // 使print支持UTF8字集
}
複製代碼
u8g2.Print() //在入當前光標位置用當前設置的字體,來打印出(內容)。光標位置可以用setCursor函數 。字體可以用setFont函數。
關聯使用函數:print(U8x8)、enableUTF8Print、setFont、setCursor、
例子:
u8g2.setFont(u8g2_font_ncenB14_tr); //設置字體
u8g2.setCursor(0, 15); //設置光標處
u8g2.print("Hello World!"); //輸出內容
複製代碼
U8x8: 一個自帶字庫,詳情見setFont函數
------------------------------------------------- 繪圖顯示函數 -------------------------------------------
u8g2. drawBitMap() //在指定的x / y位置(位圖左上角)繪製位圖.。位圖的部分可能位於顯示邊界之外。位圖由數組位圖指定。清除位意味著:不繪製像素。數組內的一個置位意味著:用當前顏色索引寫像素。對於單色顯示器,顏色索引0通常會清除一個像素,並且顏色索引1將設置一個像素。 因為複雜耗內存,此函數在U8G2中被停用! 格式:u8g2.drawBitMap (x,y,cnt,h)
參數: x是水平線位置
y是垂直線位置
cnt是點陣圖字節數,寬是1字節*8(這個字節數必須控製好,否則點陣圖會出現扭曲)
h是點陣圖高度
u8g2.drawBox() //畫個實心方形
格式:u8g2.drawBitMap (x,y,w,h)
參數: x是水平線起始位置
y是垂直線 起始 位置
w是方形的寬
h是 方形的 高
例子:
#include <Arduino.h>
#include <SPI.h>
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 4, /* data=*/ 5, /* cs=*/ 3, /* dc=*/ 6, /* reset=*/ 7);
void setup(void) {
u8g2.begin();
}
void loop(void) {
u8g2.firstPage();
do {
u8g2.drawBox(48,20,25,15); //(起始X,起始Y,方形的寬W,方形的高H)
} while ( u8g2.nextPage() );
delay(1000);
}
複製代碼
u8g2.drawCircle() //畫個空心圓,可選四個方向的半圓
類似與關聯函數:drawDisc 、setDrawColor格式:u8g2.drawCircle(x, y ,rad,opt); // X,YS是繪圖起始位置(圓的中心點),rad是圓的四分之一弧度。 opt是選項:
U8G2_DRAW_UPPER_RIGHT //左上角弧度
U8G2_DRAW_UPPER_LEFT //右上角弧度
U8G2_DRAW_LOWER_LEFT //左下角幅度
U8G2_DRAW_LOWER_RIGHT //右下角幅度
U8G2_DRAW_ALL //全圓
例子:
void loop(void) {
u8g2.firstPage();
do {
u8g2.drawCircle(48, 30, 10, U8G2_DRAW_LOWER_LEFT);
} while ( u8g2.nextPage() );
delay(1000);
}
複製代碼
u8g2.drawDisc() //畫個實心圓,使用法跟drawCircle 一個餅樣。多普達手機不好使,圖片將就看。
U8G2.drawEllipse() //畫一個空心橢圓形,實際上,和畫圓是非常相似的用法。格式:u8g2.drawEllipse(X,Y, RX, RY, OPT);
參數: X,Y是橢圓形中心坐標
RX是橢圓形水平線的RAD,RY是垂直線的RAD
opt是選項:
U8G2_DRAW_UPPER_RIGHT //左上角弧度
U8G2_DRAW_UPPER_LEFT //右上角弧度
U8G2_DRAW_LOWER_LEFT //左下角幅度
U8G2_DRAW_LOWER_RIGHT //右下角幅度
U8G2_DRAW_ALL //全圓
例子:
void loop(void) {
u8g2.firstPage();
do {
u8g2.drawEllipse(48, 30, 15, 10, U8G2_DRAW_ALL);
} while ( u8g2.nextPage() );
delay(1000);
}
、
u8g2.drawFilledEllipse() //畫一個實心橢圓形,與u8g2.drawEllipse用法也是一個餅樣
u8g2.DrawFrame //畫一個空心方框格式:
u8g2.drawFrame(X,Y,W,H); // X,Y是方框的左上角坐標,W,H是寬和高,注意,如果方框比屏大,則多出部分不繪畫,也就是說不耗內存和出現錯圖。
例子:
void loop(void) {
u8g2.firstPage();
do {
u8g2.drawFrame(48,30,25,15);
} while ( u8g2.nextPage() );
delay(1000);
}
u8g2.drawGlyph() //繪製字集裏的符號,這個功能很帥。
格式:u8g2.drawGlyph(X, Y, 字集代碼); // XY依然是坐標,字集需要先設置字體,然後參考示圖選擇符號輸出,如下圖
例子:
void loop(void) {
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_unifont_t_symbols); //先設置字體字集
u8g2.drawGlyph(48, 40, 0x2603); //輸出代碼
} while ( u8g2.nextPage() );
delay(1000);
}
u8g.drawLine() //畫一條平麵直線
格式:u8g.drawLine(x0, y0, x1, y1); //x0,y0是直線起始位置, x1,y1是直線終止位置。例子:
u8g.drawLine(20, 5, 5, 32);
drawPixel() //畫一個點,一個點的像素。
格式:drawPixel(x,y) //x,y是畫點的位置。(寬,高)
u8g2.drawRFrame() //畫一個圓角空心方形
u8g2.drawRBox() //畫一個圓角實心方形
特別說明:關於這兩個代碼,綜合一下U8G2裏麵關於畫四邊形的函數:drawBox(實心),drawFrame(空心)這兩個是直角四邊形。然而 drawRBox(實心),drawRFrame(空心) 這兩個帶R的是圓角四邊形的。Box是實心,Frame是空心,帶R的都是圓角。
參數:兩個函數的參數排放一樣: (X起始位,Y 起始位 ,W寬度,H高度,R圓角的半徑(至少R<XY))
例子:
void loop() {
u8g2.firstPage();
do {
u8g2.drawRFrame(20,17,30,22,7);
u8g2.drawRBox(80,25,20,25,5);
} while( u8g2.nextPage());
}
複製代碼
ps:任何一個形狀如果XY初始位置放不好(至少沒有位置能全部繪製出W*H),就會出現一下圖。多出的圖形不會繪製,也就是說不會浪費內存。
u8g2.drawStr() //繪製字符串,可以想象字符串是一串符號,它能輸出什麼“字符串”在屏上。取決於它的setFont被設置的字體集。
說明:一般都配搭著setFont函數使用,當然,如果不需要其它的字體集,在一開始begin()後設置,全局。字體集詳情看setFont函數。一下是三個實例圖。
格式:u8g2.drawStr(X, Y, S ); //S記得加“”。
特別注意,它的初始點XY是在左下角:
u8g.drawTriangle() //繪製實體三角形
格式:u8g.drawTriangle(X0,Y0, X1,Y1, X2,Y2);
X0,Y0 :第一個角位置
X1,Y1 :第二個角位置
X2,Y2 :第三個腳位置
例子:
u8g.drawTriangle(20,5, 27,50, 5,32); //至於如何控製顯示要預想的位置,看多幾次圖片就明白了,很簡單。