SFCコントローラーをいくつか買ってあったのでArduinoから読んでみた。
「SFCコントローラー 解析」とかでググるといくつか出てくる。
参考にしたのは次の2つ。
≪SFCコントローラ解析≫
≪SFCコントローラーをパラレル風の信号に変換≫
まずは、コネクタと内部のケーブルとの対応をチェック。
VCC | CLK | P/S | DAT1 | —— | —— | GND |
白 | 黄 | 橙 | 赤 | 茶 |
※上の写真通りのコネクタのピン位置に対応しています。
ケーブルの先端にピンヘッダーを付ける。
全部のボタン情報をLEDに出せないので、Aボタンと十字キーの上だけをLEDに出して確認。
DAT1が負論理でそのままLEDの出力に入れているので、ボタンを押していない時にLEDが点灯し、ボタンを押すとLEDが消える。
#define SFC_DAT1 0 #define SFC_PS 1 #define SFC_CLK 2 #define OUT_UP 12 #define OUT_A 13 void setup() { pinMode(SFC_DAT1, INPUT); pinMode(SFC_PS, OUTPUT); pinMode(SFC_CLK, OUTPUT); pinMode(OUT_UP, OUTPUT); pinMode(OUT_A, OUTPUT); digitalWrite(SFC_PS, LOW); digitalWrite(SFC_CLK, LOW); } void loop() { int data[16]; while (1) { digitalWrite(SFC_PS, HIGH); digitalWrite(SFC_CLK, HIGH); digitalWrite(SFC_PS, LOW); digitalWrite(SFC_CLK, LOW); data[0] = digitalRead(SFC_DAT1); for (int i = 1; i < 16; i++) { digitalWrite(SFC_CLK, HIGH); digitalWrite(SFC_CLK, LOW); data[i] = digitalRead(SFC_DAT1); } digitalWrite(OUT_UP, data[4]); digitalWrite(OUT_A, data[8]); } }
CLKをLに変化させてからDAT1を読むのにDelayを入れる必要とか無いのかな?と思ったけど、動いているのでいらないみたい。