Digisparkでスーパーファミコンのコントローラーを使う [Arduino]
前提として、スーパーファミコン型のUSBジョイパッドを買ったほうが簡単で安いというのは無しで。
また、この手の話題はすでにライブラリまで作っている方もみえて、何番煎じかという感じです。
うちの近くのハードオフに、スーパーファミコンのコントローラーの中古があるにはあるのですが、手垢で汚い・傷あり・変色・ボタンスカスカ・110円じゃなくて330円。
ですが、とりあえず1個よさそうなものを選んで購入。
Aliexpressでソケットも購入。
こんな感じで、、
先日つくった改造Digisparkと接続できるパーツを仕上げたのですが、改造Digisparkが死亡したため、以前に購入したmicroUSB版 Digisparkを出してきました。
ブレッドボートでつないで、十字キーを読み取るという以下のスケッチで動作確認できました。
メディアキーでボリュームの操作もしたかったんだけど、なぜかできず。
また、この手の話題はすでにライブラリまで作っている方もみえて、何番煎じかという感じです。
うちの近くのハードオフに、スーパーファミコンのコントローラーの中古があるにはあるのですが、手垢で汚い・傷あり・変色・ボタンスカスカ・110円じゃなくて330円。
ですが、とりあえず1個よさそうなものを選んで購入。
Aliexpressでソケットも購入。
こんな感じで、、
先日つくった改造Digisparkと接続できるパーツを仕上げたのですが、改造Digisparkが死亡したため、以前に購入したmicroUSB版 Digisparkを出してきました。
ブレッドボートでつないで、十字キーを読み取るという以下のスケッチで動作確認できました。
// SFC(SNES) controller to HID // _______________+----- GND (Brown)
// digispark(USB 16.5MHz) version // |_O_O_O_O_|_O_O_O_) connector
#define DAT 0 // | | | +------------> DATA1 (Red)
#define PS 1 // | | +--------------< P/S (Orange)
#define CLK 2 // | +----------------< CLK (Yellow)
#include "DigiKeyboard.h" // +------------------- VCC (White)
void setup() {
pinMode( DAT, INPUT );
pinMode( PS , OUTPUT );
pinMode( CLK, OUTPUT );
digitalWrite( CLK, HIGH );
DigiKeyboard.sendKeyStroke(0);
}
void loop() {
uint16_t sfc = 0;
digitalWrite( PS , HIGH );
digitalWrite( PS , LOW );
for(uint8_t i=0; i<12; i++) {
sfc |= ( digitalRead( DAT )^1 ) << i;
digitalWrite( CLK, LOW );
digitalWrite( CLK, HIGH );
}
// 0:B, 1:Y, 2:SEL, 3:STA, 4:UP, 5:DOWN, 6:LEFT, 7:RIGHT, 8:A, 9:X, 10:L, 11:R
if( sfc & (1<< 4) ) DigiKeyboard.sendKeyStroke( 0x52 ); // UP -> KEY_ARROW_UP
if( sfc & (1<< 5) ) DigiKeyboard.sendKeyStroke( 0x51 ); // DOWN -> KEY_ARROW_DOWN
if( sfc & (1<< 6) ) DigiKeyboard.sendKeyStroke( 0x50 ); // LEFT -> KEY_ARROW_LEFT
if( sfc & (1<< 7) ) DigiKeyboard.sendKeyStroke( 0x4f ); // RIGHT -> KEY_ARROW_RIGHT
DigiKeyboard.delay(10);
}
メディアキーでボリュームの操作もしたかったんだけど、なぜかできず。
タグ:Digispark
2022-05-21 11:21
nice!(0)
コメント(0)
コメント 0