Arduino Nanoでミニ電光掲示板(8×8マトリクスLED + MAX7219)を作る #6 ミニ電光掲示板編(1)

[1 ソフトウェア インストール編](https://qiita.com/kan-no/items/34b4e54b58a7caae0441)
[2 電子パーツ購入編](https://qiita.com/kan-no/items/b39644aee91322203f3a)
[3 (共通)準備編](https://qiita.com/kan-no/items/63450faddbec89e279a3)
[4 基本編](https://qiita.com/kan-no/items/14d02316267c99084e21)
[5 フルカラーLED編](https://qiita.com/kan-no/items/3e3434dc4b536b5b5c00)
6 ミニ電光掲示板編(1)
[7 ミニ電光掲示板編(2)](https://qiita.com/kan-no/items/93f2327cc5b865a2591d)

---
いよいよ、ミニ電光掲示板編です。

実は、配線に関しては「基本編」や「フルカラーLED編」よりずっと簡単です。

まず、(共通)準備編、基本編、フルカラーLED編で、PC と Arduino が USBケーブルで繋がっている場合は、USBケーブルを抜いてください。
以降、ブレッドボードにパーツを抜き差しする時は必ず USBケーブルを抜いてください。
ケーブルを指したまま(電源が入ったまま)ブレッドボードのパーツを抜き差しすると、電子パーツが破損します。

基本編やフルカラーLED編で、LED や CDS を繋いでいる方は、(共通)準備編の状態へ戻してください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/198393/e21336af-977a-dcc7-bc89-b1f32402abb8.png)

マトリクスLED(MAX7219)とブレッドボードを接続します。

VCC → ブレッドボードの「+」
GND → ブレッドボードの「-」
DIN → Arduino Nano の D2 ピン
CS → Arduino Nano の D3 ピン
CLK → Arduino Nano の D4 ピン

![image.png](https://qiita-image-store.s3.amazonaws.com/0/198393/2a2a3ed1-d1b1-6f73-0474-7651743a3dcf.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/198393/13ef1633-676c-c8cf-2b6e-a6e71f855476.png)

マトリクスLED(MAX7219)に付属しているメス-メスのジャンパー線をマトリクスLED(MAX7219)に刺し、やわらかいジャンパー線(オス-オス)に繋いで、上記の説明通り、ブレッドボードに接続します。

配線が出来たら、開発環境で以前のプログラムを消して、下記の新しいプログラムをロードしてみてください。

```c
int dataIn = 2;
int load = 3;
int clock = 4;
int e = 0;
void putByte( byte data ){
  byte i = 8;
  byte mask;
  while( i > 0 ){
    mask = 0x01 << ( i - 1 );
    digitalWrite( clock, LOW );
    if( data & mask ){
      digitalWrite( dataIn, HIGH );
    }else{
      digitalWrite( dataIn, LOW );
    }
    digitalWrite( clock, HIGH );
    --i;
  }
}
void maxAll( byte reg, byte col ){
  int c = 0;
  digitalWrite( load, LOW );
  for( c = 1; c <= 4; c++ ){
    putByte( reg );
    putByte( col );
  }
  digitalWrite( load, LOW );
  digitalWrite( load, HIGH );
}
void setup(){
  pinMode( dataIn, OUTPUT );
  pinMode( clock,  OUTPUT );
  pinMode( load,   OUTPUT );
  digitalWrite( 13, HIGH );
  maxAll( 0x0b, 0x07 );
  maxAll( 0x09, 0x00 );
  maxAll( 0x0c, 0x01 );
  maxAll( 0x0f, 0x00 );
  for( e = 1; e <= 8; e++ ){
    maxAll( e, 0 );
  }
  maxAll( 0x0a, 0x0f & 0x0f );
}
void loop(){
  maxAll( 1,0 );
  maxAll( 2,0 );
  maxAll( 3,0 );
  maxAll( 4,0 );
  maxAll( 5,0 );
  maxAll( 6,0 );
  maxAll( 7,0 );
  maxAll( 8,0 );
  delay( 500 );
  maxAll( 1,1 );
  maxAll( 2,1 );
  maxAll( 3,1 );
  maxAll( 4,1 );
  maxAll( 5,1 );
  maxAll( 6,1 );
  maxAll( 7,1 );
  maxAll( 8,1 );
  delay( 500 );
  maxAll( 1,2 );
  maxAll( 2,2 );
  maxAll( 3,2 );
  maxAll( 4,2 );
  maxAll( 5,2 );
  maxAll( 6,2 );
  maxAll( 7,2 );
  maxAll( 8,2 );
  delay( 500 );
  maxAll( 1,4 );
  maxAll( 2,4 );
  maxAll( 3,4 );
  maxAll( 4,4 );
  maxAll( 5,4 );
  maxAll( 6,4 );
  maxAll( 7,4 );
  maxAll( 8,4 );
  delay( 500 );
  maxAll( 1,8 );
  maxAll( 2,8 );
  maxAll( 3,8 );
  maxAll( 4,8 );
  maxAll( 5,8 );
  maxAll( 6,8 );
  maxAll( 7,8 );
  maxAll( 8,8 );
  delay( 500 );
  maxAll( 1,16 );
  maxAll( 2,16 );
  maxAll( 3,16 );
  maxAll( 4,16 );
  maxAll( 5,16 );
  maxAll( 6,16 );
  maxAll( 7,16 );
  maxAll( 8,16 );
  delay( 500 );
  maxAll( 1,32 );
  maxAll( 2,32 );
  maxAll( 3,32 );
  maxAll( 4,32 );
  maxAll( 5,32 );
  maxAll( 6,32 );
  maxAll( 7,32 );
  maxAll( 8,32 );
  delay( 500 );
  maxAll( 1,64 );
  maxAll( 2,64 );
  maxAll( 3,64 );
  maxAll( 4,64 );
  maxAll( 5,64 );
  maxAll( 6,64 );
  maxAll( 7,64 );
  maxAll( 8,64 );
  delay( 500 );
  maxAll( 1,128 );
  maxAll( 2,128 );
  maxAll( 3,128 );
  maxAll( 4,128 );
  maxAll( 5,128 );
  maxAll( 6,128 );
  maxAll( 7,128 );
  maxAll( 8,128 );
  delay( 500 );
}
```

左から右へ縦線が動くはずです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/198393/1bd7cbfb-3e7e-19b0-8020-68c22210b0e4.png)

ソースでは、

maxAll( 行, 0 ); → 消灯
maxAll( 行, 1 ); → 1列目点灯
maxAll( 行, 2 ); → 2列目点灯
maxAll( 行, 4 ); → 3列目点灯

となっています。
パターンが、1,2,3,4,…ではなく、1,2,4,8,…となるのはなぜでしょう。
実は、
maxAll(行,3);
にすると、1列目と2列目が付きます。(1+2=3)
maxAllの2番目のパラメータは、光の付き具合を2進数で表しています。

例えば…
□ ■ □ ■ ■ □ ■ □
と光らせたいなら(黒が光っているところ)、二進数で01011010、これを10進数に直すと90になるので、
maxAll( 行, 90 ); 
としているのと同じです。

ミニ電光掲示板編(2)へ続きます。

---
[次へ](https://qiita.com/kan-no/items/93f2327cc5b865a2591d)