一個(gè)簡單的Arduino操縱桿使用電位器(如表盤或滑塊中的那種)沿兩個(gè)垂直軸讀取值。通過組合這兩個(gè)值,您可以獲得與操縱桿位置相對應(yīng)的x,y坐標(biāo)。有了這些數(shù)據(jù),您就可以根據(jù)操縱桿指向的位置采取行動(dòng)。
與大多數(shù)電位器一樣,兩個(gè)軸的測量范圍為0到1023。由于操縱桿從中心開始并左/右和上/下移動(dòng),因此兩個(gè)軸的默認(rèn)起始位置都在511左右。有幾種類型的Arduino操縱桿控制器,甚至還有一兩個(gè)操縱桿護(hù)罩。出于我們的目的,我們將研究一個(gè)基本的模擬Arduino操縱桿模塊。
這個(gè)Arduino操縱桿帶有五個(gè)引腳:一個(gè)用于電源,一個(gè)用于接地,兩個(gè)用于X和Y軸的引腳,以及一個(gè)用于按鈕按下的引腳。我們今天只使用前四個(gè),但您可以在將來嘗試通過按鈕擴(kuò)展您的項(xiàng)目。您還可以找到帶有按鈕的操縱桿護(hù)罩,因此您擁有控制整個(gè)游戲所需的所有輸入。
不過,現(xiàn)在,我們將通過使用它來控制四個(gè)LED來演示操縱桿的工作原理。我們的目標(biāo)是,當(dāng)操縱桿指向上、下、左和右時(shí),每個(gè)方向都會(huì)亮起不同的LED。這將很容易檢測到,因?yàn)樗膫€(gè)方向中的每一個(gè)都位于兩個(gè)電位計(jì)軸之一的遠(yuǎn)端。
你需要什么
對于這個(gè)項(xiàng)目,我們將在Arduino操縱桿模塊之上使用四個(gè)不同顏色的LED作為指示燈來顯示我們的項(xiàng)目正在運(yùn)行。物品清單:操縱桿;四個(gè)LED(如果有的話,最好是不同顏色的);四個(gè)220歐姆電阻;電線;面包板;USB電纜;ArduinoIDE等。
將所有材料放在一起后,將下一部分的代碼上傳到您的 Uno,然后轉(zhuǎn)到接線部分。
代碼
首先,將以下草圖上傳到您的 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; |
在本節(jié)中,我們將定義六個(gè)引腳變量。前兩個(gè)引腳 A0 和 A1 將存儲(chǔ)來自操縱桿模塊的 X 和 Y 變量。接下來的四行定義了四個(gè) LED 引腳,對于這個(gè)草圖,每個(gè)引腳都是不同的顏色。
1 2 3 4 5 6 7 |
void setup() { Serial.begin(9600); pinMode(blueLED,OUTPUT); pinMode(redLED,OUTPUT); pinMode(yellowLED,OUTPUT); pinMode(whiteLED,OUTPUT); } |
在本節(jié)中,我們將啟動(dòng)串行監(jiān)視器,它可以讓我們看到當(dāng)您移動(dòng)操縱桿模塊時(shí)操縱桿輸出的值。四個(gè)pinMode()函數(shù)還將 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()部分中,我們將首先創(chuàng)建變量 xValue 和 yValue 來存儲(chǔ)來自游戲桿模塊的值。當(dāng)您四處移動(dòng)操縱桿時(shí),這些值應(yīng)該實(shí)時(shí)變化。
我們還將把 X 和 Y 值打印到串行監(jiān)視器上。如果您想查看哪些值對應(yīng)于不同的位置,請?jiān)谕ㄟ^ USB 插入 Arduino 時(shí)打開串行監(jiān)視器。
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); } |
最后,我們將使用四個(gè)if()語句來控制彩色 LED。每個(gè)都分配一個(gè)值“> 1020”或“< 2”(我們使用這些值來減少閃爍)。例如,y 軸上的“> 1020”對應(yīng)于搖桿指向上方,因此它會(huì)打開藍(lán)色 LED。同樣,y 軸上的“< 2”對應(yīng)于操縱桿指向下方,因此紅色 LED 將亮起,依此類推。
接線
該項(xiàng)目的布線相對簡單。每個(gè)LED都需要自己的220歐姆電阻,因此請確保您有一些方便的。要連接項(xiàng)目,請按照以下步驟操作。首先,在搖桿模塊上:
將G引腳連接到Arduino上的GND。
將P引腳連接到Arduino上的5V。
將操縱桿上的X引腳連接到Arduino上的A0引腳。
將操縱桿上的Y引腳連接到Arduino上的A1引腳。
接下來,對于LED,我們將從4到7將一種顏色連接到Arduino上的數(shù)字引腳。對于每個(gè)引腳,執(zhí)行以下步驟:
將LED的長端連接到Arduino上的正確引腳(請參閱草圖變量以獲取正確的引腳映射或更改代碼以適合您擁有的LED)。
將LED的短腳連接到220歐姆電阻。
將220歐姆電阻連接到面包板上的接地軌。
將面包板上的接地軌連接到Arduino上的GND。
一切就緒并上傳軟件后,您可以打開Arduino并開始移動(dòng)操縱桿。如果您打開串行監(jiān)視器,您應(yīng)該會(huì)看到X和Y值隨著您移動(dòng)操縱桿而發(fā)生變化。嘗試向上、向下、向左和向右指向操縱桿以查看哪個(gè)LED亮起。您可以通過根據(jù)操縱桿指向的位置觸發(fā)不同的操作來擴(kuò)展此項(xiàng)目。
-
led
+關(guān)注
關(guān)注
242文章
23356瀏覽量
663206 -
Arduino
+關(guān)注
關(guān)注
188文章
6477瀏覽量
187821 -
操縱桿
+關(guān)注
關(guān)注
0文章
69瀏覽量
8581
發(fā)布評論請先 登錄
相關(guān)推薦
評論