2011年4月13日水曜日

Netduino Plus で SDカード に テキスト を 保存 する

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.NetduinoPlus;

namespace SD
{
    public class Program
    {
        public static void Main()
        {
            try
            {
                if (Directory.Exists(@"\SD"))
                {
                    FileStream fs = new FileStream
                        (@"\SD\\test.txt", FileMode.OpenOrCreate,
                        FileAccess.Write, FileShare.None, 512);
                    StreamWriter sw = new StreamWriter(fs);
                    sw.WriteLine(
                        "hello world" +
                        DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss")
                        + "done.");
                    sw.Close();

                    Debug.Print("\r\n完了");
                    Thread.Sleep(6000);
                }
                else
                {
                    Debug.Print("\r\nSDカードが見つかりませんでした");
                    Thread.Sleep(6000);
                }
            }
            catch (Exception ex)
            {
                Debug.Print(
                    "\r\n不明なエラー\r\n\r\n *********\r\n\r\n" +
                    ex.Message);
                for (int i = 0; i < 10; i++)
                {
                    Thread.Sleep(6000);
                }
            }
        }
    }
}


↑のようなプログラムでSDカードに書き込むことができます
(実験用なのでデバッグコードが書かれています)

ちなみに参照設定を右クリック>参照の追加でSystem.IOを追加してやる必要があります
(普通のWin上のC#の場合 using System.IO; と書き加えるだけでいいので 5分くらい悩みました)

このプログラムでは
  1. SDカードが存在するか確認する
  2. 存在した場合ルートに test.txt というファイル名でテキストファイルを作成する
  3. 正常に完了した場合"完了"と表示する
  4. エラーが出た場合はその旨を表示する
  5. SDカードが存在しない場合はその旨を表示する
という動作をしています
ただ変な文字が書き込まれる場合があるので
SDをフォーマットしてから使用したほうがいいと思います
(おそらくFWのバグで以前の同ファイル名の残骸)

また表示というのはVisualC#の出力ウインドウに表示され
エラー以外は6秒 エラーのみ60秒表示しています

ちなみにSDHCカード等 非SDカード(容量が2GB以上の物)を使用した場合は
SDカードが挿入されていない旨の表示がされるので
注意が必要です(書き込みもされません)

まぁ大体C#と同じ感じに扱えます
というかほとんど同じです
ストリームでファイルを開き
Writeで書き込み
クローズで保存します

ファイルやディレクトリの存在確認もExistsで可能です


NetduinoPlusはさすがにモデルロケットに搭載できるサイズでもないし値段でもないですが
もっと大型のロケットとか ラジコン飛行機などに積んで
加速度や温度を記録すれば面白いかも
2GBという(この用途では)大容量な容量を使うことができるので

ちなみに温度を1箇所分記録させる場合
時間を同時に記録しても多くて30バイト
手持ちのSDカードは2002419712バイトの容量だったので
66747323回
1日に1440回(1分毎)記録しても120年以上記録できる計算です

1日に20回程度なら「長期的な」温度変化も観測が可能ですw


脇道にそれましたが
NetduinoにはArduinoには無い使いやすさがあるので
気が向いたら試してみてください

※ちなみにArduinoでもSDに書き込む程度なら簡単です

0 件のコメント:

コメントを投稿