IS-C15ANP4使ってみた!(ドット描いてみよう編)

投稿者:

この度スイッチサイエンスで「IS-C15ANP4」の取り扱いが開始されました!
http://www.switch-science.com/catalog/1326/
IS-C15ANP4使ってみた!(準備編)」を読み終わった方々、次は実際にドット(点)を表示してみましょう!
#この投稿だけ読んでも絵は表示できません、準備編とあわせてご利用下さい

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

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

#define DotPosX 31  // 0-63
#define DotPosY 23  // 0-47
#define DotColor 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);
  }
//----------
  Fundamental[SetupColumnAddress][2] = 0x10 + DotPosX;
  Fundamental[SetupRowaddress][2] = DotPosY;
  IS_C15ANP4_AdrInit();
  IS_C15ANP4_SendCommand(ColorDepth64k);
  digitalWrite(pinDC,DAT);
  IS_C15ANP4_SendData((DotColor >> 8) & 0xff);
  IS_C15ANP4_SendData(DotColor & 0xff);
  while (true) {}
}

画面の中心に白いドットが表示されたでしょ?

ちょっぴりプログラムの説明をします。
「 void loop() { 」から「 //---------- 」までが画面を黒で埋めるプログラムです。
「 Fundamental[SetupColumnAddress][2] = 0x10 + 0; 」この行最後の「 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) {} 」までの説明です。
プログラムの先頭に以下3行がありますね
#define DotPosX 31 // 0-63
#define DotPosY 23 // 0-47
#define DotColor 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 DotPosX,DotPosY,DotColor;
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 {
    DotPosX = random(0,63);
    DotPosY = random(0,47);
    DotColor = random(0x0000,0xffff);
    Fundamental[SetupColumnAddress][2] = 0x10 + DotPosX;
    Fundamental[SetupRowaddress][2] = DotPosY;
    IS_C15ANP4_AdrInit();
    IS_C15ANP4_SendCommand(ColorDepth64k);
    digitalWrite(pinDC,DAT);
    IS_C15ANP4_SendData((DotColor >> 8) & 0xff);
    IS_C15ANP4_SendData(DotColor & 0xff);
  }
}


なんとなく幻想的(?)な画面になりましたね。
#このプログラムは以下のように永久にドットを描き続けます
#なにも表示されない場合はリロードすると表示されるかもです


これで「任意の場所に任意の色のドットを描く」事ができるようになりましたね!
自分で絵を描けるようになってくるとワクワクしませんか?