読者です 読者をやめる 読者になる 読者になる

Lynx-EyEDの電音鍵盤 新館

広帯域制御屋の駄文とか

MARYDuinoにSDクラス組み込もうとしたけど、どうしたものか

ARM LPCXpresso

MARY基板のWikiサイトArduino「っぽいコーディングが出来る」MARYDuinoを作ってます。
簡単なArduinoスケッチであればほぼ無変更で動くかも?
f:id:Lynx-EyED:20110819232639p:image
Arduino言語とOLEDクラスでマンデルブロ集合演算させてた結果を描画中の図


といってもまだまだ実装できていない機能ばかりですが。
gpio周りやデバッグに必要だと思われるSerial.print(data,RADIX_FORMAT)や、delay(ms),millis()など時間計測に必要な最低限の機能は、揃えたと思います。

GPIOのピン番号ですが、MARY基板の外形は正方形なのでArduinoのピン配置を無理やり割り当てるのは賢くないと思いました。
でも、いちいちデータシート見てるのも面倒くさいので、MB基板のコネクタ番号をアサインするようにしました。
たとえば

  • CN1_7(PIO1_2) → C17
  • CN2_4(PIO1_5) → C24
  • MBの裏の青LED → BLED
  • MBの裏の赤LED → RLED
  • MBの裏の緑LED → GLED

みたいな感じ。
LEDを三色全部点灯したかったらこうします

pinMode(GLED,OUTPUT);
pinMode(RLED,OUTPUT);
pinMode(BLED,OUTPUT);

digitalWrite(GLED,LOW);
digitalWrite(RLED,LOW);
digitalWrite(BLED,LOW);


で、ArduinoにはSD・FILEクラスがあるのですが、これをChaN氏のpetit FatFsをベースにC++ラッパーを作ろうとしたところ、引数やファイルシステムオフジェクトの違いなどが多岐にわたり存在していて、挫折…。

「もう、オリジナルのFatFsクラス作っちゃえば良いや」

という情けない展開に。
試作中のコードはMARY基板のWikiサイト - MARYDuinoのダウンロードページにおいてあります。まだ読み込みにしか対応していません。

実際このクラスを使って、Arduino言語(?)で組むとこうなる。SDカードに"MESSAGE.TXT"を作って何かテキストを保存しておけば、UART経由で内容をダンプしてくれるコードです。MARY-XB基板を使う事を前提としています。

#include <libmary.h>
//#include "maryoled.h"
#include <SD.h>

void setup()
{
     FRESULT rc;

     Serial.begin(9600);
     if (!SDFile.begin())
     {
         Serial.println("Cannot detect SDCard") ;
         return ;
     }
     Serial.println("card initialized.") ;
     rc = SDFile.open("message.txt") ;
     int dat;
     if (!rc) {
          // ファイルの内容をSerialに出力
          while ((dat=SDFile.read())!=-1) {
    	          Serial.write((char)dat);
          }

          SDFile.close() ;
          Serial.println(""); //改行
          Serial.println("read end.");
     } else {
          // ファイルオープン失敗
          Serial.println("Failed to open...") ;
     }

}

void loop(void)
{

}

一応、動いています。
どうしたもんかなぁ。
デバッグ中の風景。XBee-ZB経由でSerial.printの内容をXBeeエクスプローラに飛ばして、TeraTermに結果をダンプさせています。
ちょっとこのタイプのXBeeは設定が以前のタイプと異なるようで、焦りました。
f:id:Lynx-EyED:20110819203158j:image

■参考文献(ブログ)