Search Code

Arduino 代碼同影片:雙軸搖桿

Arduino 代碼同影片:雙軸搖桿

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

XY-Dual access joystick

成個教學入面,我哋會寫一個簡單嘅程式,讀取搖桿嘅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 wiring for XY-Dual access joystick
Arduino wiring for XY-Dual access joystick
Arduino X-Y-Joystick wiring
Arduino X-Y-Joystick wiring

要將雙軸搖桿接去Arduino,首先將搖桿嘅接地腳位連去麵包板嘅接地軌。跟住將搖桿嘅5V腳位連去麵包板嘅正電軌。搖桿上面標示為X同Y嘅兩個可變腳位,應該分別連去Arduino嘅模擬腳位A0A1

至於搖桿上面嘅按鈕開關,就將佢連去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 - 預期輸出同測試

圖片

Arduino wiring for XY-Dual access joystick
Arduino wiring for XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
Arduino X-Y-Joystick wiring
Arduino X-Y-Joystick wiring
58-This is the Arduino code for a dual-axis joystick.
語言: C++
/*
 * 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);
}

你可能需要嘅嘢

資源與參考資料

暫時冇資源。

文件📁

冇文件可用。