INDEX(各項目ごとの目次)

[HOME]  [Processing関係]  [Arduino関係]  [マテリアル関係]  [秋葉原工作マップ]

2008年用ですが、部分的に内容を更新しています(2010/06/14)。
また、[建築農業工作ゼミ2009-2010]とも連動していますので、そちらにも幾つかサンプルがあります。
:

8/09/2008

Arduino マトリクスLED2/MAX7219

以前の「Arduino マトリクスLED1」では、8×8のマトリクスLEDをArduino基盤に直接接続して点灯させましたが、今回はMAX7219というLEDディスプレイドライバICを使って点灯してみます。Arduino基盤にマトリクスLEDを直結すると16個の端子が必要でしたが、MAX7219を使えば5V電源とGND以外に3本の端子で制御することが可能になります。原理的には、シリアルデータを送り、マトリクスLEDを表示させることになりますが、ArduinoにはマトリクスLED用のライブラリ(Wiringのライブラリ)があるので今回はそれを使ってプログラムしてみます。今回使用する8×8のマトリクスLEDは、以前同様、秋月電子で購入したものです。
以下のように、マトリクスLEDの各端子とMAX7219の端子が対応します(マトリクスLEDモジュールの側面に小さな凹凸部があり、MAX7219には端部に半円状の凹部や小さな丸印があるので、それらを手掛かりに向きを合わせてください)。



その他のMAX7219の端子については、
DIN:Arduinoからのシリアルデータ入力端子
DOUT:複数のMAX7219を接続する端子
VCC:5V電源
I_SET:接続する抵抗によって輝度を変えます
GND:AduinoのGNDと共有
LOAD:Arduinoからのデータ入力のロード用端子
CLK:Arduinoからのクロック信号入力端子

Arduino基盤との接続は以下のようになります。I_SETとLOAD端子には、10KΩの抵抗を接続して下さい(I_SETの抵抗値を上げれば暗くなり、下げれば明るくなります)。画像をクリックすれば大きくなります。



既存のサンプルを使って点灯実験してみます。Arduinoの画面からFile>Sketchbook>Examples>Library-Matrix>hello-matrixを選ぶと、プログラムが現れますが、ピン設定に少し変更を加えます。
既存サンプルでは、

pin 0: data (din)
pin 1: load (load)
pin 2: clock (clk)

となっていますが、0番ピンと1番ピンは使わず、

pin 2: data (din)
pin 3: load (load)
pin 4: clock (clk)

に変更することにします。こうすることで、プログラムのデータをアップロードする時やシリアル通信の際に信号が干渉されずにすみます。


//ライブラリを取り込む
#include <Sprite.h>
#include <Matrix.h>

//各ピンの設定
//pin 2: DIN
//pin 3: LOAD
//pin 4: CLK
Matrix myMatrix = Matrix(2, 4, 3);

void setup(){
}

void loop(){
myMatrix.clear(); //表示内容をクリアする

delay(1000);

//ピクセルを指定し表示する
myMatrix.write(1, 5, HIGH);
myMatrix.write(2, 2, HIGH);
myMatrix.write(2, 6, HIGH);
myMatrix.write(3, 6, HIGH);
myMatrix.write(4, 6, HIGH);
myMatrix.write(5, 2, HIGH);
myMatrix.write(5, 6, HIGH);
myMatrix.write(6, 5, HIGH);

delay(1000);
}


以下のように表示(1秒おきに点滅)されれば、配線などに問題ないことになります。write()で、X座標(0〜7)とY座標、ならびにHIGHかLOW(あるいは1か0)を代入し個々のLEDの点灯/消灯を指定します。



最初のArduino側のピンの設定(既存サンプルのコードに変更を加える)と、配線を間違わなければ、座標指定で点灯/消灯を制御できるので、それほど難しくはないと思います。今回のマトリクスLED用のライブラリを使うには、メニューバーのSketch>Import Library>MatrixとSpriteを選択すればインクルードされます。

