1. 実験!
1.1 接続
プログラムの内容としては、「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:プログラム例
図2:プログラム実行結果