2色ドットマトリクスLED 8×8ドットをArduinoで光らせる

マトリクスLEDのLTP-12188M-08をArduinoで光らせてみます。16ピンのものを買ったつもりが24ピンだったので、サンプルが見つからずデータシートとにらめっこでした。

マトリクスLEDのLTP-12188M-08

商品やデータシートは LTP-12188M-08(秋月電子) から確認できます。

抵抗は秋月電子の抵抗計算を使ってみたところ平均で25mAだったので118Ωぐらいのようです。

回路は上記のようになります。赤い線がアノードで青と黄色い線がカソード。つまり、アノード1つに対してカソードが2つあり、カソードの片方を使うとRED ORANGE色となり、もうひとつを使うとGREEN色になります。

上記例ではRED ORANGEにつないでいます(青い線)。GREENにするなら黄色の線ですね。

詳細はデータシートなのですが、読みにくいので上記、LTP-12188M-08にノートを貼り付けておきました。番号はピン番号となり、それ以外の文字は以下のようになります。

  • C1G: カソード列1グリーン
  • C1R: カソード列1レッドオレンジ
  • R1: アノード行1

行列は以下のようなイメージです。

COL(列)  1,   2,   3,   4,   5,   6,   7,   8
        ○   ○   ○   ○   ○   ○   ○   ○  1
        ○   ○   ○   ○   ○   ○   ○   ○  2
        ○   ○   ○   ○   ○   ○   ○   ○  3
        ○   ○   ○   ○   ○   ○   ○   ○  4
        ○   ○   ○   ○   ○   ○   ○   ○  5
        ○   ○   ○   ○   ○   ○   ○   ○  6
        ○   ○   ○   ○   ○   ○   ○   ○  7
        ○   ○   ○   ○   ○   ○   ○   ○  8
                                            ROW(行)

また、この部品はデジタル出力が16本必要なので、足りないぶんはアナログピンを使っています。6本あるアナログ入力ピンは、A0からA5(D14からD19)として使用できます。

参考: 8×8マトリックスLEDを点灯させる

ソースコードは以下のようになりました。はじめに全点灯して、1列目点灯、2列目点灯、3列目点灯・・・として波打つような動きにしています。

光らせる場合は、アノード側をHIGH、カソード側をLOWにするようです。

/**
 * 2色ドットマトリクスLED(赤緑) 8×8ドット LTP-12188M-08
 * http://akizukidenshi.com/catalog/g/gI-09878/
 * 
 * 16ピン必要なのでA0からA5もデジタル(D14からD19)として利用
 */

// 要素0は使わず(0で埋めている)、要素1からがそれぞの列番号になる。
// ROW[1] + COL[1]で1行1列目のドットを指す
const int ROW[9] = {0, 4, 3, 19, 18, 14, 15, 16, 17};
const int COL[9] = {0, 12, 11, 10, 9, 8, 7, 6, 5};

void setup() {
  Serial.begin(9600);
  Serial.println("Initilization start");
  
  for (int i = 1; i < 9; i++) {
    pinMode(ROW[i], OUTPUT);
    pinMode(COL[i], OUTPUT);   
  }

  
  off();
  
  Serial.println("Initilization end");
}

void loop() {
  Serial.println("All high");
  all();
  delay(1500);

  scroll();
}

void line(int *pinArray, int highLow) {
  Serial.println(highLow);
  for (int i = 1; i < 9; i++) {
    digitalWrite(pinArray[i], highLow);
  }
}

void all() {
  Serial.println("All");
  line(ROW, HIGH);
  line(COL, LOW);
}

void off() {
  Serial.println("Off");
  line(ROW, LOW);
  line(COL, LOW);  
}

void scroll() {
  for (int count = 5; 0 < count; count--) {
    for (int i = 1; i < 9; i++) {
      off();
      
      // 1列ずつLEDを光らせる
      Serial.println("One line => High");
      digitalWrite(ROW[i], HIGH);
      
      for (int i = 1; i < 9; i++) {
        line(COL, LOW);
      }
  
      delay(100);
  
      off();
    }
  }
}

ソースコードと回路図はGitHubにおいています。

広告