表題の通りなんですが、ジョイスティックはArduinoスターターキットについていた5v対応のものだったので、Wemos R3 D32 ( ESP32 ) ではどのように結線するのかよくわかっていませんでした。そこでネットでしらべたところ、ESP32のADCは3.3vなので、VCCは5vではなく3v3につなげ、X, Y のアナログ接続はESP32のADC2(A0, A1)ではなくADC1(A2=GPIO35, A3=GPIO34)に接続すると良いようでした。
結果、Joystickの中央値(センターポジション)に偏りがあるものの、それらしく動作してくれたので備忘録として挙げてみることにしました。なおSG90はセンサーシールドのD2,D3(GPIO 26、25)に接続しているので5Vで駆動させています。
スケッチは以下の通りです。初めの方にピン番号を defineし差分を吸収したので、ESP32以外でも同じコードで動作できるようにしています。
結果、Joystickの中央値(センターポジション)に偏りがあるものの、それらしく動作してくれたので備忘録として挙げてみることにしました。なおSG90はセンサーシールドのD2,D3(GPIO 26、25)に接続しているので5Vで駆動させています。
スケッチは以下の通りです。初めの方にピン番号を defineし差分を吸収したので、ESP32以外でも同じコードで動作できるようにしています。
#ifdef ESP32
#include <ESP32Servo.h>
#define D0 3
#define D1 1
#define D2 26
#define D3 25
#define D4 17
#define D5 16
#define D6 27
#define D7 14
#define D8 12
#define D9 13
#define D10 5
#define D11 23
#define D12 19
#define D13 18
#define A0 2
#define A1 4
#define A2 35
#define A3 34
#define A4 36
#define A5 39
#define MY_SERVO_X_PIN D2
#define MY_SERVO_Y_PIN D3
#define JOY_X_PIN A2
#define JOY_Y_PIN A3
#define JOY_SW D13
#define JOY_MAX 4096
#else
#include <Servo.h>
#define D0 0
#define D1 1
#define D2 2
#define D3 3
#define D4 4
#define D5 5
#define D6 6
#define D7 7
#define D8 8
#define D9 9
#define D10 10
#define D11 11
#define D12 12
#define D13 13
#define MY_SERVO_X_PIN D2
#define MY_SERVO_Y_PIN D3
#define JOY_X_PIN A2
#define JOY_Y_PIN A3
#define JOY_SW D13
#define JOY_MAX 1024
#endif
Servo myservo_x;
Servo myservo_y;
int x_value;
int y_value;
int x_pos;
int y_pos;
void setup() {
pinMode(JOY_X_PIN, INPUT);
pinMode(JOY_Y_PIN, INPUT);
pinMode(JOY_SW, INPUT_PULLUP);
myservo_x.attach(MY_SERVO_X_PIN);
myservo_y.attach(MY_SERVO_Y_PIN);
Serial.begin(9600);
delay(1000);
}
void loop() {
x_value=analogRead(JOY_X_PIN);
y_value=analogRead(JOY_Y_PIN);
char s[80];
sprintf(s, "X=%4d, y=%4d, sw=%1d\n", x_value, y_value, digitalRead(JOY_SW));
Serial.print(s);
x_pos = map(x_value, 0, JOY_MAX, 0, 180);
y_pos = map(y_value, 0, JOY_MAX, 0, 180);
// sprintf(s, "X=%3d, y=%3d, sw=%1d\n", x_pos, y_pos, digitalRead(JOY_SW));
// Serial.print(s);
myservo_x.write(x_pos);
myservo_y.write(y_pos);
delay(15);
}
ジョイスティックは信号線接続ピンを右側にしてコントロールさせています。簡単ですが、今回は以上です。それでは。
コメント
コメントを投稿