どうも皆様、ご無沙汰しております。
諸事情で活動休止しておりましたが、本年より再稼働させて頂いております。
大変今更ですが、本年もどうぞよろしくお願い致します。
さて早速ですが、遅ればせながらmbedを使って電子工作を行っております。
電子工作の入門などはWeb上にあふれているので、こちらでは実際の使用例などを掲載していき、
少しでもお役にたてればなという次第です。
なぜmbedなのか?
電子工作を手軽に楽しむにあたって、あまり詳しくない人でも耳にに入れたことがあるのは、
Rasberry PIやArduinoのド定番のものではないでしょうか。
実務上でそれらを活用した警官はあるのですが、今回は趣味。
となれば、最も個人的にお手軽なのは、C++でコーディングができるmbedとなるわけです。
Rasberry PIもCで書けますが、セットアップや開発環境に手間が掛かります。
対してmbedはUSBでPC(Win/Mac問わず)に接続すれば、あとはブラウザで開発出来ちゃいます。
焼きこむのも簡単。
まぁ詳細な比較も先達の方たちに譲るとして、要は個人的に好きだから、ですね。
閑話休題。
今回こちらで取り上げるのは、mbed製品の中で最もベーシックとなるmbed NXP LCP1768です。
私はAmazonで購入しました。プライム会員のお急ぎ便の無料体験を使ってすぐ届けてほしかったので(笑)
届くとこんなパッケージで届きます。
早速、初期不良が無いかチェックする為にPCに接続します。
USBのように表示されるので、htmを開きます。
未登録の場合は新規で会員登録してログインすると、開発画面が開けます。
まずは、HelloWordをインポートして、そのままコンパイル・書き込んでサンプル通りに動くか確認します。
具体的な説明はリンク先のサイト様で丁寧に解説されているので、そちらをご参考下さい。
さて、ここからがいよいよタイトルにある、
LEDをBitパターンで光らせるデモを作成する手順です。
Bitパターンについては、電子工作に興味のある方々に今更説明は不要でしょう。
今回は、LED0~4をそれぞれ4ビットと見立てて、0-15の順に光らせていきます。
LED1 4bit
LED2 3bit
LED3 2bit
LED4 1bit
という具合ですね。
たとえば”5″であれば、Bitに表わすと0b0101です。
この時、それぞれのLEDは
LED1=0
LED2=1
LED3=0
LED4=1
がセットされて、LED2とLED4が光っている状態になるわけですね。
完成すると、こんな感じ↓になります。
[実際のBitパターン表示動画]
では具体的にどうやるのか見ていきましょう。
1.Hello Worldプロジェクトをインポートする
HelloWordのサンプルプロジェクトをベースに手を加えていきます。
Hello Worldのサンプルプロジェクトをインポートしましょう。(すでにある場合は開きましょう)
2.四つ全てのLEDを登録する。
Hellow Worldでは一つのLEDしか操作していませんでしたが、
今回は4つのLEDをそれぞれビットに見立てるので、四つ分登録します。
実際に変更したソースコードは以下の通りです。
* Hello Worldのmain.cを修正したソースコード
#include "mbed.h" DigitalOut leds[] = {LED1, LED2, LED3, LED4}; int numLeds = sizeof(leds)/sizeof(DigitalOut); class CtrlLEDs{ public: static void ALLOFF(){ for(int i = 0 ; i < numLeds ; i++){ leds[i] = 0; } }; static void ON(int idx){ leds[idx] = 1; }; static void OFF(int idx){ leds[idx] = 0; }; static void ON_Bit(int flag) { if(numLeds < 4) return; leds[0] = ((flag & 0b1000) > 0) ? 1 : 0; leds[1] = ((flag & 0b0100) > 0) ? 1 : 0; leds[2] = ((flag & 0b0010) > 0) ? 1 : 0; leds[3] = ((flag & 0x0001) > 0) ? 1 : 0; }; }; int main() { int loopCnt = 0; CtrlLEDs::ALLOFF(); while(1) { if(loopCnt<=15){ CtrlLEDs::ON_Bit(loopCnt); loopCnt++; if(loopCnt > 15){ loopCnt = 0; } } wait(0.5); } }
CtrlLEDsでLEDの操作をしています。
ALLOFFで全てのLEDを消灯。
ON(idx)で指定のLEDを点灯。OFF(idx)で消灯。
ON_Bit(flag)が入力された数値のビットが立っている箇所をONにします。
3.数字ループで実行
LEDのコントロールが準備出来たら、あとはmain側で処理を実装するだけです。
実装内容としては、
全LEDを消灯で初期化⇒0~15の数字毎に0.5秒間隔でBitパターンで点灯する。
これだけです。簡単ですね。
このコードはmbedコミュニティで公開しています。