Arduino 代碼同影片:雙軸搖桿
喺呢個教學入面,我哋會探討點樣將雙軸XY搖桿同Arduino一齊用。呢個搖桿可以用嚟做遊戲控制器,或者用嚟控制機械臂等等嘅應用。主要嘅重點會係偵測搖桿嘅位置同埋佢個按鈕開關嘅狀態,呢啲都可以喺序列監視器上面顯示出嚟。

成個教學入面,我哋會寫一個簡單嘅程式,讀取搖桿嘅X同Y位置,然後喺Arduino序列監視器上面顯示出嚟。當搖桿俾人撳嘅時候,開關狀態都會偵測到。想睇程式碼嘅詳細解釋,記得喺指定嘅時間點睇條片(片入面00:00)。
硬件解釋
呢個項目嘅主要零件包括雙軸搖桿模組同Arduino板。搖桿模組由兩個可變電阻組成,一個負責X軸,一個負責Y軸,佢哋會根據搖桿嘅位置提供模擬值。搖桿上面嘅按鈕開關就用嚟偵測佢有冇俾人撳。
當你移動搖桿嘅時候,電位器會改變佢哋嘅電阻,呢個會轉換成0到1023之間嘅值。咁樣我哋就可以準確噉知道搖桿嘅位置。按鈕開關係連去Arduino嘅一個數碼輸入腳位,我哋可以用內部上拉電阻嘅功能,唔使外接電阻就可以讀到佢嘅狀態。
數據表細節
| 製造商 | 通用 |
|---|---|
| 零件編號 | 雙軸搖桿模組 |
| 邏輯/IO電壓 | 5 V |
| 供電電壓 | 5 V |
| 輸出電壓範圍 | 0 - 5 V |
| 解像度 | 10-bit(0-1023)模擬 |
| 開關類型 | 按鈕 |
| 封裝 | 標準模組 |
- 確保搖桿模組有正確嘅電源供應(5 V)。
- 將搖桿嘅X同Y輸出分別連去模擬腳位A0同A1。
- 用數碼腳位6嚟接搖桿開關。
- 為開關腳位採用上拉電阻配置。
- 監察輸出值,確保佢哋範圍係0到1023。
接線指示


要將雙軸搖桿接去Arduino,首先將搖桿嘅接地腳位連去麵包板嘅接地軌。跟住將搖桿嘅5V腳位連去麵包板嘅正電軌。搖桿上面標示為X同Y嘅兩個可變腳位,應該分別連去Arduino嘅模擬腳位A0同A1。
至於搖桿上面嘅按鈕開關,就將佢連去Arduino嘅數碼腳位6。呢個連接會用到內部上拉電阻功能,所以唔需要外接電阻。最後,如果你想用LED嚟監察開關狀態,就將LED嘅長腳連去數碼腳位13,短腳就經一個680歐姆電阻接地。
程式碼示例同講解
喺Arduino程式碼入面,我哋定義開關嘅腳位,同埋指定屏幕尺寸嚟對應搖桿值。setup函數初始化序列通訊,同埋設定開關腳位嘅模式。
void setup() {
Serial.begin(9600); // 初始化序列通訊
pinMode(sw, INPUT_PULLUP); // 設定sw腳位做輸入
pinMode(13, OUTPUT); // LED腳位
}
喺loop函數入面,我哋讀取X同Y位置嘅模擬值,然後將佢哋對應去定義好嘅屏幕尺寸。開關嘅狀態都會讀取,然後印出嚟去序列監視器。
void loop() {
int x = analogRead(A0); // 讀取X嘅模擬值
int y = analogRead(A1); // 讀取Y嘅模擬值
int sStat = digitalRead(sw); // 讀取開關狀態
// 將數值印去序列監視器
Serial.print("X: ");
Serial.print(xPos);
Serial.print(" Y: ");
Serial.println(yPos);
}
最後,程式碼會檢查開關有冇俾人撳,根據開關狀態將LED開或者關。咁樣當搖桿按鈕啟動嘅時候,就會有視覺上嘅反饋。
if(sStat == LOW) {
Serial.println("開關被撳");
digitalWrite(13, HIGH); // 將LED開
} else {
digitalWrite(13, LOW); // 將LED關
}
想睇搖桿值即時點樣變化,就將程式碼上載去你嘅Arduino,然後打開序列監視器。啲數值會每半秒更新一次,顯示而家嘅X同Y位置,連同開關狀態(片入面01:30)。
示範/預期效果
當你移動搖桿嘅時候,X同Y值應該會相應噉改變,範圍由0到1023。如果你撳搖桿按鈕,連去腳位13嘅LED會著起嚟,表示開關啟動咗。如果搖桿喺中間位置,你應該會見到兩個軸嘅數值大約係512,視乎搖桿嘅校準而定。
影片時間點
- 00:00 - 雙軸搖桿嘅介紹
- 01:30 - 程式碼解釋同功能
- 02:45 - 接線指示
- 03:15 - 預期輸出同測試
/*
* This is Arduino code to use a dual-axis XY joystick to read the value of the joystick position as X and Y, and
* also read the switch.
* Other Arduino library and videos: https://robojax.com
* Watch the video for this code to learn it fully.
* Watch the video here: https://youtu.be/6N8Iq353GM8
* This code is offered "as is" without any warranty.
* If you are sharing this code, you must keep this copyright note.
*/
/*
* Written for Robojax video on January 10, 2018
* by Ahmad Nejrabi, in Ajax, Ontario, Canada
* Copyright Robojax Inc.
*/
/*
* This is a dual-axis joystick sketch for Arduino.
* The position of the joystick is read and displayed on the serial monitor.
*/
#define sw 6
#define screenWidth 600
#define screenHeight 300
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
pinMode(sw,INPUT_PULLUP);// setting pin sw as input
pinMode(13,OUTPUT);
}
void loop() {
// Robojax Dual Axis joystick project
int x = analogRead(A0);// read analog value
int y = analogRead(A1);
int xPos = map(x, 0, 1023,0,screenWidth);
int yPos = map(y, 0, 1023,0,screenHeight);
int sStat = digitalRead(sw);//
// Robojax project
Serial.print("X: ");
Serial.print(xPos);
Serial.print(" Y: ");
Serial.println(yPos);// Robojax prints y value
if(sStat ==LOW){
Serial.println("Switch pressed");
digitalWrite(13,HIGH);// Turn LED ON
}else{
digitalWrite(13,LOW);// Turn LED OFF
}
delay(500);
}
你可能需要嘅嘢
-
亞馬遜Purchase XY Joystick from Amazonamzn.to
資源與參考資料
暫時冇資源。
文件📁
冇文件可用。