NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

LCDの使い方(AE-AQM1602A)ドット絵で自作文字後編

 
イメージ 2
I2C接続小型キャラクLCDモジュール(AE-AQM1602A)
 
 LCD(AE-AQM1602A)に、前回の記事で作った電車文字を走らせて見ました

1. 実験!

1.1 接続
 Arduino UNOLCD(AE-AQM1602A)の接続はブレッドボードを使用します。
 Fritzingを用いて描いた接続は今までと同様で図1の通りです。
イメージ 3
図1:LCDとArduinoUNOとの接続

1.2 プログラム
 プログラムの内容としては、「LCDを初期化」→「電車文字を8文字登録」→「電車が走る」です!
//NOBのArduino日記!_AE-AQM1602Aの使い方_電車文字が走る!(20170327)
#include <Wire.h>//関数読み込み

//コマンド書き込み
void writeCommand(byte command) {
  Wire.beginTransmission(0x3E);
  Wire.write(0x00);
  Wire.write(command);
  Wire.endTransmission(); delay(10);
}

//データ書き込み
void writeData(byte data) {
  Wire.beginTransmission(0x3E);
  Wire.write(0x40);
  Wire.write(data);
  Wire.endTransmission(); delay(1);
}

//液晶初期化
void setup() {
  Wire.begin(); delay(100);
  writeCommand(0x38); delay(20);
  writeCommand(0x39); delay(20);
  writeCommand(0x14); delay(20);
  writeCommand(0x7A); delay(20); //3.3V=0x73, 5V=0x7A
  writeCommand(0x54); delay(20); //3.3V=0x56, 5V=0x54
  writeCommand(0x6C); delay(20);
  writeCommand(0x38); delay(20);
  writeCommand(0x01); delay(20);
  writeCommand(0x0C); delay(20);
  //文字パターンを新しく8文字作る
  byte fig[8][8] = {{0x03, 0x05, 0x09, 0x1F, 0x1F, 0x1F, 0x1D, 0x07}, {0x1F, 0x11, 0x15, 0x1F, 0x1F, 0x1F, 0x1B, 0x0E}, {0x00, 0x0E, 0x0A, 0x1F, 0x1F, 0x1F, 0x1B, 0x0E}, {0x00, 0x04, 0x0A, 0x1F, 0x1F, 0x1F, 0x1B, 0x0E}, {0x00, 0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x1B, 0x0E}, {0x00, 0x00, 0x0E, 0x1F, 0x1F, 0x1F, 0x1B, 0x0E}, {0x1F, 0x11, 0x15, 0x1F, 0x1F, 0x1F, 0x1B, 0x0E}, {0x18, 0x14, 0x12, 0x1F, 0x1F, 0x1F, 0x17, 0x1C}};
  for (int i = 0; i < 8; i++) {
    for (int j = 0; j < 8; j++) {
      writeData(0x00 + i); //文字コードDDRAMデータ
      writeCommand(0x40 + i * 8 + j); //CGRAMアドレスを1+j行目にセット
      writeData(fig[i][j]);
    }
  }
}//作ったCGRAMDataをCGRAMアドレスに出力

//無限ループ電車!
void loop() {
  for (int i = 0; i < 16; i++) { //書き出し開始列
    int k = 0;
    for (int j = 0; j < 16; j++) { //全て更新
      if ( i < j && j < i + 9) { //電車8両書き込み
        writeCommand(0x80 + j); //DDRAMアドレスをセット
        writeData(0x00 + k); k++; //電車表示!
      } else { //空白行書き込み
        writeCommand(0x80 + j); //DDRAMアドレスをセット
        writeData(0x20);//空白表示
      }
    } delay(100);
  }
}
イメージ 1
図1:プログラム例

  

1.3 実験!
 図1の様に接続した状態でArduino UNOに上記プログラムを書き込むと、図2の様に電車が走り出しました!
イメージ 1
図2:プログラム実行結果

4. まとめ

 今回のプログラムは文字パターン登録も、文字パターンデータの呼び出しも、for関数・if関数・ブール演算子の入れ子も、なかなかはまりました
 取り敢えず完成です!
 
イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【NOBのArduino日記!】目次に戻る