ロボザックのラジコン(12)
以前、ロボザックのラジコンに関して、あれこれ書いてきました。
しっかり読んでいないのですが、macwinさんのページに、同時にラジコンのスティックを動かした際のRRの左右スティックの値の取得に関して書かれていたようなので、BBSの方に書かせて頂こうかと思いましたけど、長くなりそうなので、大変申し訳ないのですが、こちらで書かせて頂くことにしました
で、アタマの中だけで考えて、実際に挙動を確かめていないので、間違っている所があるかもしれませんが、第一変数のRRの値から、右のスティックの値と、左のスティックの値を取得するプログラムを以下のようにしてみました。
------------
RR_L=RR AND &hF0
RR_R=RR AND &h0F
IF RR_R>8 THEN
IF RR_L=16 THEN
RR_L=9
RR_R=RR-18
ELSE
RR_L=9
RR_R=RR-9
ENDIF
ENDIF
------------
スティックの値は、16進数で表すと、ロボザックのラジコン(11)の図で示した様になります、が、本当は、その図とは異なり、&h80が、&h09が正解です。
もし図のようになっていたならば、16進数の2桁目が左スティック、1桁目が右スティックなので、ANDを取ればOKなので、
RR_L=RR AND &hF0
RR_R=RR AND &h0F
のみの式で、左右を分解できます。わかりますかビット演算は、以前、ここに書いたので、見てみて下さい。あと、2進数とか16進数に関しては、ここに書いてありますので、そちらも参考にして見て下さいね
16進数で&hFは、2進数で表すと&b1111です。ANDは、両方1なら1、それ以外は0になります。なので、2進数で、&b11110000=&hF0とANDを取ると、16進数の2桁目はそのまま、1桁目は0になり、左スティックの値がわかります。同じ様に、2進数で、&b00001111=&h0FとANDを取ると16進数で2桁目が0になり、1桁目の値がわかるということになります。わかりますでしょうか?
が
ここに書いたようにRRの値は127以下であるという制約から、左スティックの左下の値が&h80でなく&h09になっているため、上記プログラムでは、その場合の処理を加えています。
もし、左スティックの左下を動かしているならば、RR_Rは、9以上になっているハズです。右ズティックが7または8の場合は 、「ロボザックのリモコン(8)」に書いたように、25と26なので、RR_Lが16なので、上記のような感じになると思います。。
どうでしょう、わかりますでしょうか
------------------------------------------------
- ロボザックのラジコン
- ロボザックのラジコン(2)
- ロボザックのラジコン(3)
- ロボザックのラジコン(4)
- ロボザックのラジコン(5)
- ロボザックのラジコン(6)
- ロボザックのラジコン(7)
- ロボザックのラジコン(8)
- ロボザックのラジコン(9)
- ロボザックのラジコン(10)
- ロボザックのラジコン(11)
- ロボザックのラジコン(12)
- ロボザックのラジコン(13)
----------------
にほんブログ村
| 固定リンク
「週刊 ロボザック」カテゴリの記事
- 関東ロボット練習会#83に行ってきました(2013.05.06)
- 関東ロボット練習会#83に行く事にした(2013.04.17)
- 週刊 ロボザック、ロボゼロ、ロビ の冊子検索(2012.12.07)
- RBT-001を繋げてみる(20):bt_sample_XeroZak 0.1.0 公開(2011.08.30)
- USB-PS2コントローラでRZ1Basicのシミュレーションをしてみた(2011.08.01)
この記事へのコメントは終了しました。
コメント
以前ジャイロセンサーのデータ取得について質問したYBです。
ロボザックに安定した歩行等をさせたく
ジャイロセンサーのデータが取得できればそれを元に色々と研究出来ると思うのですがいまいち理解に苦しんでます。
メールにて個人的に質問のやり取りをしたいのですがどうでしょうか?
投稿: YB | 2008年12月 3日 (水) 16時13分
私の場合は、以下のルーチンを使っています。
RRLとRRRに左右のスティックの値が1から8で入ります。
RR2に左右のスティックの値を合わせたものが入ります。
RR2を先に判定することで、両スティック同時操作をチェックできます。
RRをクリアしているので、RRLとRRRとRR2がゼロ以外になるのは操作したとき1回だけです。
' *RRから左右のスティックの値を取り出す。
IF RR >= &H09 AND RR <= &H0F THEN
RR2 = &H77 + RR
ELSEIF RR = &H19 THEN
RR2 = &H81
ELSEIF RR = &H1A THEN
RR2 = &H82
ELSE
RR2 = RR
ENDIF
RR = 0
RRR = RR2 AND &H0F
RRL = RR2 AND &HF0 >> 4
投稿: 加藤 | 2008年12月 3日 (水) 20時24分
体調崩してダウンしてました。
&h80に割り当て直すということですね。今回はこういった処理にはビット演算を用いるのが定石ということを示したかっただけなので、方法はいろいろあるでしょう。
あと、ではダメですか?
RRL = RR2 >> 4
投稿: micono | 2008年12月 4日 (木) 23時18分
RRL = RR2 >> 4
で、OKだと思います。
私も動いていればOKということにしています。
投稿: 加藤 | 2008年12月 5日 (金) 17時02分