2011年6月29日水曜日

ドリトルのArduino対応のバグとったつもり

先日報告した、「アナログ入力」で読んだ値が128以上で65535以下になる件、とりあえずのquick hack。

問題は、intの値をSerial.write()する際にUTF-8でどうやらドリトル側が受け取っているらしいということ。そこでいくつか試したけれど、数値を文字列化して送ってやればいいということになった。

まず、arduino_dolittle.pde側(Arduinoのスケッチ)。


34c34
<       Serial.write(analogRead(port)/4);
---
>       Serial.print(analogRead(port)/4,DEC);

というわけで、Serial.print()命令で、10進の文字列出力することにした。

続いてarduino.ini(ドリトルのオブジェクト定義)側。

26c26
<     「c>0」!なら「(_arduino!(c)値?)!文字コード」そうでなければ「0」実行。
---
>     「c>0」!なら「(0!(_arduino!(c)値?)add)」そうでなければ「0」実行。

変数「c」の値は到着したバイト数を表しているので、「(c)値」でその文字数分だけ読み込んでくれるから、そのままでもよさそうだけれど、念のため数値に変換するつもりで、整数0を足してみた。

一応、以下のような適当なプログラム

システム! "arduino"使う。
a=arduino! 作る "/dev/tty.usbmodem26221"ひらけごま。
アナログ値=フィールド!作る。
pot = a!0 アナログ入力。
タイマー!作る  「アナログ値!(pot!読む)書く」実行。

でなんとかなっている感じ。