Arduino使用OLED顯示內容
阿新 • • 發佈:2019-01-06
之前買了一塊OLED,128×64,晶片為SSD1306,IIC介面
給的資料很少,網上找到支援庫為U8glib,貌似這個已經很久不更新了
新的庫叫U8g2,可以直接在Arduino庫中找到並下載
下載了U8glib,發現例子基本都是SPI介面的,IIC的
U8glib例子中沒有IIC的介面使用方法,到處找資料
硬體連線為A5-SCL,A4-SDA,並且定義如下
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
幾個常用的方法:
u8g.setRot90(); //旋轉90° u8g.setRot180(); //旋轉180° u8g.setRot270(); //旋轉270° u8g.undoRotation(); //取消旋轉 u8g.setFont(u8g_font_osb18); //設定字型 u8g.drawStr(0, 20, "ABC"); //畫出字元在(0,20)的位置 u8g.setPrintPos(0,15); //設定位置 u8g.print("Error Code: "); //列印內容 u8g.drawBitmapP( 0, 0, 1, 9, bitmap); //畫點陣圖,每行一個位元組(8個點),總共9行,資料定義在bitmap[] u8g.drawXBMP( 0, 0, 38, 24, bitmap); //畫點陣圖,38×24,資料定義在bitmap[] // 還有一個需要注意的地方,u8g有快取,所以一般顯示要使用下面的方法,將繪圖函式放到draw()中 void loop(void) { // picture loop u8g.firstPage(); do { draw(); } while( u8g.nextPage() ); // rebuild the picture after some delay delay(1000); }
後面又下載了U8g2,功能更強大了,提供了對話方塊什麼的,直接使用例子就行,非常方便
#include <u8x8lib.h> U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE); void setup(void) { // 定義輸入按鍵 u8x8.begin(/*Select=*/ 7, /*Right/Next=*/ A1, /*Left/Prev=*/ A2, /*Up=*/ A0, /*Down=*/ A3, /*Home/Cancel=*/ 8); } void loop(void) { uint8_t r; u8x8.setFont(u8x8_font_chroma48medium8_r); r = u8x8_UserInterfaceMessage(u8x8.getU8x8(), "Message", "Box", NULL, " Ok \n Cancel "); if ( r == 0 ) { u8x8.userInterfaceMessage("You pressed the", "Home/Quit", "Button", " Ok "); } else if ( r == 1 ) { u8x8.userInterfaceMessage("You selected the", "Ok", "Button", " Ok "); } else if ( r == 2 ) { u8x8.userInterfaceMessage("You selected the", "Cancel", "Button", " Ok "); } }