IS-C15ANP4使ってみた!(線引いてみよう編)

投稿者:

この度スイッチサイエンスで「IS-C15ANP4」の取り扱いが開始されました!
http://www.switch-science.com/catalog/1326/
更にピッチ変換基板も発売されました!
http://www.switch-science.com/catalog/1343/
これで簡単にブレッドボードで使えますね!

IS-C15ANP4使ってみた!(準備編)」を読み終わった方々、次は線を引いてみましょう!
#この投稿だけ読んでも絵は表示できません、準備編とあわせてご利用下さい

任意の場所に任意の色で線を引いてみましょう!
#「R5ビット+G6ビット+B5ドット」の16ビットカラーモードで使います

メインプログラムです。
準備編のプログラムの一番下(プログラムの最後尾)に入れると良いでしょう

#define LinePosX1 10  // 0-63
#define LinePosY1 5   // 0-47
#define LinePosX2 53  // 0-63
#define LinePosY2 42  // 0-47
#define LineColor 0xffff  // R5+G6+B5
void loop() {
  Fundamental[SetupColumnAddress][2] = 0x10 + 0;
  Fundamental[SetupRowaddress][2] = 0;
  IS_C15ANP4_AdrInit();
  IS_C15ANP4_SendCommand(ColorDepth64k);
  digitalWrite(pinDC,DAT);
  for (int i = 0;i < 64 * 48;i++) {
    IS_C15ANP4_SendData(0);
    IS_C15ANP4_SendData(0);
  }
//----------
  digitalWrite(pinDC,CMD);
  IS_C15ANP4_SendData(0x21);
  IS_C15ANP4_SendData(0x10 + LinePosX1);
  IS_C15ANP4_SendData(LinePosY1);
  IS_C15ANP4_SendData(0x10 + LinePosX2);
  IS_C15ANP4_SendData(LinePosY2);
  IS_C15ANP4_SendData((LineColor >> 10) & 0x3e);
  IS_C15ANP4_SendData((LineColor >> 5) & 0x3f);
  IS_C15ANP4_SendData((LineColor << 1) & 0x3e);
  while (true) {}
}

画面に白い斜め線が引かれたでしょ?

ちょっぴりプログラムの説明をします。
「 void loop() { 」から「 //---------- 」までが画面を黒で埋めるプログラムです。
「 Fundamental[SetupColumnAddress][2] = 0 + 0x10; 」この行最後の「 0 」が左から何ドット目かを指定しています。
#「 + 0x10 」はオマジナイ(今回のスイッチでの仕様)です
「 Fundamental[SetupRowaddress][2] = 0; 」この行の「0」が上から何行目かを指定しています。
「 IS_C15ANP4_SendData(0); 」この行の「0」が色を指定しています。
「 for 」のループ回数が「 64 * 48 」の理由は画素数が「64×48ドット」だからです。
更に16ビットカラー(2バイト)なので2回連続で送っています。
つまり色としては0x0000を64×48回送っている感じですね。

次に「 //---------- 」から「 while (true) {} 」までの説明です。
プログラムの先頭に以下5行がありますね
#define LinePosX1 10 // 0-63
#define LinePosY1 5 // 0-47
#define LinePosX2 53 // 0-63
#define LinePosY2 42 // 0-47
#define LineColor 0xffff // R5+G6+B5
これらが「どこから、どこに、何色で線を引くか」を指定しています。
黒で埋めるプログラムと違うのは下記ですね。
IS_C15ANP4_SendData((DotColor >> 8) & 0xff);
IS_C15ANP4_SendData(DotColor & 0xff);
これは16ビット(2バイト)カラーであるDotColorを、8ビット(1バイト)2回に分けて送っています。

白い線が一本だけじゃつまらないですよね?
次は「任意の場所から任意の場所に任意の色で線を引く」プログラムです。
上記の「斜めに白い線を引く」メインプログラム全てを下記プログラムに入れ替えてみましょう。

boolean flag = false;
int LinePosX1,LinePosY1,LinePosX2,LinePosY2,LineColor;
void loop() {
  if (flag == false) {
    Fundamental[SetupColumnAddress][2] = 0x10 + 0;
    Fundamental[SetupRowaddress][2] = 0;
    IS_C15ANP4_AdrInit();
    IS_C15ANP4_SendCommand(ColorDepth64k);
    digitalWrite(pinDC,DAT);
    for (int i = 0;i < 64 * 48;i++) {
      IS_C15ANP4_SendData(0);
      IS_C15ANP4_SendData(0);
    }
    flag = true;
//----------
  } else {
    LinePosX1 = random(0,63);
    LinePosY1 = random(0,47);
    LinePosX2 = random(0,63);
    LinePosY2 = random(0,47);
    LineColor = random(0x0000,0xffff);
    digitalWrite(pinDC,CMD);
    IS_C15ANP4_SendData(0x21);
    IS_C15ANP4_SendData(LinePosX1 + 0x10);
    IS_C15ANP4_SendData(LinePosY1);
    IS_C15ANP4_SendData(LinePosX2 + 0x10);
    IS_C15ANP4_SendData(LinePosY2);
    IS_C15ANP4_SendData((LineColor >> 10) & 0x3e);
    IS_C15ANP4_SendData((LineColor >> 5) & 0x3f);
    IS_C15ANP4_SendData((LineColor << 1) & 0x3e);
  }
  delay(50);
}


拡大写真では、ちょっと伝わりづらいですかね?
#このプログラムは以下のように永久に線を引き続けます
#なにも表示されない場合はリロードすると表示されるかもです


これで「任意の場所から任意の場所に任意の色で線を引く」事ができるようになりましたね!

「IS-C15ANP4」の使い方として「準備編」から始まり「写真表示編」「ドット描いてみよう編」と続き、今回は「線を引いてみよう編」でした。
64×48ドットという小さな画面ではありますが、色々な表現ができるようになったのではないかと思います。
画面に絵が出るって楽しいですよね!