ACC4LVを深耕するため、オリジナルコードを書いてみることにしました。
まずシナリオですが、手元にあるRTC(I2C)とSDカードを使い、次のようなアプリケーションを検討しました。
- Arduino内で、定期的にRTCから時刻を読み取り、SDカードに書き込む。また、シリアル標準出力に出力する
- HostPCとはUSB/UARTで接続したまま(/或いは接続し直す)で、時刻データを逐次受取、画面に表示します。
- HostPCからは送信中断および、書込終了のコマンドを用意します。書込終了を送った後、SDカードを取り出して中身を確認します。
実際に作成したコードは以下の通りです。
ここまで来るのに結構時間が掛かりました。使用できる関数はACC4LVで提供されるものだけにしているのですが思わぬエラーで躓いてしまいます。
デバッグ方法の確率が必要です。これにはそれなりの時間が必要ですね。
RTCは手元にDS3231しか有りません。ACC4LVで提供されているDS1307とはソース互換があるはずですが、さてどうなるか。
Exampleは動きました。時刻セットが出来ていませんが。csはpin4に変更しました。
時刻プリセット出来るように修正しました。動きました。
毎回SDファイルのOpen/Closeをするのが気になり、Loopの外に出したのですが、そうすると期待通りに動かないことが判りました。
ファイルの作成は出来ますが、何も書き込まれませんでした。このことから、関数がパックしてある意味が想像出来ます。シリアル通信を追加してみました。
この場合、文字列はちゃんとHostPCにも返ってきます。
これができたら、双方向通信が出来るようにレタッチしてみたいところです。
また、何らかの実際のデータをロギングするように書き換えたいところです。一つ判ったこととして、制御コマンドをU8_1バイトで送信するという考えは要検討です。ASCIICharにコマンド割り付けしてうまくゆかないか検討しました。とりあえず、TimeStampの再設定を実現したいです。ArduinoIDEでは実現出来ています。
時刻の再設定をPC側から出るように検討しました。PC側の時刻を再フォーマットして送信します。要求コマンドを“R”としボタンを押したら、Rコマンドと更新データを送ることにします。
これに伴ってArduino側のファームコードも修正します。普段はタイムスタンプとデータをSDカードに書き込むと共にシリアル出力に出力します。
シリアルバッファに文字列が書き込まれたらその処理を実行します。実際に時刻を更新することが出来る事は確認出来ました。しかし、ちょっと反応が良くありません。もう少し検討は必要ですね。
幾つか確認出来た不具合(1.0.0.21)
- Caseストラクチャで、単純な“default”ケースを作成してしまうと、コンパイラが通りません。
C:\Users\<user>\AppData\Local\Temp\xx.tmp\temp\temp.ino: In function 'void setup()': temp:188: error: 'Default' was not declared in this scope else if( Node973Out== Default) exit status 1単純にデフォルトをエレメントに連結すれば通ります。発生し得ない値と共にそのケースを“default”にすれば良いようです。
ACC4LVのコンソールを見ているだけではこのエラー解析は困難です。
パスを辿るとtemp.inoが見つかります。Arduino-Cに変換されたコードを読むことは出来ます。LVダイアログと見比べてどこで発生しているのか辺りを付けてゆくとヒントが見つかるかと思います。
- SubVI自体は使えそうですが、何か制限があるようです。それがなんなのか、把握できていません
- ACC4LVで使用できる関数は限られます。専用パレットを眺めながら使用する必要があります。
- I2CではU8の配列を扱う必要が必ず出てきます。そのとき値をU8にどのように丸めるか、テクニックが必要になる場合はあります。
単純にU8へTypeCast出来るわけではありません。NotSuportedです。256で割って余りを扱えばいいのかというとこれはU8になりません。なかなか難しいところです。- コンパイラエラーが続きます。構文解析が通っても未サポートだと云って実行できないです。
エラーメッセージにファイルパスが残っているかと思います。
C:\Users\<user>\AppData\Local\Temp\xx.tmp\temp\temp.ino: In function 'void setup()':
C:\Users\<user>\AppData\Local\Temp\xx.tmp\output\sketch\temp.ino.cpp というのが構文解析で作成された実行ソースと思われます。このファイルをエディタで開き、エラーメッセージと比較しながら検討してゆく必要があります。
今回のエラーはバンドルが使われていることが原因だと想像出来ました。クラスタは使えないようです。- FPGAもそうですが、CASE文の扱いは難しいですね。すべてのケースを実行して最後に選択するような記述にしないとなかなかエラー回避できないみたいです。
免責事項
本ソフトウエアは、あなたに対して何も保証しません。本ソフトウエアの関係者(他の利用者も含む)は、あなたに対して一切責任を負いません。
あなたが、本ソフトウエアを利用(コンパイル後の再利用など全てを含む)する場合は、自己責任で行う必要があります。本ソフトウエアの著作権はToolsBoxに帰属します。
本ソフトウエアをご利用の結果生じた損害について、ToolsBoxは一切責任を負いません。
ToolsBoxはコンテンツとして提供する全ての文章、画像等について、内容の合法性・正確性・安全性等、において最善の注意をし、作成していますが、保証するものではありません。
ToolsBoxはリンクをしている外部サイトについては、何ら保証しません。
ToolsBoxは事前の予告無く、本ソフトウエアの開発・提供を中止する可能性があります。
商標・登録商標
Microsoft、Windows、WindowsNTは米国Microsoft Corporationの米国およびその他の国における登録商標です。
Windows Vista、Windows XPは、米国Microsoft Corporation.の商品名称です。
LabVIEW、National Instruments、NI、ni.comはNational Instrumentsの登録商標です。
I2Cは、NXP Semiconductors社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。