Arduino在進行控制的時候,有時候需要透過按鈕,有時候則是需要數字鍵盤,若是同時需要控制二個軸以上的輸出時,使用搖桿會是非常方便的選擇。這個實習中,我們要練習的是下面這個搖桿模組:

這個模組是專門設計給Arduino使用的,所以在使用上非常地簡便。它有5支接腳,其中+5V和GND一如往例,直接接到 Arduino上的電源輸出就可以了,而其它的3支輸出,分別是VRx、VRy、以及SW,分別用來偵側左右、上下、以及是否按下去的開關。它們輸出的是類比訊號,最小值是0,㫤大值是1023。連接圖如下所示:

在這個例子中,我們分別把VRx、VRy、以及SW連接到A1, A2, 以及A3這3個類別輸入埠。連接完成之後,只要直接使用analogRead取得相對應的輸入數值就可以了。程式如下:

void setup() {
  Serial.begin(9600);
}

void loop() {
  int vrx, vry, sw;

  vrx = analogRead(A1);
  vry = analogRead(A2);
  sw = analogRead(A3);

  char buf[100];
  sprintf(buf, "VRx=%d, VRy=%d, SW=%d", vrx, vry, sw);
  Serial.println(buf);
  delay(100);
}

程式在順利完成燒錄之後,在操作搖桿的過程中,監控視窗中就可以得到如下所示的輸出:

還記得之前我們使用可變電阻控制伺服馬達的實習嗎?同學們是不是可以試試看利用這個搖桿模組來控制是否會更加地方便和直覺呢?先來看看以下這個影片:

假設我們分別把伺服馬達的兩條信號線連接到D10和D11,然後把VRx和VRy分別接到A1和A2,那麼使用以下的程式即可完成上述的效果:

#include <Servo.h>

Servo base, head;

void setup() {
  base.attach(10);
  head.attach(11);
}

int base_degree = 90;
int head_degree = 90;

void loop() {
  int vrx = analogRead(A1);
  int vry = analogRead(A2);
  base_degree = map(vrx, 0, 1023, 0, 180);
  head_degree = map(vry, 0, 1023, 0, 180);
  base.write(base_degree);
  head.write(head_degree);
}

很神奇吧!

(2509)