昨日のロボットの話は明日かなんかに書くとして、
こないだからの懸案事項の一つ、Arduino使って
スーファミのコントローラから入力を読み取るのを
やってみた。
スケッチはすでに作ってあった(NES用に公開されて
いたのを、12ビット分読み込むように変更したりした)
ので、とりあえず書き込んで、シリアルモニタで眺めて
みるだけなんだけど…
読み込み自体はできている。けど、なんか、押してる
ボタンとビットの立ち方が一致しない。4方向ボタン
を押してる間は4方向ボタンのどこかしらにビットが
立つ(正しくは逆で、押してないのが「1」、押して
いるのが「0」で表示される)んだけども、場所が変。
ボタン類も、なんかおかしなところが押されたように
表示されてる。
もしかして、実験に使っているのが、Aliexから買った
互換品だから、それが設計バグってたりするの?とか
思って、もう1個ハードオフで買っておいた任天堂純正
の中古品を使って試してみる。
…同じ。やっぱビットが立つところがおかしい。
しばし考える。なんでこうなるの?と。
一旦ばらして、しばらく別のことしてて、そのあと
ふとスーファミコントローラのことを思い出したときに、
「あ…」
と思いつく。
参考にしたスケッチと、ビット順が逆なんじゃね?と。
実際、12ビットのデータのうち、上下左右のボタンは
中央の4ビットで、左4ビットと右4ビットはボタン類。
ってことは、逆順になっちゃっても、十字キーは十字
キーのところにビットが立つし、ボタン類はボタン類
のところにビットが立つ。
多分それだろ?と。
で、シリアル出力部分の、どのビットがどのボタン
なのかを表示している部分を逆順に書き直してから
再実行してみる。
![](https://blogimg.goo.ne.jp/user_image/19/73/b1b26d9dc6718e54ceb0ceb7359faa65.jpg)
おぉ、できたできた。(ちなみに、右下とBボタンを
同時に押した状態がこれ)
このシリアルモニタに表示されているrlXARLDUSSYB
っていうのが、それぞれのボタンの位置を示している。
小文字でrlなのはコントローラ側面のRとLのボタンで、
XAYBはそれぞれのボタン、RLDUは右左下上、SSは
スタートとセレクト。これらを逆順に書いてしまって
いて、しかもうまい具合に4方向ボタンとその他ボタン
が逆順の場合も同じ配置になっているってところが、
気づくのを遅らせてたな…。
なんにしても、うまい具合に動かせるようになったので、
あとはFritzingのパーツデータ作って、基板を描きたい
ところ。
そうそう。こないだお台場で、フォーミュラEやってる
っていう話を聞いたので、「お?もしかしてストリート
でやってるなら、JARTICに表示されるんじゃね?と
思って、出かける直前にハードコピー取っておいたん
よね。
![](https://blogimg.goo.ne.jp/user_image/5b/6e/a8b97fd8df0b7a7bfeb222380abe975a.jpg)
うん。見事。ここでやってたのね。へぇ。
![](/images/clear.gif)
![](/images/clear.gif)
![](/images/clear.gif)
|