使用したモノ
- Arduino Uno R3 (互換機) 1個
- ジョイスティックモジュール1個
- ジャンパー線 5本
環境
Arduino IDE 2.3.4
配線
XYとスイッチをそれぞれアナログピンとデジタルピンに繋ぎます。
コード
今回はライブラリを使用しないので、Arduinoに最初からあるアナログ入力を読み取るサンプルスケッチを参考にして書いてみると良いかもしれません。
const int VRX = A0;
const int VRY = A1;
const int SW = 7;
const int threshold = 1;
bool is_first = true;
int xpos;
int ypos;
bool sw;
float previous_x;
float previous_y;
float cumulative_x = 0;
float cumulative_y = 0;
void setup() {
Serial.begin(9600);
pinMode(SW, INPUT_PULLUP);
}
void loop() {
xpos = analogRead(VRX);
ypos = analogRead(VRY);
sw = digitalRead(SW);
int xpos_change = xpos - previous_x;
int ypos_change = ypos - previous_y;
if (is_first) {
is_first = false;
} else {
// 累積変化量を更新
cumulative_x += abs(xpos_change);
cumulative_y += abs(ypos_change);
if (cumulative_x > threshold || cumulative_y > threshold) {
Serial.print("X=");
Serial.print(xpos);
Serial.print(" Y=");
Serial.println(ypos);
cumulative_x = 0;
cumulative_y = 0;
} else if(!sw) {
;//スイッチを押している時の処理です、パスしてます。
}
}
previous_x = xpos;
previous_y = ypos;
delay(100);
}
setup()内のpinMode(SW, INPUT_PULLUP);とありますが、ここで内部プルアップ抵抗を有効にしていないとスイッチを押した際の動作が不安定になります。
プルアップ抵抗ってイマイチ何をやっているのか分からないですが、動作を安定させる為になんとなく必要って認識で使っています。
コメント