Arduino Mega 2560 LESSON:13 ジョイスティック
概要
ジョイスティックを接続するレッスンです。温度湿度計(DHT11)の値を読み取るより楽な構造ですね。
アナログ読み込みの良さを知れる項目になっていますが、ジョイスディック内部ではアナログの傾きを可変抵抗器
//www.elegoo.com
//2016.12.09
// Arduino pin numbers
const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = 0; // analog pin connected to X output
const int Y_pin = 1; // analog pin connected to Y output
void setup() {
pinMode(SW_pin, INPUT);
digitalWrite(SW_pin, HIGH);
Serial.begin(9600);
}
void loop() {
Serial.print("Switch: ");
Serial.print(digitalRead(SW_pin));
//Serial.print("\n");
Serial.print(", X-axis: ");
Serial.print(analogRead(X_pin));
//Serial.print("\n");
Serial.print(", Y-axis: ");
Serial.println(analogRead(Y_pin));
//Serial.print("\n\n");
delay(500);
}
出力
Switch: 1, X-axis: 496, Y-axis: 509 Switch: 1, X-axis: 496, Y-axis: 509 Switch: 1, X-axis: 496, Y-axis: 509 Switch: 1, X-axis: 496, Y-axis: 509 Switch: 1, X-axis: 496, Y-axis: 509 Switch: 1, X-axis: 496, Y-axis: 509
ジョイスティックとサーボが連動して動く接続をしてみましょう。この方が面白いよね。
完成図は以下のようになります。
PCB図は以下のようになります。
3Dプレビュー図は以下のようになります。
コードは以下のようになります。
#include <Servo.h>
const int X_pin = A0;
const int SERVO_PIN = 9;
// ジョイスティックの補正値
const int MIN_X = 0;
const int CENTER_X = 496;
const int MAX_X = 1023;
// サーボの取り付け角度補正
const int SERVO_OFFSET = 20; // 補正角度 R
Servo myServo;
void setup() {
Serial.begin(9600);
myServo.attach(SERVO_PIN);
}
void loop() {
int x = analogRead(X_pin);
int angle;
// ジョイスティックの中央補正
if (x < CENTER_X) {
angle = map(x, MIN_X, CENTER_X, 0, 90);
}
else {
angle = map(x, CENTER_X, MAX_X, 90, 180);
}
// サーボの取り付け位置を補正
// 例:R=10なら使用範囲は10~180度
int servoAngle = map(
angle,
0, 180,
SERVO_OFFSET, 180
);
servoAngle = constrain(servoAngle, 0, 180);
myServo.write(servoAngle);
Serial.print("X = ");
Serial.print(x);
Serial.print(" Logical Angle = ");
Serial.print(angle);
Serial.print(" Servo Angle = ");
Serial.println(servoAngle);
delay(20);
}
constrain() の書き方
constrain(x, a, b);
3つの引数には、次の意味があります。
引数 意味 x 範囲を制限したい数値 a 最小値 b 最大値
map() の書き方
map(value, fromLow, fromHigh, toLow, toHigh);
map() には5つの引数があります。
引数 意味 value 変換したい数値 fromLow 変換前の範囲の開始値 fromHigh 変換前の範囲の終了値 toLow 変換後の範囲の開始値 toHigh 変換後の範囲の終了値
という感じで、簡単にジョイスティックとサーボが連動できます。連動したら楽しいよね。楽しい操縦装置なので、その昔、戦闘機や航空機にとりつけられた際もジョイスティックという奇妙な名前を付けたのかもしれませんね。