スーパーファミコン コントローラーの無線化プロジェクト:コントローラー状態の読み取り
スーパーファミコンのコントローラーは、本体からP/Sのパルスと、CLKの供給を受けて、そのタイミング事に、ボタンの押している状態を返す。 無線化する際に、本体側のP/Sなりを子機にあたるコントローラー側に無線で飛ばしてやる事も考えられるが、無線の遅延を考えるとあまり得策ではないだろうと考えた。 基本ボタンの状態だけを本体側は受信して、本体クロックにあわせて、本体にDATの信号を返すで動かす。完全に非同期。1秒に60回、16.6msec、本来の入力状態から遅延する事が考えられるが、m秒を争うゲームをする訳でもないので。 コントローラー(ゲームパッド)に向かって、本体からではなく、マイコンで生成したP/SとCLKの偽物データを送りつけて状態を読みとることをテストとして行う。 とは言え、16.6ms間隔でデータを生成したいので、これだけはTimerを使って時間をできるだけ正確にとることにする。 ESP8266TimerInterruptと先人の方々らライブラリーを用意してくれているのありがたく使う。 #include "ESP8266TimerInterrupt.h" #define PS_PIN 4 //D1 #define DAT_PIN 14 //D5 #define CLK_PIN 5 //D2 ESP8266Timer ITimer; void timertask () { int status=0b 0 ; digitalWrite (PS_PIN, HIGH); delayMicroseconds ( 12 ); digitalWrite (PS_PIN, LOW); delayMicroseconds ( 6 ); for ( int i= 0 ;i< 16 ;i++){ digitalWrite (CLK_PIN, LOW); if ( digitalRead (DAT_PIN)==LOW){ bitWrite (status, 15 -...