概要
OLED に直接制御コマンドを流し込みます。
今回はあまり実用的でも初心者向けでもありません。
ハードウェア的な話
OLED の型番
https://github.com/Arduboy/Arduboy/blob/master/src/core/core.h#L112
分解しなくてもライブラリに書いてあったのですぐわかりました。
OLED のデータシート(マニュアル)
https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf
英語ですが、マニュアルがありました。
ソフトウェア的な話
コマンドの送り方
ArduboyCore
クラス( Arduboy
クラスのベースクラス )に、関数があります。
1 | void static LCDDataMode(); //< put the display in data mode |
名前についてツッコむのは野暮ってもんです。
LCDDataMode()
は OLED の受信モードを、表示データを受信するモードにしますLCDCommandMode()
は OLED の受信モードを、制御コマンドを受信するモードにしますsendLCDCommand()
は、上記二つを自動で発行し、その間に 1byte の制御コマンドを送信する便利関数です
1 | void ArduboyCore::sendLCDCommand(uint8_t command) |
コアライブラリは、常に表示データ受信モードになっている前提で作られているので、受信モードを変更したあとは必ず戻すようにしておきます。
試しに送ってみる
コントラストを変更するコマンドを発見したので、試しに送ってみます。
1 | u8 c = 0; |
setup()
関数等は省略しますが、上記のソースでコントラストを 0〜255 に変化しま……す?
確かに変化はしましたが、真っ暗までにはならず、また階調も三階調ほどしか変化しないようでした。残念。フェードイン・フェードアウトに使えるかと思ったのですが('ω`)
おわり
データシートを読むと他にも色々面白そうな制御コマンドがあるので、色々試してみると面白いかもしれません。