好評発売中のマトリックスLEDキットの使い方です。このページではmbed LPC1768での使い方を説明します。
準備
マトリックスLEDキットの内容
- 8x8マトリックスLED × 1個
- 100Ω抵抗(茶黒茶 金) × 10本 (この内8本を使います。2本は予備です)
- 0Ω抵抗(黒帯1本のみ) × 10本 (この内8本を使います。2本は予備です)
- ブレッドボード × 2個
- ジャンパワイヤ(オス−オス)赤 × 4本
- ジャンパワイヤ(オス−オス)緑 × 4本
- ジャンパワイヤ(オス−オス)青 × 4本
- ジャンパワイヤ(オス−オス)白 × 4本
- ジャンパワイヤ(オス−オス)黒 × 4本 (これは予備になります。今回は使いません)
キットの他に用意するもの
- mbed LPC1768
- USBケーブル(A-miniB) ※上記mbed LPC1768に1本付属しています。
- mbed LPC1768を載せるためのブレッドボード × 1個
- Windows/mac OS/LinuxなどのUSBマスストレージに書込みが出来てWebブラウザを搭載したパソコン
- インターネット接続環境(mbedはブラウザによるオンライン開発が基本です)
有ると便利なもの
- ワイヤーストリッピングゲージもしくはラジオペンチ(抵抗の足を曲げる時に使います。)
- ニッパー(抵抗の足を短くカットしたい場合に使います。カットしなくてもOKです。)
- ピンセット(足を短くした抵抗を抜く時に便利です)
組み立て方
- ブレッドボードを横に連結します。
- 8x8マトリックスLED をブレッドボードに挿します。LEDの1と書かれた(赤丸)側に 1番ピン(緑丸)が有るので、左側ブレッドボードのj-11に入る様に挿し込んで下さい。(青丸の並び)
- 抵抗(100Ω × 8本、0Ω × 8本)の足を幅400mil(ブレッドボードの穴5つにまたがる長さ)に曲げます。 ワイヤーストリッピングゲージの5の所を使うと綺麗に曲げられます。 (合わせて抵抗の足を曲げた所から7〜8mm程度にニッパで短くカットしておくと綺麗に仕上がります)
- 抵抗をブレッドボードに挿し込みます。(抵抗に向きはありません)
- 左ブレッドボード d-11からf-11へ 0Ω
- 左ブレッドボード d-12からf-12へ 0Ω
- 左ブレッドボード d-13からf-13へ 100Ω
- 左ブレッドボード d-14からf-14へ 100Ω
- 左ブレッドボード d-15からf-15へ 0Ω
- 左ブレッドボード d-16からf-16へ 100Ω
- 左ブレッドボード d-17からf-17へ 0Ω
- 左ブレッドボード d-18からf-18へ 0Ω
- 右ブレッドボード g-18からe-18へ 0Ω
- 右ブレッドボード g-17からe-17へ 100Ω
- 右ブレッドボード g-16からe-16へ 100Ω
- 右ブレッドボード g-15からe-15へ 0Ω
- 右ブレッドボード g-14からe-14へ 100Ω
- 右ブレッドボード g-13からe-13へ 0Ω
- 右ブレッドボード g-12からe-12へ 100Ω
- 右ブレッドボード g-11からe-11へ 100Ω
- ブレッドボードとmbed LPC1768をジャンパワイヤで繋ぎます。
- 左ブレッドボード a-11からmbed LPC1768のP11へ
- 左ブレッドボード a-12からmbed LPC1768のP12へ
- 左ブレッドボード a-13からmbed LPC1768のP13へ
- 左ブレッドボード a-14からmbed LPC1768のP14へ
- 左ブレッドボード a-15からmbed LPC1768のP15へ
- 左ブレッドボード a-16からmbed LPC1768のP16へ
- 左ブレッドボード a-17からmbed LPC1768のP17へ
- 左ブレッドボード a-18からmbed LPC1768のP18へ
- 右ブレッドボード a-18からmbed LPC1768のP21へ
- 右ブレッドボード a-17からmbed LPC1768のP22へ
- 右ブレッドボード a-16からmbed LPC1768のP23へ
- 右ブレッドボード a-15からmbed LPC1768のP24へ
- 右ブレッドボード a-14からmbed LPC1768のP25へ
- 右ブレッドボード a-13からmbed LPC1768のP26へ
- 右ブレッドボード a-12からmbed LPC1768のP27へ
- 右ブレッドボード a-11からmbed LPC1768のP28へ
- 左のブレッドボードが手前に向く様に90度向きを変えます。
ライブラリとサンプルプログラムのインストール
今回はsuu penさんのEightDotMatrixLedライブラリを使わせて頂きました。(suu penさんには、ライブラリご紹介の許可を頂いておりますが、ご不明な点に付いては、弊社宛にお問い合わせ下さい)
mbed開発者サイトへのユーザー登録は済ませておいて下さい。
- ブラウザでsuu penさんのeightDotMatrixLedLibraryExampleのページを開きます。
- 画面右の「Import this Program」のボタンをクリックします。
- Import Programのダイアログが開かれるので、Importボタンをクリックします。
- これでご自身のCompiler画面に新しいプログラムが出来てライブラリが取り込まれた状態になります。
- 配線をオリジナルのものから変えていますので、37行目をコメントアウトし、次行に下記のコードを挿入して下さい。
EightDotMatrixLed segmentled(0, p25, p13, p14, p22, p16, p23, p27, p28, p21, p26, p18, p24);
サンプルプログラムのコンパイルと実行
- Compiler画面のCompilボタンをクリックします。
- コンパイルが実行され、バイナリーファイル(〜.bin)がダウンロードされます。
- mbed LPC1768をUSBケーブルでPCへ繋ぐと、USB外付けドライブ(mbed)として認識されます。
- mbedドライブへ先ほどダウンロードされたファイルをコピーします。
- mbed LPC1768上のリセットボタンを押すと、プログラムが実行されます。
サンプルスケッチの簡単な解説
- 配列のuint8_t D_dotGrayData[4][8]に輝度データが入っています。
- 1,2行目 0xff:アナログ値指定無効
- 3,4行目 0~100の値:アナログの輝度
- 配列のuint8_t D_dotDigitalData[4][8]に制御データが入っています。
- 1行目 0:スムーズ消灯,1:スムーズ点灯
- 2行目 0xff:スムーズ消灯無効(即時消灯), 1:スムーズ点灯
- 3行目 0:スムーズ消灯, 1:アナログ値までスムーズ点灯
- 4行目 0xff:スムーズ点灯無効
- 3,4行目は明るさ0~100の値で定義されています。
- 上記の組み合わせと横へのスクロールによって、下記のアニメーションが実行されています。
- 1行目 スムーズに点灯して、スムーズに消灯
- 2行目 スムーズに点灯して、パッと消灯
- 3行目 アナログ値までスムーズに点灯して、スムーズに消灯
- 4行目 指定のアナログ値で即時点灯
- segmentled.EightDotMatrixLed_main((uint8_t*)D_dotGrayData, (uint8_t*)D_dotDigitalData); この行によって1行分の表示が行われます。ダイナミック点灯なので、これを何度も呼び出す事により、マトリックスの表示をしています。
- コンストラクタを下記の様に書き換え、配列を[8][8]に拡張すれば、マトリックス全体を使う事も出来ます。
EightDotMatrixLed segmentled(0, p25, p13, p14, p22, p16, p23, p27, p28, p21, p26, p18, p24, p11, p17, p12, p15);
さぁ、みなさんもマトリックスLEDに色んな表示をさせてみましょう。
おまけ
Arduino編と同様のhartbeatのサンプルプログラムを作ってみました。
#include "mbed.h" #include "EightDotMatrixLed.h" EightDotMatrixLed segmentled(0, p25, p13, p14, p22, p16, p23, p27, p28, p21, p26, p18, p24, p11, p17, p12, p15); // EightDotMatrixLed segmentled(0, D5, A1, A0, D8, D12, D7, D3, D2, D9, D4, D10, D6, A3, D11, A2, D13); uint8_t D_dotGrayData_one[8][8] = { { 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 100, 100, 0, 0, 100, 100, 0}, { 100, 100, 100, 100, 100, 100, 100, 100}, { 100, 100, 100, 100, 100, 100, 100, 100}, { 100, 100, 100, 100, 100, 100, 100, 100}, { 0, 100, 100, 100, 100, 100, 100, 0}, { 0, 0, 100, 100, 100, 100, 0, 0}, { 0, 0, 0, 100, 100, 0, 0, 0} }; uint8_t D_dotGrayData_two[8][8] = { { 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 100, 0, 0, 100, 0, 0}, { 0, 100, 100, 100, 100, 100, 100, 0}, { 0, 100, 100, 100, 100, 100, 100, 0}, { 0, 0, 100, 100, 100, 100, 0, 0}, { 0, 0, 0, 100, 100, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0} }; uint8_t D_dotDigitalData[8][8] = { {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff} }; Timer timer; // data change timer uint8_t pattern = 0; // Ticker flipper; void flip() { if(pattern == 0){ segmentled.EightDotMatrixLed_main((uint8_t*)D_dotGrayData_two, (uint8_t*)D_dotDigitalData); } else { segmentled.EightDotMatrixLed_main((uint8_t*)D_dotGrayData_one, (uint8_t*)D_dotDigitalData); } } int main() { // flipper.attach_us(&flip, 300); // the address of the function to be attached (flip) timer.start(); while(1) { // After 500[ms] to start the process if(timer.read_ms() >= 200){ timer.reset(); pattern++; if(pattern == 6) pattern = 0; } // This function, please repeat the process in less than 1ms. flip(); } }