• Showing Page History #110053
  • Showing Page History #110280
  • Showing Page History #110282

ギタコンの自作 試作3

試作3の内容

  • ボタンをタクトスイッチから、それっぽいボタンに変えます。
  • ボタンの数を増やします。
  • Pickをボタンではなく、アナログスティックにしてみます。

試作3で使うもの一覧

試作1で使ったものに加えて、以下を使います。

追加費用は、合計で 2000円+発送費用くらい?? (交換/追加するボタンの数による)

名称値段(参考)通販コード
それっぽいタクトスイッチを、必要な個数分だけ。

私にはボタン候補としてこれくらいしか見つけることができませんでした。ブレッドボードに載せられるもっといいボタンがあれば、ぜひ教えてください。

なおこの写真には、タクトスイッチだけでなく、次の項目のジョイスティックも含まれています。IMG_3632_.jpg
1個160円程度マルツオンラインにて
KC901TCアカ
KC901TCミドリ
KC901TCアオ
KC901TCキ
KC901TCシロ
2軸ジョイスティックモジュール x1 1個780円程度秋月電子にて
M-06807

ボタンの追加

試作1と2で、4つのボタンを使うために、Arduino Microの、12,11,10, 9番ピンを既に使用しています。ボタンの数を増やす場合は、8,7,6,5..というように、使うピンを増やしてださい。

その上で、スケッチを変更してください。 例えば、ボタンを2個増やす場合(8,7ピンを追加で使用する場合)は、以下のようにスケッチを修正します(赤字部)。

Joystick_ Joystick(
  JOYSTICK_DEFAULT_REPORT_ID, JOYSTICK_TYPE_GAMEPAD,
  46, 0,                 // Buttons, Hat Switch Count ボタンの数を4から6に増やす
  false, false, false,  // X,Y,Z Axis
  false, false, false,  // Rx, Ry, Rz Axis
  false, false,         // rudder, throttle
  false, false, false   // accelerator, break, steering
);

void setup() {
  // Initialize Button Pins
  pinMode(7, INPUT_PULLUP);    // 追加
  pinMode(8, INPUT_PULLUP);    // 追加
  pinMode(9, INPUT_PULLUP);    
  pinMode(10, INPUT_PULLUP);
  pinMode(11, INPUT_PULLUP);
  pinMode(12, INPUT_PULLUP);

  // Initialize Joystick Library
  Joystick.begin();
}

// Constant that maps the phyical pin to the joystick button.
const int pinToButtonMap = 97; // 9を7に変更

// Last state of the button
int lastButtonState[46] = {0,0,0,0,0,0};    // 4を6に変更し、0を2つ追加
unsigned long lastButtonChangedTime[46] = {0,0,0,0,0,0};    // 4を6に変更し、0を2つ追加

void loop() {

  // Read pin values
  for (int index = 0; index < 46; index++)    // 4を6に変更
  {
    int currentButtonState = !digitalRead(index + pinToButtonMap);
    if (currentButtonState != lastButtonState[index])
    {
      unsigned long t;
      t = millis();

      if (t > lastButtonChangedTime[index] + 10)
      {
        Joystick.setButton(index, currentButtonState);
        lastButtonState[index] = currentButtonState;
        lastButtonChangedTime[index] = t;
      }
    }
  }

  delay(1);
}

配線の説明は不要かなと思いますが・・・念のために。ボタンを2個増やす場合は、Arduino Leonardoの7,6番ピンを、それぞれ追加するボタンにつなぎます。ボタンのもう片方の端子は、どちらもGNDにつなぎます。(試作1の配線と全く同じ。)

アナログスティックの追加

ここを参考にして、アナログジョイスティックをピック用に追加します。(アナログスティックをピックに使うため、これまでボタンで実現していたピックは削除します。つまり、ボタンは1個減らします)

ここで使っているアナログスティックは2軸(X,Y)をサポートしていますが、ここではX軸だけを使います。

まず、配線図は以下のようになります。Arduino Microのアナログ入力ピン(A0)に、ジョイスティックのX軸の出力ピン(L/R)をつなぎます。 また、スティックの「L/R+」ピンにはArduino Microから5Vを入力します。