SFCコントローラー

SFCコントローラーをいくつか買ってあったのでArduinoから読んでみた。

「SFCコントローラー 解析」とかでググるといくつか出てくる。

参考にしたのは次の2つ。
≪SFCコントローラ解析≫
≪SFCコントローラーをパラレル風の信号に変換≫

まずは、コネクタと内部のケーブルとの対応をチェック。

SFCコントローラーコネクタ部

SFCコントローラーコネクタ部

VCC CLK P/S DAT1 —— —— GND
   

※上の写真通りのコネクタのピン位置に対応しています。

ケーブルの先端にピンヘッダーを付ける。

SFCコントローラーのケーブルにピンヘッダーを付ける

SFCコントローラーのケーブルにピンヘッダーを付ける

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

カテゴリー: Arduino, 作業 タグ: , , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください