-
Notifications
You must be signed in to change notification settings - Fork 0
OLED_SH1106
SH1106
コントローラを用いたOLEDパネル(I2C)制御用の疑似コンソールクラス。
現状は 0.96インチ 128x64ピクセル 単色OLEDパネル用を横向きで使用する機能と
初期化インスタンスのみ提供されている。
疑似コンソールなのでピクセル直接描画は出来ない。ASCIIキャラクタ描画専用。
SSH1107
コントローラ用の実装は [OLEDディスプレイ(U119)キャラクタコンソール実演] を参照のこと。
SH1106
は内部的に132x64ピクセルぶんのGDDRAMを持っているが、 ここでは128x64ピクセルパネルを使用し両端2ピクセルが存在しない品種を対象にしている。
#include <OLED_SH1106_128x64.h>
OLED_SH1106_Class OLED = {Wire, moderndos_8x16_vh};
Wire.initiate(TWI_SM, false);
OLED.clear();
OLED.println(F("Hello World!"));
I2C通信速度はTWI_SM
(100kbps)が標準だが
TWI_FM
(400kbps)も選択可能。
低速対応も可能。
依存性:<api/TWIM.h>
<FontSets.h>
class OLED_SH1106_Class
を定義する。
OLED_SH1106_Class OLED = {Wire, moderndos_8x16_vh};
初期化子の第1引数には<api/TWIM.h>
のTWIM
クラスインスタンスを、
第2引数には 8x16 ピクセルかつビットマップ方向が縦向きのモノクロフォントセットを指定する。
既定フォントセットはキャラクタコード0x20
〜0x7F
のグリフ集合と見做され、
1キャラクタ=16Bytesで、計1536Byte長が使用される。
既定では単にOLED
へプリントしていけば、それはスクロールコンソール表示になる。
\r
で仮想カーソル位置が行頭に復帰、
\n
で新規改行、
16文字毎に行頭折返しで自動的にスクロールが進む。
OLED.println(F("Hello World!"));
clear(false)
メソッドで画面消去すると、以後は絶対位置表示モードになる。
仮想カーソルが画面表示外に移動しても自動スクロールはされない。
仮想カーソル位置は左上原点としてsetPosition(X,Y)
で自由に設定できる。
OLED.clear(false);
OLED.setPosition(0, 0).print(F("1st line"));
OLED.setPosition(0, 1).print(F("2nd line"));
4行分の画面があるので、仮想カーソルのY
は3
まで指定可能。
上下方向の表示開始位置はsetScroll(Z)
メソッドで変更することができる。
Z
には0
から63
が指定でき、ピクセル単位で調整できる。
これを使うと1ピクセル単位のスムーズスクロールができる。(画面上下はリング状に繋がっている)
OLED.setPosition(0, 0).print(F("top view"));
OLED.setPosition(0, 3).print(F("end view"));
OLED.setScroll(0); /* "top view" is top */
OLED.setScroll(48); /* "end view" is top */
128x32ピクセルパネルの場合、2行だけが表示されるが 内部的には4行分のメモリが保持されている。
特定の行だけをクリアするにはnewLine(Y)
メソッドを使用する。
OLDE.newLine(1);
絶対位置表示を止めてスクロール表示に戻すにはclear(true)
メソッドを実行する。
OLEDパネルを消灯し、スリープ状態にする。
メソッドチェーン可能。
disable
状態から復帰するには
clear
または
setContrast
を使用する。
スリープ中も通電されている限り表示RAM内容は保持される。
OLED.disable();
画面スリープ中でも描画命令は反映される。
OLEDパネルを初期化し、表示内容をクリアする。
仮想カーソル位置は左上原点(0,0)
に置かれる。
メソッドチェーン可能。
電源断状態からOLEDパネルを使用開始するには
最初にこのメソッドが使用されなければならない。
引数にtrue
(省略時既定値)が指定されるとスクロール表示モードとなる。
引数にfalse
が指定されると絶対位置表示モードになる。
OLED.clear();
OLEDパネルの表示向きを変更する。
引数がfalse
(既定値)で正位置、true
で180度逆位置になる。
メソッドチェーン可能。
90度回転することは出来ない。
左右反転(鏡像)表示は支援されない。
OLED.setFlip(true);
OLEDパネルの表示状態を変更する。
引数がfalse
(既定値)で黒地に白(点灯)、true
で白地に黒(消灯)となる。
メソッドチェーン可能。
点灯ドットが多いほど消費電力は増加する。
OLED.setRevesible(true);
OLEDパネルの輝度を変更する。
0
〜255
が指定可能。
メソッドチェーン可能。
初期値は128
(50%)
輝度が高いほど消費電力は増加する可能性がある。 またこのメソッドはOLEDパネルのスリープ状態を解除する。
OLED.setContrast(128);
OLEDパネルの表示開始位置を変更する。
0
〜64
が指定可能。
メソッドチェーン可能。
OLED.setScroll(32);
このメソッドは絶対位置表示モードにて機能し、 スクロール表示モードでは意図した結果とならない。
仮想カーソル位置を指定位置に変更する。 メソッドチェーン可能。
OLED.setPosition(0, 0).print(F("1st line"));
OLEDパネル全面にテストパターンを表示する。 メソッドチェーン可能。
OLED.drawTestPattern();
使用する既定フォントセット(キャラクタコード0x20
〜0x7F
の範囲:1536Bytes)を変更する。
指定するポインタはPGMEM
を指していなければならない。
メソッドチェーン可能。
OLED.setFontSet(moderndos_8x16_vh);
上位拡張フォントセット(キャラクタコード0x80
〜0xFF
の範囲:2048Bytes)を変更する。
指定するポインタはPGMEM
を指していなければならない。
メソッドチェーン可能。
OLED.setExtTableInROM(moderndos_8x16_vh);
キャラクタコード
0x00
〜0x0F
のグリフはこの範囲の後方に追加できる。
外字フォントセット(キャラクタコード0x10
〜0x1F
の範囲:256Bytes)を変更する。
指定するポインタはデータメモリ(RAM)
を指していなければならない。
メソッドチェーン可能。
/* Global value */
static uint8_t extra_table[256] = {};
OLED.setExtTableInRAM(extra_table);
日本語漢字表示を行うには、漢字ROMからグリフを読み出し、RAMに書き、外部フォントセットとして描画する。 横倍角描画も同様。 縦倍角描画は2行に分けてこれを行う。
グリフ合成ユーティリティ。 主に外字フォントセット領域へのグリフ合成に使用する。 メソッドチェーン可能。
for (int i = 0; i < 16; i++) {
OLED
.setExtFont(&extra_table[i << 4], '@' + i, OLED_SET) /* Load ROM Font */
.setExtFont(&extra_table[i << 4], '\x0', OLED_XOR) /* Exor Mask */
;
}
第1引数には書き出されるデータメモリ(RAM)ポインタを渡す。
第2引数には読み出されるフォントセットのキャラクタコードを指定する。
ただし0x20
未満はキャラクタではなく塗りつぶし
と見做される。
第3引数には RAMに対する合成論理を指定する。
合成指定 | 説明 |
---|---|
OLED_SET | RAMにグリフをコピーする(既定値) |
OLED_OR | RAMにグリフをOR合成する |
OLED_AND | RAMにグリフをAND合成する |
OLED_XOR | RAMにグリフをXOR合成する |
指定カーソル絶対位置に直接指定キャラクタを描画する。
メソッドチェーン可能。
制御文字は解釈されないのでキャラクタコード0x00
〜0x0F
範囲も描画できる。
第1引数に指定した行の描画を消去する。
第2引数がtrue
ならそれを画面最下行になるようスクロールする。
メソッドチェーン可能。
仮想カーソル位置に指定キャラクタを描画する。 描画したキャラクタ数を返す。メソッドチェーン不可。 以下の制御文字が解釈される。
制御文字 | 説明 |
---|---|
\b | 仮想カーソルを左に1文字戻す。ただし画面左端から前行には戻らない。 |
\r | 仮想カーソルを画面左端の行頭に戻す。表示行中の描画は消されない。 |
\n | 仮想カーソルを次行に(真下に)移動する。移動先の行の描画は消去される。 |
\f | 現在の画面を消去し、仮想カーソルを左上原点に移動する。 |
\t | 仮想カーソルを次の水平タブ位置(4カラム単位)まで右に進める。移動範囲の描画は消されない。 |
write
に同じだがメソッドチェーン可能。
print文とその派生メソッドは<api/Print.h>
を参照のこと。
Twitter(X): @askn37
BlueSky Social: @multix.jp
GitHub: https://github.com/askn37/
Product: https://askn37.github.io/
Copyright (c) 2022,2023 askn (K.Sato) multix.jp
Released under the MIT license
https://opensource.org/licenses/mit-license.php
https://www.oshwa.org/
multix.jp/てくにかるむ(休眠中)
Multix Zinnia Product SDK [*AVR]
AVR.JP(日本語訳)
AVR-LIBC(日本語訳)