1. 程式人生 > >Arduino使用OLED顯示內容

Arduino使用OLED顯示內容

之前買了一塊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 ");  
  }
}