俺の勝ち!!!!!!!!!!!!!!!!!!!!!!!! pic.twitter.com/LlJDpBvN90
— △Natua♪▽ (@natua_tcmm) 2024年2月21日
要約
スライダーを買おう!
ヤフオクでたまに漂流してます。私は20000円で購入しました。
※5000円くらいで売ってる(ように見せかけてる)詐欺サイトがあるらしいので注意!
思ってる3倍くらいデカい箱で届きます。思ってる10倍重いです。
ハーネスを加工してケーブルを伸ばそう!
純正ハーネスのソケット(左下のやつ)が謎なので、ぶった切って汎用ソケットに交換しました。ついでにケーブルもなが~~~~く。
12Vを供給しよう!
2Aの電源を使いましたが、実際の消費電流は500mAくらいでした。1A電源で行けると思います。
逆接続すると一瞬で死ぬらしいので、保護回路は必ず付けておきましょう。(SBDでOK)
Arduinoとシリアル通信をしよう!
UARTです。通信速度は115200に設定しましょう。
通信速度がはやいのでソフトウェアシリアルだと無理です!ハードウェアシリアルを使いましょう。
Arduino UNOだとハードウェアシリアルが1つ(PCとの通信に使うやつ)しかないです。今回はハードウェアシリアルが複数あるArduino MEGAを使用しました。
あと極性反転が必要です!
通常のUART通信は「待機状態は常時HIGH・立ち下がりエッジを検出して通信を始める」って仕様です。
このスライダーは逆で、「待機状態は常時LOW・立ち上がりエッジを検出して通信を始める」となっています。
は?逆やんけおいSEGA pic.twitter.com/hepg1RnYsX
— △Natua♪▽ (@natua_tcmm) 2024年2月3日
※2枚目の波形は後述の参考サイトから入手しました。
Arduino側で極性反転できればよかったのですが、どうやらできないようです。
ということで、通信経路にインバータIC(74HC04)を挟んで対応しました。挟めばすぐ動きます。
余ってたArduinoで反転回路を組めばいけるんじゃね?と思いましたが、速度が足りねぇ!状態になったのかうまくいきませんでした。
Arduinoに通信プログラムを書こう!
こちらのサイトでプロトコルが解説されていますので、その通りに動くようにプログラムを組めばOKです。(波形もここから)
ちなみにスライダーの通信プロトコルはDIVAのタッチスライダーと同じです。マジか。
「接続確認」と「スキャン開始指示」と「LED発光指示」さえ出せばOKです。他はやらなくても動きます。
スキャン開始指示を出すと約16.67ms間隔でタッチ状態の情報が来ます。1回出せばずーっと来ますが、こちらから何も情報を送らない期間が一定時間続くと勝手にリセットされちゃうので、定期的に送っておきましょう。5秒間隔とかでOK。
LED情報は32個指定しますが、実際は31個しかないです。32個目は無視されます(DIVAの名残だと思います)。
光り方を変えて遊んだりしましょう。(オンゲキ風実装するの忘れた)
本家風
— △Natua♪▽ (@natua_tcmm) 2024年2月23日
DIVA
DJMAX 4key
DJMAX 5key
DJMAX 6key pic.twitter.com/KeXM82hkmD
あとはキーボードとして認識させるライブラリを使えば、PC音ゲーを遊べますね!!!
え?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
てか5V動作でUART複数搭載でHID対応のArduinoないの?????
キーボードとして認識させよう!
Arduino Leonardoが届いたので、Arduino MEGAとシリアル通信してキー情報を受け取り、PCに送信するプログラムを書きました。
PCにキー入力を送信するのはちょー簡単で、Keyboard.hを使えば一瞬でできます。
Arduino MEGA側のプログラムは処理速度が重要なので、SoftwareSerialなんてのは使ってられません。なのでMEGA側からは有り余るHardwareSerialで送信、Leonardo側はSoftwareSerialで受け取る形としました。
あとはプログラムをいじって入力したり離したりフリック検知するようにすれば完成~
※DIVAのスライドについて
「今回新たに反応したセンサの隣のセンサが前回反応していたらフリック入力したと判断する」というシンプルなプログラムで取得はできました。
が、一瞬だけスライドボタンを押すだけだとチェーンスライドが一切入ってくれません(これはおうちDIVAの仕様です)。
なので、フリック入力後0.1秒間はスライドボタンを長押しするようなプログラムとしました。
そのため、0.1秒以内くらいの間隔で同方向スライドが飛んでくると巻き込んだりします。しゃーない。
次はダンカグかな~~(まだ買ってない)