2015/01/17からのアクセス回数 6136
安く、ソースデバッガーが使えて、豊富なライブラリーが使える開発環境を作ろうと少しずつ開発を進めてきました lbed ですが、Arduinoのシールドを意識しながら、lbeDuinoと言う形で整理してみたいと思います。
この記事は、鈴木哲哉さんの著書 作って遊べるArduino互換機 に強く影響を受けています。 Arduinoのシールドとの変換シールドを作れば、安くて簡単な万能基板が使えることは、 気軽に電子工作を楽しむ第一歩になると考えたからです。
lbeDuinoでは、プログラムの開発はLpcExpresso Ver.6以降を使っています。 デバッガには、トラ技のARMデバッガを使用しましたが、LPC-LINK, LPC-LINK2も使えます。
最初は、LPC1114FN28でArduinoシールドを使えるボードを探したところ、 ITショップ「えとせとら」でNeXtPino を見つけました。 *1
早速購入して、lbedを移植して試してみました。
しかし、lbedのライブラリで動作確認を進めていくと、いくつか問題点がでてきました。
Arduino勉強会では、ProtoSnap Pro Mini を使っているので、シリアル通信とUSBからの電源供給は、 FTDI USBシリアル変換アダプターを使います。 シリアル変換アダプターを購入されるのなら、 スイッチサイエンスの FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き) が便利かと思います。
ピンの使い方は、mbed LPC1114FN28を参考にしました。
手書きで申し訳ありませんが、lbeDuinoの回路を以下に示します。
出来上がったlbeDuinoは、以下の様になりました。*3
Arduinoの動作確認と言えばblinkなので、lbeDuinoでも以下の様なlbeDuino_Blink.cpp作って動作を確認しました。
今回Arduino版のlbedと同じスケッチが使えるようにサンプルプログラムをArduino風に書きました。
lbedのArduino版については、Arduino/Arduinoでmbedユーザライブラリーを動かすを参照してください。
ledをDigitalOutのインスタンスとして作成し、LEDのオン・オフをled = !ledのように書けるところがmbed風 のプログラミングの分かりやすいところです。
#include"lbed.h" DigitalOut led(D13); void setup() {} void loop() { led = !led; wait_ms(1000); }
これまで作ったlbed用のユーザライブラリをlbeDuinoで動かしてみます。
mbedのTextLCDをlbedで動かしてみます。
3.3Vで動作するLCDは、オレンジボードに載せたものだけなので、以下の様にオレンジボードと接続して 動作を確認しました。
オレンジボード | lbeDuino |
p24(rs) | D0 |
p26(e) | D1 |
p27(d4) | D2 |
p28(d5) | D3 |
p29(d6) | D4 |
p30(d7) | D5 |
動作確認をしたときの画像は、以下の通りです。
TextLCDの場合も、mbedのTextLCDの例題がそのまま使えます。
Arduino風に書いたlbeDuino_TextLCD.cppは、以下の通りです。リセットするとHello Worldが上手く表示できないので、 少し調整が必要ですが、なんとか動きそうです。
#include "lbed.h" #include "TextLCD.h" DigitalOut led(D13); TextLCD lcd(D0, D1, D2, D3, D4, D5); // rs, e, d4-7 int count = 0; void setup() { lcd.print("Hello World!"); } void loop() { lcd.locate(0, 1); lcd.print("Count="); lcd.print(count++); led = !led; wait_ms(1000); }
パソコンとのシリアル通信(Serial)をArduinoのシリアルモニタを使ってテストしてみます。
シリアルを使う時には、FTDI USBシリアル変換アダプターを接続し、Rx, Txのジャンパーを結線します。
シリアルの動作確認にlbeDuino_Serial.cppを作成し、予めArduinoのシリアルモニターを起動し、 ボーレイトを9600にセットして下さい。
#include "lbed.h" DigitalOut myled(D13); Serial pc(D0, D1); void setup() { pc.baud(9600); pc.println("Hello World!"); } void loop() { char c = pc.read(); pc.write(c + 1); myled = !myled; }
最初にHello Worldを出力し、次に入力した文字の次の文字を返します。abcefgと入力するとbcdfghと返してきます。
皆様のご意見、ご希望をお待ちしております。勉強会で分からなかったこと等、お気軽に問い合わせて下さい。
スパム防止に画像の文字列も入力してください。