MotionProcessorには随時値が格納される変数が8個(V14~V22)あります。
その1個の変数には10進数で0~255、16進数で0x00~0xFFを渡すことが出来て、通信フォーマットは「#001122334455667788crlf」となっています。
"#"の右横の"00"が変数V14に渡す値("88"が変数V22)になるのですが、16進数の表し方が特殊。
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
は
0,1,2,3,4,5,6,7,8,9,:,;,<,=,>,?
とキャラクタコードで表さなければなりません。
これが理解・変換処理作成するのにテコズリました。。
最初普通に16進数の値を格納させていたらMotionProcessorはウンともスンとも言いません。
「あれー?」とROBO-LINKや現行の中村博士マイコン内蔵コントローラーをパソコンに繋げて表示させてみると何やら「?」やら「<」といった記号が表示されているのでASCⅡ表を眺めていると、どーも16進数で0x30~0x3Fの16個が表示されている様子。
試しに変換処理を作ってみると(これが苦労しました・・・。)ビンゴ!上手くいきました!
ですが喜んでいられるのもつかの間、変数V22に格納されるボタンを長く押すとMotionProcessorが止まってしまう現象に遭遇。
これも「あれれー?」とC言語のHPを見漁ったり会社のC言語得意な人に尋ねたりしていると「改行コード」について恐るべき事実がある事に気付く。それは・・・
改行コードには「CR(¥r)」と「LF(¥n)」の2種類あるとのこと。。
そういえば通信フォーマットにも「crlf」と書いてあります。私そんなの無視して「LF(¥n)」しか記述してませんでした、、、なはは。
ので早速修正してみると上手く動くように!
とまー初めてのC言語開発なので他にも色々ありましたがなんとかATMEGA32でコントローラーを作る目処が立ちました!
これで小さい片手で持てるコントローラーが出来そうです!
色々とアドバイス下さった
いずみかわさんや
ミッチーに感謝感謝です!
コメント