ArduinoJoystickLibraryを使う

はじめに

簡単な工作したいなと思ったのでアケコンを作ってみた時に使ったArduinoJoystickLibraryの使い方のメモ
作ったの自体は機会があればまた別に記事書きます

必要なもの

  • ATmega32U4を搭載したArduino
    今回はPro Microの互換品を使います

環境構築

からcloneしてJoystickディレクトリをArduino IDEのインストールディレクトリにあるlibrariesに配置します

スケッチ

あとはコード書くだけです
サンプルは公式にあるので実際に使ったスケッチを載せておきます

デフォルトだといろいろ有効になっているので不要なものは適宜コンストラクタでfalseにして無効にしておきます
これだけのコードでゲームパッドとして認識されるので便利な世の中ですね

 1#include <Joystick.h>
 2
 3Joystick_ Joystick = Joystick_(
 4  0x03,                    // reportid
 5  JOYSTICK_TYPE_GAMEPAD,   // type
 6  3,                       // button count
 7  0,                       // hat switch count
 8  true,                    // x axis enable
 9  true,                    // y axis enable
10  false,                   // z axis enable
11  false,                   // right x axis enable
12  false,                   // right y axis enable
13  false,                   // right z axis enable
14  false,                   // rudder enable
15  false,                   // throttle enable
16  false,                   // accelerator enable
17  false,                   // brake enable
18  false                    // steering enable
19  );
20
21void setup(){
22  // Joystick
23  pinMode(2, INPUT_PULLUP);
24  pinMode(3, INPUT_PULLUP);
25  pinMode(4, INPUT_PULLUP);
26  pinMode(5, INPUT_PULLUP);
27  
28  // Switch
29  pinMode(6, INPUT_PULLUP);
30  pinMode(7, INPUT_PULLUP);
31  pinMode(8, INPUT_PULLUP);
32
33  // Joystick lib init
34  Joystick.begin();
35  Joystick.setXAxisRange(0, 2);
36  Joystick.setYAxisRange(0, 2);
37  Joystick.setXAxis(1);
38  Joystick.setYAxis(1);
39}
40
41void loop(){
42  int up = !digitalRead(2); // up
43  int down = !digitalRead(3); // down
44  int right = !digitalRead(4); // right
45  int left = !digitalRead(5); // left
46
47  if (up){
48    Joystick.setYAxis(0);
49  }else if(down){
50    Joystick.setYAxis(2);
51  }else{
52    Joystick.setYAxis(1);
53  }
54
55  if (left){
56    Joystick.setXAxis(0);
57  }else if(right){
58    Joystick.setXAxis(2);
59  }else{
60    Joystick.setXAxis(1);
61  }
62
63  Joystick.setButton(0, !digitalRead(6));
64  Joystick.setButton(1, !digitalRead(7));
65  Joystick.setButton(2, !digitalRead(8));
66}

こんな感じになる