マトリックスLEDキットの使い方(mbed LPC1768編)

好評発売中のマトリックス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はブラウザによるオンライン開発が基本です)

 有ると便利なもの

組み立て方

  1. ブレッドボードを横に連結します。 R1135264_1024
  2. 8x8マトリックスLED をブレッドボードに挿します。LEDの1と書かれた(赤丸)側に 1番ピン(緑丸)が有るので、左側ブレッドボードのj-11に入る様に挿し込んで下さい。(青丸の並び) R1135263_1024
  3. 抵抗(100Ω × 8本、0Ω × 8本)の足を幅400mil(ブレッドボードの穴5つにまたがる長さ)に曲げます。 ワイヤーストリッピングゲージの5の所を使うと綺麗に曲げられます。 (合わせて抵抗の足を曲げた所から7〜8mm程度にニッパで短くカットしておくと綺麗に仕上がります) R1135265_1024
  4. 抵抗をブレッドボードに挿し込みます。(抵抗に向きはありません)
    • 左ブレッドボード d-11からf-11
    • 左ブレッドボード d-12からf-12
    • 左ブレッドボード d-13からf-13へ 100Ω
    • 左ブレッドボード d-14からf-14100Ω
    • 左ブレッドボード d-15からf-15
    • 左ブレッドボード d-16からf-16100Ω
    • 左ブレッドボード d-17からf-17
    • 左ブレッドボード d-18からf-18
    • 右ブレッドボード g-18からe-18
    • 右ブレッドボード g-17からe-17100Ω
    • 右ブレッドボード g-16からe-16100Ω
    • 右ブレッドボード g-15からe-15
    • 右ブレッドボード g-14からe-14100Ω
    • 右ブレッドボード g-13からe-13
    • 右ブレッドボード g-12からe-12100Ω
    • 右ブレッドボード g-11からe-11100Ω R1135255_1024
  5. ブレッドボードと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のP28R1135270_1024
  6. 左のブレッドボードが手前に向く様に90度向きを変えます。

ライブラリとサンプルプログラムのインストール

今回はsuu penさんのEightDotMatrixLedライブラリを使わせて頂きました。(suu penさんには、ライブラリご紹介の許可を頂いておりますが、ご不明な点に付いては、弊社宛にお問い合わせ下さい)

mbed開発者サイトへのユーザー登録は済ませておいて下さい。

  1. ブラウザでsuu penさんのeightDotMatrixLedLibraryExampleのページを開きます。
  2. 画面右の「Import this Program」のボタンをクリックします。
  3. Import Programのダイアログが開かれるので、Importボタンをクリックします。
  4. これでご自身のCompiler画面に新しいプログラムが出来てライブラリが取り込まれた状態になります。
  5. 配線をオリジナルのものから変えていますので、37行目をコメントアウトし、次行に下記のコードを挿入して下さい。

    EightDotMatrixLed segmentled(0, p25, p13, p14, p22, p16, p23, p27, p28, p21, p26, p18, p24);

 

サンプルプログラムのコンパイルと実行

  1. Compiler画面のCompilボタンをクリックします。
  2. コンパイルが実行され、バイナリーファイル(〜.bin)がダウンロードされます。
  3. mbed LPC1768をUSBケーブルでPCへ繋ぐと、USB外付けドライブ(mbed)として認識されます。
  4. mbedドライブへ先ほどダウンロードされたファイルをコピーします。
  5. mbed LPC1768上のリセットボタンを押すと、プログラムが実行されます。

R1135268_1024

サンプルスケッチの簡単な解説

  • 配列の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();
    }
}