M5 Stack에서 BM 컨트롤러 실행

7608 단어 M5stacktoio
정리하다가 그리운 컨트롤러가 생겨서 한번 돌려봤어요.

하드웨어 제작


PS3 컨트롤러를 연결하는 커넥터를 만듭니다.
이번에는 아래 콘센트를 사용했습니다.

경로설정


콘센트와 M5 Stack Core 2의 배선은 이렇습니다.

상술한 플러그라면 8번은 끝이 없다.
3번은 진동용 전원으로 7∼9V를 입력해야 해 이번에는 사용하지 않았다.
1호와 6호에 1kΩ가 장착된 당김 저항.
  • Data
  • Command
  • Vibration
  • GND
  • 3.3V
  • Attention
  • Clock
  • Unkown
  • Acknowledge
  • 위로 올리면 이런 느낌이에요.


    예쁘지는 않지만 배선하면 이런 느낌이에요.
    플러그는 고무관으로 고정한다.

    소프트웨어


    이번에 사용한 창고는 여기 있습니다.

    살짝 수정할게요.


    이 라이브러리를 직접 사용하면 작동하지 않으니 조금만 수정해 주세요.

    환경에 대한 수정

    PS2X_lib.hPS2X_lib.cpp 중 이하ESP8266로 지정된 부분에 추가ESP32했다.
    수정 전
    #ifdef ESP8266
    
    수정 후
    #if defined (ESP8266) || defined(ESP32)
    

    아날로그 연결을 추가할 때의 처리


    이 프로그램 라이브러리는 아날로그 통신을 전제로 한다.
    디지털로 작동하는 기기(이번에는 BM 컨트롤러)의 경우 데이터를 확보해 확인 처리하는 데 시간이 걸리는 현상이 발생했다.
    따라서 디지털 기기의 경우 검사 취소 처리가 추가됩니다(일시적으로 이동됩니다)
    통신에 대해서 자세히 알아보고 싶으신 분들은 이쪽을 봐주세요.
    데이터를 검사할 때 숫자(0x40)라도 끝 대상으로 추가됩니다.
    고친 곳
    PS2X_lib.cpp(122행)
    if ((PS2data[1] & 0xf0) == 0x70 || (PS2data[1] & 0xf0) == 0x40)
      break;
    
    이어 시뮬레이션이 아니면 취득 속도를 조정하는 처리가 있기 때문에 숫자의 경우 무효로 한다.
    고친 곳
    PS2X_lib.cpp(131행)
    if ((PS2data[1] & 0xf0) != 0x70 && (PS2data[1] & 0xf0) != 0x40) {
        if (read_delay < 10)
            read_delay++;   // see if this helps out...
    }
    
    함수 반환 확인에도 추가됩니다.
    고친 곳
    PS2X_lib.cpp(161행)
     return ((PS2data[1] & 0xf0) == 0x70 || (PS2data[1] & 0xf0) == 0x40);
    

    PS2X_Lib 정보


    버튼 가져오기

    read_gamepad에서 현재 단추에 대한 정보를 얻습니다.
    ※ 위 수치가 지원되지 않으면 500ms 정도의 처리 시간이 필요합니다.
    PS2X_lib.h
    void read_gamepad();
    
    각 버튼의 상태를 얻는 방법은 네 가지가 있다.
    PS2X_lib.h
    // 現在ボタンの状況を取得することができます。
    boolean Button(uint16_t);
    
    // ボタンの状態が変化したかどうかを取得することができます。
    boolean NewButtonState(unsigned int);
    
    // ボタンが押されたかどうかを取得することができます。
    boolean ButtonPressed(unsigned int); 
    
    // ボタンが離されたかどうかを取得することができます。
    boolean ButtonReleased(unsigned int);
    
    매개 변수는 확인할 단추 형식입니다
    PS2X_lib.h
    #define PSAB_PAD_RIGHT    9
    #define PSAB_PAD_UP      11
    #define PSAB_PAD_DOWN    12
    #define PSAB_PAD_LEFT    10
    #define PSAB_L2          19
    #define PSAB_R2          20
    #define PSAB_L1          17
    #define PSAB_R1          18
    #define PSAB_GREEN       13
    #define PSAB_RED         14
    #define PSAB_BLUE        15
    #define PSAB_PINK        16
    #define PSAB_TRIANGLE    13
    #define PSAB_CIRCLE      14
    #define PSAB_CROSS       15
    #define PSAB_SQUARE      16
    

    샘플 이동


    PSX2Lib견본 수정, 동작 좀 봐.
    GPIO를 M5 Stack Core 2용으로 변경합니다.
    PS2X_Example.ino(9행)
    #define PS2_DAT        27    
    #define PS2_CMD        19
    #define PS2_SEL        32
    #define PS2_CLK        33
    
    이동하면 이런 느낌으로 로그를 출력합니다.
    BM 컨트롤러를 이동했기 때문에 출력Unknown Controller Type이지만 동작한다.

    활용해 보다


    BM 컨트롤러 구성


    BM 디렉터 구성은 이런 느낌입니다.
    룰렛 부분은 오른쪽 주위에서 위로 단추를 누르고 왼쪽으로 회전하여 아래 단추로 입력하면 식별된다.
  • L1 버튼
  • R1 버튼
  • □버튼
  • ×버튼
  • 0버튼
  • 오른쪽으로 회전하면 위 버튼, 왼쪽으로 회전하면 아래 버튼
  • SELECT 버튼
  • START 버튼
  • too와 합작


    간신히 소니의 투를 왔다.
    조작은 6번 룰렛이 오른쪽으로 돌면 전진하고 왼쪽으로 돌면 전진한다.
    1번을 누르고 왼쪽으로, 2번을 누르고 오른쪽으로 돌아라.
    3~5번 버튼을 돌릴 때 각도가 바뀌어 모두 누르고 회전한다.
    조작하면 이런 느낌.
    ※ [주의] 트위터에 기고하는 사용 프로그램 라이브러리는 다르다.

    총결산


    PS3용 플러그를 구할 수 있다면 그 다음엔 간단하게 완성할 수 있을 것 같아요.
    이번에 BM 컨트롤러를 사용했지만 또 다른 기회가 있어서 활용하려고 합니다.

    좋은 웹페이지 즐겨찾기