====== キャラクタLCDガイド ======
キャラクタLCDは、文字と数字を行単位で表示する表示装置です。このガイドでは、**PCF8574 I²C変換モジュールを接続したHD44780互換のキャラクタLCD**を、ILOGICS産業用Arduinoの内蔵''Iclcd...()''関数で使用する方法を説明します。''ILIB.h''、''CLCD.h''、''Wire.h''やLCDオブジェクトをスケッチに追加する必要はありません。
下の順序で接続を確認し、実際のLCDの**I²Cアドレスと列数・行数**を入力してから例を書き込んでください。アドレス''0x27''とサイズ''20 × 4''はこのページの例の値であり、すべてのLCDに共通の値ではありません。**16 × 4のLCDは、3行目と4行目が内蔵関数の位置計算と合わないため、このガイドの対象外です。**
===== 1. 準備と接続 =====
- [[:ja-jp_guide:getting_started|Arduino IDEで始める]]に従ってILOGICS Arduino SDKをインストールし、使用する製品のボードとポートを選択してください。
- **電源を切った状態で**、製品のI²C端子とLCD変換モジュールを接続してください。端子の位置と電源出力の仕様は、使用する[[:ja-jp_products:mpino_series|MPINO]]または[[:ja-jp_products:mpaino|MPAINO]]の製品ページで確認してください。
^ LCD変換モジュールに表示された信号 ^ 製品のI²C端子 ^ 確認事項 ^
| ''SDA'' | ''SDA'' | データ信号どうしを接続してください。 |
| ''SCL'' | ''SCL'' | クロック信号どうしを接続してください。 |
| ''VCC''または''+5V'' | ''+5V'' | **LCD変換モジュールが5 V電源の場合にのみ**接続してください。先に、使用する製品の+5V端子とモジュールの電源仕様を確認してください。 |
| ''GND'' | ''GND'' | 両方のGNDを接続してください。 |
MPINO-16A8Rでは、''+5V''と''GND''をPOWER端子から取ってください。この+5V出力は最大100 mAのため、バックライトを含むLCDの消費電流を先に確認してください。
下の図は、**MPAINO CPUモジュールのI²C配線図**からLCDの接続に必要な部分を示したものです。図と端子情報の出典は[[:ja-jp_products:mpaino_16a16r|MPAINO-16A16Rの製品ページ]]です。
{{ :ja-jp_guide:character_lcd:mpaino-i2c-connection.svg?500 |MPAINO CPUモジュールのI²C端子と機器のSDA・SCL・+5V・GNDを同じ名前どうしで接続する図 }}
MPAINO CPUモジュールの''SDA''は''D20''、''SCL''は''D21''です。**MPINOの数字のピン番号はモデルによって異なる**ため、この値をMPINOに適用しないでください。実際の製品の''SDA''・''SCL''端子と製品ページに従ってください。I²Cの使用中は、同じ''SDA''・''SCL''を外部割り込みやエンコーダ入力として同時に使用しないでください。
===== 2. 内蔵関数 =====
''IclcdBegin(address, columns, rows)''でLCDを初期化してから出力関数を使用します。''address''はLCD変換モジュールの**7ビットI²Cアドレス**、''columns''は1行の文字数、''rows''は行数です。**引数の許容範囲**は列''1~40''、行''1~4''です。この範囲は、すべてのLCDサイズの行アドレスに対応するという意味ではありません。現在のコアでは3行目と4行目の開始アドレスが''0x14''・''0x54''に固定されているため、**16 × 4のLCDの3行目と4行目には合いません。** アドレス、サイズ、装置番号が不正な場合や、必要なI²C転送に応答がない場合、''IclcdBegin()''は''false''を返します。
すべての関数は成否を''bool''値で返します。最大4台のLCDを区別するには、装置番号''device''に''0~3''を使用します。省略すると''0''になります。各装置は、先に異なるアドレスで''IclcdBegin(address, columns, rows, backlight, device)''を呼び出す必要があります。''backlight''の既定値は''true''です。
^ 関数 ^ 機能 ^
| [[:ja-jp_commands:reference:iclcdbegin|IclcdBegin(address, columns, rows, backlight, device)]] | LCDのアドレス、サイズ、初期バックライト状態を設定し、接続の応答を確認します。 |
| [[:ja-jp_commands:reference:iclcdsetcursor|IclcdSetCursor(column, row, device)]] | 次の文字を書く位置を指定します。列と行は**0から**始まり、設定した画面の範囲を超えると''false''を返します。 |
| [[:ja-jp_commands:reference:iclcdprint|IclcdPrint(value, ...)]] | 文字列、文字、整数、実数を出力します。例:''IclcdPrint(F("RUN"))''、''IclcdPrint(12.34, 2)''。 |
| [[:ja-jp_commands:reference:iclcdclear|IclcdClear(device)]] · [[:ja-jp_commands:reference:iclcdhome|IclcdHome(device)]] | ''IclcdClear()''は画面を消去してカーソルを先頭に移動し、''IclcdHome()''は文字を保持したままカーソルだけを先頭に移動します。 |
| [[:ja-jp_commands:reference:iclcdbacklight|IclcdBacklight(on, device)]] · [[:ja-jp_commands:reference:iclcddisplay|IclcdDisplay(on, device)]] | バックライトまたは画面表示をオン・オフします。 |
| [[:ja-jp_commands:reference:iclcdcursor|IclcdCursor(on, device)]] · [[:ja-jp_commands:reference:iclcdblink|IclcdBlink(on, device)]] | 下線カーソルと点滅カーソルを制御します。 |
| [[:ja-jp_commands:reference:iclcdscrollleft|IclcdScrollLeft(device)]] · [[:ja-jp_commands:reference:iclcdscrollright|IclcdScrollRight(device)]] | 表示を1文字分、左または右に移動します。 |
| [[:ja-jp_commands:reference:iclcdtextdirection|IclcdTextDirection(leftToRight, device)]] · [[:ja-jp_commands:reference:iclcdautoscroll|IclcdAutoscroll(on, device)]] | 文字の入力方向と、入力時の自動スクロールを設定します。 |
| [[:ja-jp_commands:reference:iclcdcreatechar|IclcdCreateChar(location, charmap, device)]] · [[:ja-jp_commands:reference:iclcdwrite|IclcdWrite(value, device)]] | ''0~7''の位置に8バイトのユーザー文字を登録し、文字コード1バイトを出力します。 |
| [[:ja-jp_commands:reference:iclcdcommand|IclcdCommand(command, device)]] | HD44780のコマンドバイトを直接送信する上級者向けの機能です。 |
''IclcdPrint()''では、文字列の第2引数は装置番号です。整数の第2引数は基数(''BIN''、''OCT''、''DEC''、''HEX''または''2~36'')、実数の第2引数は小数点以下の桁数(''0~10'')で、この二つの形式では装置番号が**第3引数**になります。たとえば''IclcdPrint("SUB", 1)''は装置1に文字列を書き、''IclcdPrint(255, HEX, 1)''は装置1に''FF''を書きます。
===== 3. 使用例:1行目と2行目に文字を表示する =====
**I²Cアドレスが''0x27''で20列 × 4行のLCD**の例です。実際のLCDのアドレスが異なる場合は、''0x27''を確認したアドレスに変更してください。他の画面サイズでは、上の行アドレスの制限とLCDの資料を先に確認してから列と行の値を変更してください。**16 × 4のLCDにはこの例を使用しないでください。** Arduino IDEの**ファイル → 新しいスケッチ**にコード全体を貼り付けて保存し、**検証(✓)**と**書き込み(→)**を順に実行してください。
void setup() {
Serial.begin(115200);
// 実際のLCD変換モジュールのI²Cアドレス、列数、行数に変更してください。
if (!IclcdBegin(0x27, 20, 4)) { // LCDを初期化し、I²Cの応答を確認します。
Serial.println(F("LCD connection failed"));
return;
}
IclcdSetCursor(0, 0); // 1行目の先頭に移動します。
IclcdPrint(F("ILOGICS")); // 1行目に文字を書きます。
IclcdSetCursor(0, 1); // 2行目の先頭に移動します。
IclcdPrint(F("LCD READY")); // 2行目に文字を書きます。
}
void loop() {
}
書き込み後、1行目に''ILOGICS''、2行目に''LCD READY''が表示されることを確認してください。表示されない場合は、Arduino IDEの**シリアルモニタを115200 bps**で開き、''LCD connection failed''が出力されるか確認してください。このメッセージは、アドレス、配線、電源、I²Cの応答を確認する必要があるという意味です。''IclcdBegin()''の''true''はI²C転送に応答があったという意味で、文字が実際に画面に見えることまでは確認しません。
===== 4. I²Cアドレスがわからないとき =====
このスケッチは、PCF8574モジュールのアドレス範囲を''IclcdBegin()''で試し、応答したアドレスを出力します。LCDを接続した状態で書き込み、**シリアルモニタを115200 bps**で開いてください。出力されたアドレスを上の例に入力してください。''Done''だけが出力された場合は応答したモジュールがないため、配線と電源を確認してください。''Done''も表示されない場合は、シリアルモニタを開いたまま製品を再起動してください。
void setup() {
Serial.begin(115200);
delay(1000);
for (uint8_t address = 0x20; address <= 0x3F; address++) {
if (address == 0x28) address = 0x38; // PCF8574モジュールが使わない範囲を飛ばします。
if (IclcdBegin(address, 20, 4)) {
Serial.print(F("Response at 0x"));
Serial.println(address, HEX);
}
}
Serial.println(F("Done"));
}
void loop() {
}
===== 5. 動作しないとき =====
^ 症状 ^ 確認の順序 ^
| 検証時に''IclcdBegin''が見つからない | ILOGICS Arduino SDKのインストールと、Arduino IDEで実際の製品に合ったILOGICSボードを選択しているかを確認してください。この例に別途LCDライブラリは必要ありません。 |
| シリアルモニタに''LCD connection failed''と表示される | 電源を切り、''SDA''・''SCL''・''+5V''・''GND''の接続とLCDモジュールの電源仕様をもう一度確認してください。''0x27''は例のアドレスなので、実際のモジュールのアドレスを確認して修正してください。 |
| 初期化エラーは出ないが文字が見えない | LCDのコントラスト調整、バックライトの状態、実際の列数と行数を確認してください。PCF8574変換モジュールのLCD側の接続が、この関数の対応と同じかどうかも確認してください。 |
| ''IclcdSetCursor()''などが''false''を返す | その装置の''IclcdBegin()''が成功しているか、''device''が''0~3''か、カーソルの列と行が設定した画面の範囲内かを確認してください。 |
| 他のI²C機器と併用するとエラーになる | アドレスの重複を確認してください。また、''Iclcd...()''の実行中に他の''Wire''転送やI²Cスレーブのコールバックを同時に実行しないでください。 |
この関数は、PCF8574の**P0=RS、P1=R/W、P2=Enable、P3=バックライト、P4~P7=LCD D4~D7**の接続を使用します。変換モジュールの対応が異なると、I²Cアドレスが合っていても正しく表示されないことがあります。''IclcdCommand()''は画面の状態を直接変更するため、HD44780のコマンドを理解している場合にのみ使用してください。
関数ごとの引数と例は、上の表の関数名を選択すると確認できます。製品の端子と電源仕様は、使用する[[:ja-jp_products:mpino_series|MPINO]]または[[:ja-jp_products:mpaino|MPAINO]]の製品ページを優先してください。