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);
}
}