MAPLEボードでOB基板に画像表示

mbedやLPCXpressoを搭載して開発できる、MAPLEボード。 これを用いてOLEDモジュールに画像表示させてみました。 /media/uploads/y_notsu/_scaled_p1060335_mini.jpg

Kazuhiro Ouchiさんの記事MARY OB基板(OLED)をmbedに接続してみました を読むと、@nxpfanさんのMAPLE用OLEDライブラリMARMEX_OB基板OLEDライブラリ (MARMEX_OB_oled)があるとか。。。

これをほぼそのまま流用させてもらいました(;

そのままでは面白くないので、 1画面分の画像DataをHeaderファイルとして作成し、 それを読み込んで表示させています。 こちらもPIC向けQVGA-LCDのコードを参考にさせてもらいました。

画像ファイルHeader(私は"imgdata.h"として記述)は以下のような記述にします。

const unsigned int Header1[16386]={ //配列Dataを作成. 128 x 128 + 2 = 16386
0x0080,0x0080,   //1st data: Image Height, 2nd data: Image Width
0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF, //Image data
0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
・・・・
0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF
};

DataはRGB565形式としました。画像抽出プログラムは別途自作してます。

OLEDライブラリに含まれているNokia LCDのライブラリでは、外部からのRGB888bitの Dataを読み込んで、内部でRGB444形式にしています。

そのため、画像Data(RGB565形式)をRGB888形式にする必要がありました。 mainプログラムに以下のサブルーチンを組み込みました。

void oled_image2(const unsigned int *ptr)
{
   short height,width;
   int colour;
   height = *ptr;
   ptr++;
   width = *ptr;
   ptr++;
   oled1.locate(0,0);
   for(int i=1;i<=width;i++)
   {
    for(int j=1;j<=height;j++)
    {
      colour = (((*ptr&0xF800)<<8) | ((*ptr&0x07E0)<<5) | ((*ptr&0x001F)<<3)); //for RGB888
      oled1.pixel(j,i,colour);
      ptr++;
    }
   }
}

これをmain関数の中で

oled_image2(Header1);

のように呼び出せば、画像Dataを読みこんで表示してくれます。

※ 1枚分の画像Dataを組み込むと、binファイルが101KB程度になります。


Please log in to post comments.