一個簡單的Arduino操縱桿使用電位器(如表盤或滑塊中的那種)沿兩個垂直軸讀取值。通過組合這兩個值,您可以獲得與操縱桿位置相對應的x,y坐標。有了這些數據,您就可以根據操縱桿指向的位置采取行動。
與大多數電位器一樣,兩個軸的測量范圍為0到1023。由于操縱桿從中心開始并左/右和上/下移動,因此兩個軸的默認起始位置都在511左右。有幾種類型的Arduino操縱桿控制器,甚至還有一兩個操縱桿護罩。出于我們的目的,我們將研究一個基本的模擬Arduino操縱桿模塊。
這個Arduino操縱桿帶有五個引腳:一個用于電源,一個用于接地,兩個用于X和Y軸的引腳,以及一個用于按鈕按下的引腳。我們今天只使用前四個,但您可以在將來嘗試通過按鈕擴展您的項目。您還可以找到帶有按鈕的操縱桿護罩,因此您擁有控制整個游戲所需的所有輸入。
不過,現在,我們將通過使用它來控制四個LED來演示操縱桿的工作原理。我們的目標是,當操縱桿指向上、下、左和右時,每個方向都會亮起不同的LED。這將很容易檢測到,因為四個方向中的每一個都位于兩個電位計軸之一的遠端。
你需要什么
對于這個項目,我們將在Arduino操縱桿模塊之上使用四個不同顏色的LED作為指示燈來顯示我們的項目正在運行。物品清單:操縱桿;四個LED(如果有的話,最好是不同顏色的);四個220歐姆電阻;電線;面包板;USB電纜;ArduinoIDE等。
將所有材料放在一起后,將下一部分的代碼上傳到您的 Uno,然后轉到接線部分。
代碼
首先,將以下草圖上傳到您的 Arduino Uno。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#define joyX A0 #define joyY A1 int blueLED = 7; int redLED = 6; int yellowLED = 5; int whiteLED = 4; void setup() { Serial.begin(9600); pinMode(blueLED,OUTPUT); pinMode(redLED,OUTPUT); pinMode(yellowLED,OUTPUT); pinMode(whiteLED,OUTPUT); } void loop() { int xValue; int yValue; xValue = analogRead(joyX); yValue = analogRead(joyY); Serial.print("X: "); Serial.print(xValue); Serial.print("\t Y: "); Serial.println(yValue); if (yValue > 1020){ digitalWrite(blueLED, HIGH); } else { digitalWrite(blueLED, LOW); } if (yValue < 2){ digitalWrite(redLED, HIGH); } else { digitalWrite(redLED, LOW); } if (xValue > 1020){ digitalWrite(yellowLED, HIGH); } else { digitalWrite(yellowLED, LOW); } if (xValue < 2){ digitalWrite(whiteLED, HIGH); } else { digitalWrite(whiteLED, LOW); } } |
接下來,讓我們通過草圖突出顯示您需要了解的重要部分。
1 2 3 4 5 6 7 |
#define joyX A0 #define joyY A1 int blueLED = 7; int redLED = 6; int yellowLED = 5; int whiteLED = 4; |
在本節中,我們將定義六個引腳變量。前兩個引腳 A0 和 A1 將存儲來自操縱桿模塊的 X 和 Y 變量。接下來的四行定義了四個 LED 引腳,對于這個草圖,每個引腳都是不同的顏色。
1 2 3 4 5 6 7 |
void setup() { Serial.begin(9600); pinMode(blueLED,OUTPUT); pinMode(redLED,OUTPUT); pinMode(yellowLED,OUTPUT); pinMode(whiteLED,OUTPUT); } |
在本節中,我們將啟動串行監視器,它可以讓我們看到當您移動操縱桿模塊時操縱桿輸出的值。四個pinMode()函數還將 LED 引腳分配為輸出。
1 2 3 4 5 6 7 8 9 |
int xValue; int yValue; xValue = analogRead(joyX); yValue = analogRead(joyY); Serial.print("X: "); Serial.print(xValue); Serial.print("\t Y: "); Serial.println(yValue); |
在loop()部分中,我們將首先創建變量 xValue 和 yValue 來存儲來自游戲桿模塊的值。當您四處移動操縱桿時,這些值應該實時變化。
我們還將把 X 和 Y 值打印到串行監視器上。如果您想查看哪些值對應于不同的位置,請在通過 USB 插入 Arduino 時打開串行監視器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
if (yValue > 1020){ digitalWrite(blueLED, HIGH); } else { digitalWrite(blueLED, LOW); } if (yValue < 2){ digitalWrite(redLED, HIGH); } else { digitalWrite(redLED, LOW); } if (xValue > 1020){ digitalWrite(yellowLED, HIGH); } else { digitalWrite(yellowLED, LOW); } if (xValue < 2){ digitalWrite(whiteLED, HIGH); } else { digitalWrite(whiteLED, LOW); } |
最后,我們將使用四個if()語句來控制彩色 LED。每個都分配一個值“> 1020”或“< 2”(我們使用這些值來減少閃爍)。例如,y 軸上的“> 1020”對應于搖桿指向上方,因此它會打開藍色 LED。同樣,y 軸上的“< 2”對應于操縱桿指向下方,因此紅色 LED 將亮起,依此類推。
接線
該項目的布線相對簡單。每個LED都需要自己的220歐姆電阻,因此請確保您有一些方便的。要連接項目,請按照以下步驟操作。首先,在搖桿模塊上:
將G引腳連接到Arduino上的GND。
將P引腳連接到Arduino上的5V。
將操縱桿上的X引腳連接到Arduino上的A0引腳。
將操縱桿上的Y引腳連接到Arduino上的A1引腳。
接下來,對于LED,我們將從4到7將一種顏色連接到Arduino上的數字引腳。對于每個引腳,執行以下步驟:
將LED的長端連接到Arduino上的正確引腳(請參閱草圖變量以獲取正確的引腳映射或更改代碼以適合您擁有的LED)。
將LED的短腳連接到220歐姆電阻。
將220歐姆電阻連接到面包板上的接地軌。
將面包板上的接地軌連接到Arduino上的GND。
一切就緒并上傳軟件后,您可以打開Arduino并開始移動操縱桿。如果您打開串行監視器,您應該會看到X和Y值隨著您移動操縱桿而發生變化。嘗試向上、向下、向左和向右指向操縱桿以查看哪個LED亮起。您可以通過根據操縱桿指向的位置觸發不同的操作來擴展此項目。
-
led
+關注
關注
242文章
23307瀏覽量
661542 -
Arduino
+關注
關注
188文章
6472瀏覽量
187322 -
操縱桿
+關注
關注
0文章
69瀏覽量
8564
發布評論請先 登錄
相關推薦
評論