最近手邊拿到了一個超小型的顯示器,使用後覺得還不錯.日後應該蠻有機會應用的上.就先來分享一下好了.   

這是一個OLED的模組,僅僅0.96吋的大小,用I2C或SPI通訊方式來控制.

用pixcel為單位來顯示對pixcel不熟的可以參考我的另一篇文章. Arduino GPS時速表-螢幕分析 - 靜態顯示

而這篇主要是以應用為主,所以就先不提pixcel的顯示方式.

一樣用程式庫的方式來使用.我使用的的是U8glib.

對程式庫不熟的可以參考我的另一篇文章.Arduino 程式庫 (Library)

 

硬體

Mega2560+0.96OLED, 對應線路如下圖.

Arduino 0.96吋 OLED 顯示器

線路不困難,我是插到Mega2560上在個別將電源接上, 如下圖.

Arduino 0.96吋 OLED 顯示器

 

軟體
在安裝完程式庫後就有範例可以使用, 不難理解, 所以我在這邊就直接使用他的範例來改編.

#include "U8glib.h"        // 程式庫

#define MENU_ITEMS 4  // 整個螢幕分成4行顯示


char *menu_strings[MENU_ITEMS]; // 宣告每行存放的陣列
U8GLIB_SSD1306_128X64 u8g(A12, A11, A8, A9, A10);  // 指定硬體對應的腳位

void setup(void)
{
    u8g.setRot180();  // 畫面旋轉180度

    menu_strings[0] = "30sec studio";   // 第1行顯示"30sec studio"
    menu_strings[1] = "0.96 OLED";      // 第2行顯示"0.96 OLED"
    menu_strings[2] = "128x64";           // 第2行顯示"128x64"
    menu_strings[3] = "SPI SSD1306";  // 第2行顯示"SPI SSD1306"
    FlashD(0x01, 0x01);  // 刷新頁面, 選取第1行
}

int i=1;
void loop()
{
    FlashD(i, 0x01); // 循環顯示Bar
    delay(1000);
    i++;
    if (i > 4)
    {
        i = 1;
    }
}

void FlashD(unsigned char iBar, int iLight) // 刷新頁面函式
{
    u8g.firstPage();
    do
    {
        drawMenu(iBar, iLight);
    } while (u8g.nextPage());
}

 

void drawMenu(int iBar, int iLight)  
{                       
    uint8_t i;    
    u8g_uint_t w;  

    u8g.setFont(u8g_font_helvB10); // 設定字型
    u8g.setFontPosTop();  // 顯示位置設定

    w = u8g.getWidth(); // 取得字串顯示高度
    for (i = 0; i < MENU_ITEMS; i++)
    {
        u8g.setDefaultForegroundColor();  // 設定前景色
        if (iLight == 1)
        {
            if (i == (iBar - 1))
            {
                u8g.drawBox(0, i * 16, w, 14); // 設定Bar的區域
                u8g.setDefaultBackgroundColor(); // 設定背景色
            }
        }
        u8g.drawStr(0, i * 16, menu_strings[i]); // 畫出來
    }
}

測試畫面如下.

 

創用 CC 授權條款
Arduino 0.96吋 OLED 顯示器Peng Yi-Hsing製作,以創用CC 姓名標示-非商業性-禁止改作 3.0 台灣 授權條款釋出。

arrow
arrow

    30sec 發表在 痞客邦 留言(0) 人氣()