arduino讀取ps2搖桿值

arduino讀取ps2搖桿值

ps2搖桿可以任意方向操作,原理是2個可變電位器組成,任意方向分別用X和Y軸表示。

使用arduino的讀取搖桿模塊的2個模擬輸出值,需要注意的是,從模擬口uno的A0-A5讀取的模擬值爲0-1023,但是由於模塊的電位器質量或者電器干擾問題,搖桿不動的情況下,讀取的數值也是不斷在一個區間跳動的,所以需要做個優化。
通過對數值跳動的觀察,發現她在498-497,493-494之間跳動,把搖桿按到盡頭,也常在1023-1022之間跳動。因此只需要一個簡單的map函數可以把讀數穩定到一個穩定的區間上,這裏的關鍵語句是:

int tmp_x_value =map(analogRead(XPIN),0,1023,0,255);
具體代碼如下:

arduino

/*
   搖桿讀取
   搖桿爲兩個可變電位器組成
   arduino 模擬端口讀取的值爲0-1023
   pwm的值爲0-255
   用map映射值後搖桿不動值爲124,122
*/
#include <stdio.h>
#define XPIN A0
#define YPIN A1
#define XSTOPNUM 124
#define YSTOPNUM 122
void setup() {
  // put your setup code here, to run once:
  pinMode(XPIN, INPUT);
  pinMode(YPIN, INPUT);
  Serial.begin(9600);
  Serial.println("setup success");
}
int x_value;
int y_value;
void loop() {
  // put your main code here, to run repeatedly:
  int tmp_x_value =map(analogRead(XPIN),0,1023,0,255); 
  int tmp_y_value=map(analogRead(YPIN),0,1023,0,255);
  if (tmp_x_value != x_value || tmp_y_value!=y_value) {
    x_value=tmp_x_value;
    y_value=tmp_y_value;
    char msg[6];
    sprintf(msg,"x:%3d",x_value);
    Serial.print(msg);
    sprintf(msg,",y:%3d",y_value);
    Serial.println(msg);
  }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章