次は、Spriteという基準となる絵柄を設定し、それが動く(横に流れる)表示方法を行います。Arduinoの画面からFile>Sketchbook>Examples>Library-Matrix>sprite-animationを選択し、このサンプルを使うことにします。前回同様、ピン設定は、

pin 0: data (din)
pin 1: load (load)
pin 2: clock (clk)

となっていますが、0番ピンと1番ピンは使わず、

pin 2: data (din)
pin 3: load (load)
pin 4: clock (clk)

に変更します。


//ライブラリを取り込む
#include <Sprite.h>
#include <Matrix.h>

//各ピン設定
//DIN:2
//LOAD:3
//CLK:4
Matrix myMatrix = Matrix(2, 4, 3);//DIN,CLK,LOAD

//スプライトの指定
//幅、高さ、絵柄を二進数で指定
Sprite wave = Sprite(
8, 4,
B00011000,
B00100100,
B01000010,
B10000001
);

void setup()
{
}

//X座標の変数を用意
int x = 0;

void loop(){
//スプライトの配置
myMatrix.write(x, 2, wave);
//もうひとつのスプライトの配置
myMatrix.write(x - 8, 2, wave);
//点灯時間設定
delay(75);
//画面をクリア
myMatrix.clear();

//アニメーション(カスケーディング)
if(x == 8){//8になったら0に戻す
x = 0;
}
x++;//X座標の変数を増加させる
}


Sprite()で、絵柄の幅、高さを指定し、二進数で点灯させる絵柄(0は消灯箇所、1は点灯箇所)をつくり設定します。write()で、絵柄の配置座標(左上の座標)と絵柄のオブジェクトを指定し表示させます。write()の括弧内のX座標やY座標は変数を用いて変化させることができるので、カスケーディング(絵柄が流れて表示される)の制御も簡単にできます。このサンプルでは、8コマ前にもうひとつの同じ絵柄を用意しておき、二つの絵柄を使用して途切れなく連続して絵柄が流れていくように表示しています。

また以下のようにSpriteを複数用意しておけば、入れ替わりで異なる絵柄を表示できます。


//ライブラリを取り込む
#include <Sprite.h>
#include <Matrix.h>

//各ピンの設定
//pin 2: DIN
//pin 3: LOAD
//pin 4: CLK
Matrix myMatrix = Matrix(2, 4, 3);

//スプライトの指定
//幅、高さ、絵柄を二進数で指定
Sprite pattern1 = Sprite(
8, 8,
B11111111,
B00000000,
B11111111,
B00000000,
B11111111,
B00000000,
B11111111,
B00000000
);

Sprite pattern2 = Sprite(
8, 8,
B10101010,
B10101010,
B10101010,
B10101010,
B10101010,
B10101010,
B10101010,
B10101010
);

Sprite pattern3 = Sprite(
8, 8,
B11110000,
B11110000,
B11110000,
B11110000,
B00001111,
B00001111,
B00001111,
B00001111
);

Sprite pattern3 = Sprite(
8, 8,
B00001111,
B00001111,
B00001111,
B00001111,
B11110000,
B11110000,
B11110000,
B11110000
);


void setup()
{
}

//X座標の変数を用意
int x = 0;

void loop(){
//スプライトの配置
myMatrix.write(0, 0, pattern1);
//点灯時間設定
delay(200);
//画面をクリア
myMatrix.clear();

myMatrix.write(0, 0, pattern2);
delay(200);
myMatrix.clear();

myMatrix.write(0, 0, pattern3);
delay(200);
myMatrix.clear();

myMatrix.write(0, 0, pattern4);
delay(200);
myMatrix.clear();
}


関連:
・「Arduino マトリクスLED1」(ICを使わずマトリクスLEDを制御する方法)
MAX7219データシート(MAXIM JAPAN)

0 件のコメント:



[目次:Processing関係]  [HOMEへ戻る]  [目次:Arduino関係]