以 Arduino Leonardo 或 Arduino Micro 來製作簡單的牙籤直升機總距杆,讓大家即使用 Xbox 控制器來《 Microsoft Flight Simulator (MSFS2020) 》駕駛直升機仍能有較好的操控。
(本說明文件內容版權屬 Plug Media Series Limited 所有,不得轉載)
- Arduino Leonardo 或 Arduino Micro 1 塊
- 50k 或 100k Ohm 電位器(可變電阻) 1 個
- 杜邦線(公-公) 3 條
- 迷你麵包板 1 塊
- Arduino IDE 。撰文時的版本為 1.8.15 。
- 由 MHeironimus 開發的 Arduino Joystick Library (詳情參閱下文)
要令 Arduino Leonardo / Micro 變成 USB 遊戲控制器,需要由 MHeironimus 開發的 Arduino Joystick Library ,但這個函式庫沒有登錄到 Arduino 的官方 Library Manager ,所以大家要下載「 Source Code (zip) 」檔案,並將它匯入 Arduino IDE ,就能順利將程式編譯上載到 Arduino 開發板。撰文時 Arduino Joystick Library 的版本為 2.0.7 。
- 將 Arduino Leonardo / Micro 以 micro USB 線連接到電腦,開啟 Arduino IDE ,確認「 Tools > Board 」選擇了你所選用的開發板,並選擇正確連接埠;
- 以 Arduino IDE 開啟 Collective/Collective.ino 檔案
- 在 Arduino IDE 的主選單中選「 Sketch > Include Library > Add .ZIP Library 」,然後選擇下載回來的「 ArduinoJoystickLibrary-2.0.7.zip 」檔案將它匯入。
- 按工具列左上角的「 Verify 」鍵來檢查程式有沒有問題,或者直接按旁邊的「 Upload 」鍵將它上載到 Arduino Leonardo / Micro 。
完成編譯和上載後,基本上已可以在 MSFS2020 裡使用這支牙籤總距杆,不過由於電位器的旋轉角度約有 280º ,用起來會較不就手,縮減一下電位器的可用旋轉範圍會較好用(當然這會減低總距杆的精度,但旋轉 60º 基本上仍是夠用的)。
-
修改程式第 10 行,設定為
ture
以輸出電位器讀數,然後將程式編譯上載到開發板。bool printVals = true; // 輸出電位器讀數
-
在連接著 Arduino Leonardo / Micro 時,開啟 Arduino IDE 的「 Tools > Serial Monitor 」,將電位器扭到你覺得適合的起始角度(總距杆最低的位置),抄下 Serial Monitor 左邊欄位的讀數(本例中是 336 )。
-
接著扭到結束角度(總距杆最高的位置),抄下 Serial Monitor 左邊欄位的讀數(本例中是 500 )。如果你發覺起始角度和結束角度讀數大小倒轉了的話,只要將電位器的 5V 和 GND 線對調再測量便可以解決。
-
修改程式第 7 行,以抄下的讀數取代 0 和 1023 兩個數值。
int axisLimits0[] = {336, 500}; // 數值僅供參考,請自行測試讀取。
-
將程式編譯上載到開發板,測試一下效果。
-
滿意操縱角度的話就可以將第 10 行設回
false
再編譯上傳到開發板就完成。
大家只要登入 MSFS2020 ,按「 Options > Controls 」就可以發現多了「 Arduino Leonardo / Micro 」這個控制器,接著就要將完成的牙籤總距杆綁定到「 Throttle Axis (油閥軸)」即可使用。