Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://kovayashi.blog120.fc2.com/tb.php/318-f2d2d460

-件のトラックバック

-件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Arduino [10×10]LEDマトリックス

前回は3本の出力PINで16個のLEDを操作してみたが、今回は10×10=100個のLEDを制御してみる。デジタル出力PINは0〜13の14本だが、ANALOG INの6本もpinMode(A0〜A5が14〜19,OUTPUT);で設定すればデジタル出力PINになるので、出力PINを20本全部使用する方法もありだが、今回はシフトレジスタ(TC74HC595AP)を二つ使用しての出力PIN7本での制御とする。

参考にしたのは、
http://kousaku-kousaku.blogspot.jp/2008/07/arduinoled.html
電気は電位の高い方から低い方へ流れる。arduinoは各PINの電位をdigitalWrite();でHIGH/LOW切り替えられる。LOWに設定されたPINはGNDと同じ電位となる特性をうまく利用してLEDをマトリックスに制御する。ON/OFF、つまり導通か否かの考えから、「電位HIGH/LOWを制御する」に頭を切り替えると理解できた。

電気って、解ってくると面白いね。

さて、今回使う部品だがLED100個を配線するのはメンドクサイので、「10x10ドットマトリクスLED LT-5003D」

お値段200円。
を秋月電子で購入した。 因に秋葉原の秋月電子は今日も大混雑であった。

二つのシフトレジスタを繋がないで、別々にPIN3本づつで、それぞれのシフトレジスタを操作し、残りの4本を、Aruduinoで直接操作(計10本)する方式も最初ためしたが、うまく出来なかった。 なんでかは解らない。
この方式の方がコードが書きやすいと思われるが、断念した。結局シフトレジスタは前回と同様に直列に繋いで3本の出力PINで制御とし、のこりの4本をAruduinoで直接操作する方式とした。(計7本)

配線はLEDマトリックスの説明書を良く見て考える。
IMG_9870.jpg
なるべくシンプルに繋がり、かつコードを書く時に、ストレスにならない方法が望ましい。
IMG_9887.jpg IMG_9898.jpg IMG_9895.jpg

IMG_9900.jpg

IMG_9901.jpg

で、コード

int dataPin = 0; // 74HC595のDSへ
int latchPin = 1; // 74HC595のST_CPへ
int clockPin = 2; // 74HC595のSH_CPへ
int c_8 = 3;
int c_9 = 4;
int r_8 = 5;
int r_9 = 6;

int val;
int h;
int l;

void all(int sw){
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, !sw);
shiftOut(dataPin, clockPin, LSBFIRST, sw ? 0xff : 0);
digitalWrite(latchPin, HIGH);
digitalWrite(c_8, !sw);
digitalWrite(c_9, !sw);
digitalWrite(r_8, sw);
digitalWrite(r_9, sw);
}

void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(r_8, OUTPUT);
pinMode(r_9, OUTPUT);
pinMode(c_8, OUTPUT);
pinMode(c_9, OUTPUT);
}

void loop() {
for (int j = 0; j < 10; j++) {
val = 1<<j;
h = val>>8;
l = val & 0xff;
for (int k = 0; k < 10; k++) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, (1<<k)^0xff);
digitalWrite(c_8, k != 8);
digitalWrite(c_9, k != 9);
shiftOut(dataPin, clockPin, LSBFIRST, l);
digitalWrite(latchPin, HIGH);
digitalWrite(r_8, j == 8);
digitalWrite(r_9, j == 9);
delay(50);
}
}
all(1);
delay(1000);
all(0);
delay(1000);
all(1);
delay(2000);
}

コード、美しくない。。。

実行結果
https://www.youtube.com/watch?v=l9KgsxIrLW4
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://kovayashi.blog120.fc2.com/tb.php/318-f2d2d460

0件のトラックバック

0件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Appendix

プロフィール

kovayashi

Author:kovayashi
・嫌いなもの
 →好きなもの

・インストール
 →バンドル
・バックアップ
 →アップロード
・努力
 →チート

最近のトラックバック

ブログ内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。