12_OLED-flowing
OLEDの文字をスクロールさせる
OLEDに表示した「CherryIoT」の文字を横方向へ動かします。
準備する
CherryIoTとモジュールを接続する
CherryIoTの指定コネクタに以下のモジュールを接続し、CherryIoTをPCのUSB-A挿入口に接続します。
OLEDモジュール
接続先:A
Arduino IDEに必要なライブラリをインストールする
このサンプルでは、次のライブラリを追加する必要があります。
- Adafruit GFX Library
- Adafruit SSD1306
初めて使用する場合のみインストールしてください。
ライブラリをインストールするサンプルコード
GitHubで公開しているサンプルコードです。コードをコピーして Arduino IDEで使用します。
GitHubからコードを読み込んでいます...プログラムを書き込む
上のサンプルコードをコピーし、Arduino IDEに貼りつけます。
ボードとポートの設定を確認し、左上の 「→(書き込みボタン)」を押してCherryIoTに書き込みます。
初めて書き込む方は「はじめてのCherryIoT」で詳しい手順を確認してください。
動作確認
OLED上の「CherryIoT」が横方向へ流れるように動くなら成功です。
コードの解説
繰り返しごとに表示位置を変更し、画面を消去して描き直すことで文字を移動させます。
GitHubからコードを読み込んでいます...#include <Wire.h>OLEDとI2C通信を行うため、Wireライブラリを読み込みます。I2Cは、SDAとSCLの2本の信号線でデータをやり取りする通信方式です。
#include <Adafruit_GFX.h>OLEDへ文字や図形を描く基本機能を使うため、Adafruit GFXライブラリを読み込みます。
#include <Adafruit_SSD1306.h>SSD1306方式のOLEDを操作するため、Adafruit SSD1306ライブラリを読み込みます。
#define SCREEN_WIDTH 128OLEDの横幅128ピクセルを、SCREEN_WIDTHという名前で定義します。ピクセルは画面を構成する小さな点です。
#define SCREEN_HEIGHT 64OLEDの縦幅64ピクセルを、SCREEN_HEIGHTという名前で定義します。
#define OLED_RESET -1OLED専用のリセット端子を使わないことを示す-1を、OLED_RESETとして定義します。
#define SCREEN_ADDRESS 0x3COLEDのI2Cアドレス0x3Cを、SCREEN_ADDRESSとして定義します。I2Cアドレスは、通信相手を識別するための番号です。
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);画面サイズ、I2C通信に使うWire、リセット設定を指定し、OLEDを操作するdisplayオブジェクトを作ります。
void setup()setup関数は電源を入れたときやリセットしたときに1回だけ実行されます。ここでOLEDの通信、初期化、文字の折り返しを設定します。
Wire.begin(1, 3);コネクタAのSDAに対応するGPIO1と、SCLに対応するGPIO3を指定してI2C通信を開始します。
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {指定したI2CアドレスのOLEDを初期化します。先頭の!は結果を反転する記号で、初期化に失敗した場合に直後の処理を実行します。
for(;;);初期化に失敗した場合は、終了条件のないfor文で処理を止めます。OLEDを使用できない状態で、その先へ進まないためです。
display.setTextWrap(false);文字が画面の右端へ達しても自動的に次の行へ折り返さないよう設定します。「CherryIoT」を1行のまま横へ移動させるために必要です。
void loop()loop関数はsetup関数のあとに繰り返し実行されます。文字の横位置を少しずつ変えながら画面を描き直し、流れるような動きを作ります。
for(int i=0; i<128; i++){横位置を表す整数型の変数iを0から始め、128未満の間、処理後にiを1増加させます。OLEDの横幅に合わせて、文字の開始位置を左端から右へ移動します。
display.clearDisplay();メモリー上の画面データを消去します。前の位置に描いた文字を消し、残像を残さず次の位置へ描き直すために必要です。
display.setTextSize(2);表示する文字の大きさを2倍に設定します。
display.setTextColor(SSD1306_WHITE);文字色を白に設定します。白黒OLEDでは、白に指定した部分の画素が点灯します。
display.setCursor(i, 25);文字を書き始める横位置にi、縦位置に25ピクセルを指定します。iが1ずつ増えるため、文字の位置が少しずつ右へ移動します。
display.print(F("CherryIoT"));現在の位置へ「CherryIoT」と書き込みます。Fは文字列をプログラム用メモリーに置き、動作用メモリーの使用量を抑えるための指定です。
display.display();メモリー上に作成した画面データをOLEDへ送り、現在の位置の文字を実際の画面に表示します。
delay(20);0.02秒待ちます。