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を入れる必要とか無いのかな?と思ったけど、動いているのでいらないみたい。

