DDR(풋 컨트롤러)을 Arduino Micro를 통해 인식시킬 때의 메모

소개



본 기사는 DDR(Dance Dance Revolution)의 풋 컨트롤러를 Arduino Micro를 통해 PC에 인식시키기 위한 개조 메모입니다.

아마존에서는 아래와 같은 DDR의 파티몬이 잘 모르는 메이커로부터 판매되고 있습니다.
USB로 PC와 접속·인식합니다만, Mac catalina로 잇따라 인식하지 않았으므로, 구조를 이해하는·분해를 즐기기 위해서 개조해 보았습니다.

유료 소프트로 이러한 컨트롤러를 인식하는 소프트가 있으므로, 개조가 수고라고 하는 경우는 그쪽을 사용하는 것이 좋을 것 같습니다.



필요한 것


  • 풋 컨트롤러
  • Arduino Micro (또는 Arduino Leonardo, Arduino Due)
    HID 기능을 사용하여 입력을 키보드의 버튼에 할당하기 위해 HID 기능이 붙어있는 보드를 사용합니다.

  • 분해



    기판 부분을 분해하면 다음과 같이 되어 있었습니다.
    풋 컨트롤러 부분의 접속은 얇은 필름이 되고, 기판 부분과 접촉하는 것으로 연결되어 있습니다.
    중간의 약간 굵은 선은 GND이며, 그 이외는 풋 컨트롤러의 각 입력 핀입니다.



    거기에서 배선을 적당히 늘립니다.
    그리고 이것들을 마이크로 컴퓨터에 연결합니다.
    GND는 GND, 입력 핀은 디지털 핀에 연결된다.
    이것으로 회로 준비가 끝납니다.



    프로그램



    Github 에도 일단 올려 둡니다.
    먼저 어떤 입력 핀이 어떤 버튼에 연결되어 있는지 확인합니다.
    아래 프로그램의 핀 번호는 선택 사항입니다.
    버튼과 핀 할당을 알면 메모해 둡시다.
    #define SERIAL Serial
    
    void setup() {
      SERIAL.begin(115200);
      pinMode(3, INPUT_PULLUP);
      pinMode(4, INPUT_PULLUP);
      pinMode(5, INPUT_PULLUP);
      pinMode(6, INPUT_PULLUP);
      pinMode(7, INPUT_PULLUP);
      pinMode(8, INPUT_PULLUP);
      pinMode(9, INPUT_PULLUP);
      pinMode(10, INPUT_PULLUP);
      pinMode(14, INPUT_PULLUP);
      pinMode(15, INPUT_PULLUP);
      pinMode(16, INPUT_PULLUP);
    }
    
    void loop() {
      SERIAL.println("Pin 3 is : ");
      SERIAL.println(digitalRead(3));
      SERIAL.println("Pin 4 is : ");
      SERIAL.println(digitalRead(4));
      SERIAL.println("Pin 5 is : ");
      SERIAL.println(digitalRead(5));
      SERIAL.println("Pin 6 is : ");
      SERIAL.println(digitalRead(6));
      SERIAL.println("Pin 7 is : ");
      SERIAL.println(digitalRead(7));
      SERIAL.println("Pin 8 is : ");
      SERIAL.println(digitalRead(8));
      SERIAL.println("Pin 9 is : ");
      SERIAL.println(digitalRead(9));
      SERIAL.println("Pin 10 is : ");
      SERIAL.println(digitalRead(10));
      SERIAL.println("Pin 11 is : ");
      SERIAL.println(digitalRead(11));
      SERIAL.println("Pin 12 is : ");
      SERIAL.println(digitalRead(12));
      SERIAL.println("Pin 13 is : ");
      SERIAL.println(digitalRead(13));
    
      delay(1000);
    }
    
    

    Arduino Micro에 쓰는 프로그램은 다음과 같습니다.
    풋 컨트롤러 입력을 키보드 입력으로 바꾸고 있습니다.
    #include <Arduino.h>
    #include "Keyboard.h"
    #define SERIAL Serial
    
    const int inputPin = 3;
    bool currentState = HIGH;
    bool beforeState = HIGH;
    
    void setup() {
      SERIAL.begin(115200);
      pinMode(3, INPUT_PULLUP);
      pinMode(4, INPUT_PULLUP);
      pinMode(5, INPUT_PULLUP);
      pinMode(6, INPUT_PULLUP);
      pinMode(7, INPUT_PULLUP);
      pinMode(8, INPUT_PULLUP);
      pinMode(9, INPUT_PULLUP);
      pinMode(10, INPUT_PULLUP);
      pinMode(14, INPUT_PULLUP);
      pinMode(15, INPUT_PULLUP);
      pinMode(16, INPUT_PULLUP);
      Keyboard.begin();
    }
    
    void loop() {
      int pinNum[11] = {3, 4, 5, 6, 7, 8, 9, 10, 14, 15, 16};
      #下記は文字コード(ASCIIコード)
      unsigned char s[11] = {0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x70, 0x71};
    
      for(int i; i<11; i++){
        if ( digitalRead(pinNum[i]) == 0){
            //digitalWrite(ledPin, HIGH);
            SerialUSB.println("Push!");
            #ボタンがおされたときに文字を入力
            Keyboard.press( s[i] );
        } else {
            //digitalWrite(ledPin, LOW);
            SerialUSB.println("Release!");
            #ボタンがおされなくなったら文字入力を終了
            Keyboard.release( s[i] );
        }
      }
      delay(500);
    }
    

    정말 어색한 소감



    Arduino Micro와 Leonardo, Due의 HID 기능을 사용하면 재미있을 수 있습니다.

    좋은 웹페이지 즐겨찾기