電音の歩み

電子楽器を中心とし、ものづくり関係も含めて紹介していきます。

OLED(SSD1306)用の激軽arduinoライブラリを作る その3

■デモ

下記ライブラリを使用したサンプルプログラムによるデモ動画です。

フレームパッファレスのライブラリでもこれくらいはできます。処理は軽いです。

ライブラリのSRAM消費量は249byteでした。

サンプルプログラム

  youtu.be

#0  オープニングメッセージ

#1 DrawString M/S   中/小フォントで文字列"FontWidth"を表示し、文字幅を変えています。

#2 DrawString M/S   #1にアンダーラインをつけています。

#3 DrawString M/S   #1の白黒反転

#4 DrawFont M 中フォントを列挙しています。

#5 DrawFont S 小フォントを列挙しています。

#6 DrawRect/FillRect/ DrawNum S  バーによるレベル表示例

 

https://drive.google.com/file/d/1lXw26WOLtMkpTJcAGS-ft_cxMua1YiMo/view?usp=drive_link

 

arduino (ATmega328/AVR64DB32)用ライブラリ

まず、arduino互換ボード用に、AVR用のライブラリを試作しました。スイッチサイエンスではもう少し評価してからアップしますので、仕様は変わるかもしれません。

//---------------------------------------------------------------------------
//  ## class library ##

// oledHYLib1.h
//---------------------------------------------------------------------------
class OLEDHY{
  public:
    // ---------- コンストラクタ (任意のDC,RESET,CS ピンの指定)
    OLEDHY( unsigned char DC, unsigned char RESET, unsigned char CS );

    
     // ---------- メンバ関数(メソッド)の定義
    void begin( void );       // GPIOとSPIの初期化
    void disp_on( void );     // 表示する
    void disp_off( void );    // 表示を消す SSD1306内のGDDRAMは消えない
    
    // ---- clear/fill系 GDDRAMをクリア、8bitのPagePatternで任意矩形領域にフィル

    void clearFullPage( void ); //
    void clearRect( unsigned char XstartBit, unsigned char YstartPage, unsigned char XlengthBit, unsigned char YlengthPage );
    void fillRect( unsigned char PagePat, unsigned char XstartBit, unsigned char YstartPage, unsigned char XlengthBit, unsigned char YlengthPage );

 

    // ---- area fill系 bitmapを任意矩形領域に転送

    //  SRAM領域用とFlash領域用(_pgm)がある
    void drawRect( unsigned char *p, unsigned char XstartBit, unsigned char YstartPage, unsigned char XlengthBit, unsigned char YlengthPage );
    void drawRect_pgm( unsigned char *p, unsigned char XstartBit, unsigned char YstartPage, unsigned char XlengthBit, unsigned char YlengthPage );

 

    // ---- singleFont/strings系 HYs: small font(5*7) 縦1page(8dot)  HYm: midlle font(6*11) 縦2page(16dot)
    //    fontwidth: 空白を含むフォント横幅(fontの横dot数以上に設定のこと)
    void draw_VfontHYm( char code,  unsigned char XstartBit,unsigned char YstartPage , unsigned char fontwidth);
    void draw_VfontHYs( char code,  unsigned char XstartBit,unsigned char YstartPage , unsigned char fontwidth);
    void draw_stringHYm( char *s, unsigned char XstartBit,unsigned char YstartPage, unsigned char fontwidth);
    void draw_stringHYs( char *s, unsigned char XstartBit,unsigned char YstartPage, unsigned char fontwidth);

 

    // ---- 整数の表示
    void draw_num_m( int num,  unsigned char XstartBit,unsigned char YstartPage , unsigned char fontwidth);
    void draw_num_s( int num,  unsigned char XstartBit,unsigned char YstartPage , unsigned char fontwidth);
    
     unsigned char attr = 0;       // 0: non modification  1: under line , 2: reverse B/W   draw_stringHYm,draw_stringHYs に反映 
};