LPST-14900をArduinoに接続する

追記

上手く行ったので新しく記事を書き直しました

はじめに

試行の記事なのでうまくいったら別記事でまとめます
先に結論だけ書いとくとNと1~6速まで問題なく取れます
Rだけ試行錯誤中
いけました

経緯

だいぶ前にDriving Force GTを購入してETSとかして遊んでるんですがシーケンシャルじゃなくてシフターが欲しくなった
かといってG25等々を新規に買うのは高いのでシフター単独でUSB接続出来るものを探した

追記 2017年9月17日
fanatec系列ならUSB アダプター買えば使えるっぽいのでそっちの方が良いかもしれない
シフター結構するけど…

シフター探し
TH8Aとかが単独で接続可能っぽかったけどいかんせん高い

価格: ¥ 19,380

のでもう少し安いシフターを探した
すると尼でLPST-14900がオススメに出てきてこちらは価格が5000円ちょっとで安い
ただG29にしか対応してない様子
どうにかこうにか単独で接続できないか調べると
G25やG27・G29のシフターをUSBに変換するアダプタを見つけた

1-9 $25.72

でありかなと思える価格 G29も対応してるっぽいのでこれでいけそうではある
けど送料込み込みだともう少し高そうなので自作できないか調べた

追記
このアダプタ購入して試しましたが無事使えました

コネクタ形状はD-subっぽいのでこれを良い感じにArduinoで読み出してLeonardoかMicroでUSBキーボードとして認識させれば実質単独でシフターとして運用出来るかもしれないと思って調べるとG25で既に動作するものを作ってる人がいる

動画の説明文に詳細な解説付きのフォーラムのページがある

似たような感じでいけるんじゃないかと思って早速LPST-14900を購入してみた
とりあえず手持ちのArduino UNO R2でテストしてみる

試行錯誤の記録

使ったもの

  • UNO R2
  • D-sub 9ピン オス
  • ジャンパワイヤ オス-オス 5本(中央でカットして10本にした)
  • Micro 互換機(海外の安いのを買ったので発送待ち 2017年1月17日購入)
    2017年1月29日現在まだ来てないです 1ヶ月くらい掛かるらしいので作業中断

接続

あとで図書く
カットしたジャンパワイヤの被覆を一部剥いてD-subにはんだ付けする
ジャンパワイヤのオス側は上記のフォーラムの解説の通りに配置した
ただUNOなのでその辺だけ変えた
VCCとGNDはそのまま繋ぐ
あとは適当にA0~A5に繋いでおく

読み込み

テスト

PULL_UPしてanalogReadで値の変化を見て察する
正直グラフでも描画させれば良かったなって後悔した
温かみのある手作業で適当な値で切った
以下スケッチ

 1void setup() {
 2
 3  Serial.begin(9600);
 4  pinMode(A0, INPUT_PULLUP);
 5  pinMode(A1, INPUT_PULLUP);
 6  pinMode(A3, INPUT_PULLUP);
 7  pinMode(A2, INPUT_PULLUP);
 8  pinMode(A4, INPUT_PULLUP);
 9}
10
11void loop() {
12  Serial.print("A0:");
13  Serial.println(analogRead(A0));
14  Serial.print("A1:");
15  Serial.println(analogRead(A1));
16  Serial.print("A2:");
17  Serial.println(analogRead(A2));
18  Serial.print("A3:");
19  Serial.println(analogRead(A3));
20  Serial.print("A4:");
21  Serial.println(analogRead(A4));
22  Serial.println("-------");
23
24  delay(1000);
25}

シフト分け

察した結果を元に適当にif文で切る
あんま効率良くないコードなのでMicro互換機に載せる時に直す

 1int X, Y;
 2
 3void setup() {
 4  Serial.begin(9600);
 5  pinMode(A2, INPUT_PULLUP);
 6  pinMode(A4, INPUT_PULLUP);
 7}
 8
 9void loop() {
10  X = analogRead(A4);
11  Y = analogRead(A2);
12  if (143 < X){
13    // 1 or 2
14    if (Y < 100){
15      Serial.println("1");
16    }else if (Y < 138){
17      Serial.println("change");
18    }else{
19      Serial.println("2");
20    }
21  }else if(123 < X){
22    // 3 or 4 or N
23    if (Y < 100){
24      Serial.println("3");
25    }else if (Y < 138){
26      Serial.println("N");
27    }else{
28      Serial.println("4");
29    }
30  }else{
31    // 5 or 6 or R
32    if (Y < 100){
33      Serial.println("5");
34    }else if (Y < 138){
35      Serial.println("change");
36    }else{
37      Serial.println("6");
38    }
39  }
40}

Rの取り方が分からず 押し込みしても特に値に変化が見られない
もしかしたら使ってないピンで何か送ってる?
使わないと思ってはんだ付けしなかったので今度テストする

あと境界値が個体差ある気がするので適宜調整した方が良い
自分のシフターは4速時に2速側に押し込むと2速判定になる
場合分けで弾けば良いけど強く押し込まないと起きないので全体ができたら調整することにする

あとは互換機が届いたら実際にゲームで動作させてみる