サターンコントローラーの無線化計画2
ATOM LiteとATOM TailBATを導入
どうも無駄な努力です。
サターンコントローラーの無線化計画、優先での動作確認ができたので無線化していきます。
無線化、、、と言えば、まずは電源のバッテリー化ですよね。
そのため、ATOM LiteとATOM TailBATを購入しました。
ATOM MarixだとLEDで遊たくなるのでLiteですよねww
ATOM TailBATは190mAhと容量は小さいですが、一体感と言い、充電回路内蔵の一体型を考えればこれ一択ですね。
バッテリーの持ちは作り込む過程で気が付いたら書きます。
無線のプログラミングについて
カッコよく書いてますが、ESP32用のBluetoothゲームパッド用ライブラリがありますので、基本はサンプルプログラムに前回のコードを貼っただけです。
100%ではないが動く!
切って張って、ボタンを割り付けると、、、とりあえず動く!
100%とは言えないが動く!
まぁ、今日はこんなもんだ!
改善するべき・直すべき箇所
方向キーが点滅している(方向キーOFFの制御を要調整)
方向キーが斜めに対応していない
ATOM Liteの押しボタンをセレクトキーとする
ATOM LiteのLEDをプログラム動作中LEDにする
#include <BleGamepad.h>
#include <M5Atom.h>
BleGamepad bleGamepad;
void setup()
{
Serial.begin(115200);
M5.begin(true, false,true);
delay(10); // delay10ms
bleGamepad.begin();
pinMode(19, INPUT);
pinMode(22, INPUT);
pinMode(23, INPUT);
pinMode(33, INPUT);
pinMode(21, OUTPUT);
pinMode(25, OUTPUT);
}
char d0[4];
char d1[4];
char d2[4];
char d3[4];
void loop()
{
if (bleGamepad.isConnected())
{
digitalWrite(21, LOW );
digitalWrite(25, LOW );
delay(1);
d0[0] = digitalRead(22);
d1[0] = digitalRead(33);
d2[0] = digitalRead(19);
d3[0] = digitalRead(23);
digitalWrite(21, LOW );
digitalWrite(25, HIGH );
delay(1);
d0[1] = digitalRead(22);
d1[1] = digitalRead(33);
d2[1] = digitalRead(19);
d3[1] = digitalRead(23);
digitalWrite(21, HIGH );
digitalWrite(25, LOW );
delay(1);
d0[2] = digitalRead(22);
d1[2] = digitalRead(33);
d2[2] = digitalRead(19);
d3[2] = digitalRead(23);
digitalWrite(21, HIGH );
digitalWrite(25, HIGH );
delay(1);
d0[3] = digitalRead(22);
d1[3] = digitalRead(33);
d2[3] = digitalRead(19);
d3[3] = digitalRead(23);
bleGamepad.setAxes(0, 0, 0, 0, 0, 0, 0, 0);
if (d0[0] == LOW) {
bleGamepad.press(BUTTON_6);
} else {
bleGamepad.release(BUTTON_6);
}
if (d1[0] == LOW) {
bleGamepad.press(BUTTON_5);
} else {
bleGamepad.release(BUTTON_5);
}
if (d2[0] == LOW) {
bleGamepad.press(BUTTON_4);
} else {
bleGamepad.release(BUTTON_4);
}
if (d3[0] == LOW) {
bleGamepad.press(BUTTON_8);
} else {
bleGamepad.release(BUTTON_8);
}
if (d0[2] == LOW) {
bleGamepad.press(BUTTON_2);
} else {
bleGamepad.release(BUTTON_2);
}
if (d1[2] == LOW) {
bleGamepad.press(BUTTON_3);
} else {
bleGamepad.release(BUTTON_3);
}
if (d2[2] == LOW) {
bleGamepad.press(BUTTON_1);
} else {
bleGamepad.release(BUTTON_1);
}
if (d3[2] == LOW) {
bleGamepad.press(BUTTON_9);
} else {
bleGamepad.release(BUTTON_9);
}
if (d3[3] == LOW) {
bleGamepad.press(BUTTON_7);
} else {
bleGamepad.release(BUTTON_7);
}
if (d0[1] == LOW) {
bleGamepad.setHat1(HAT_UP);
}
if (d1[1] == LOW) {
bleGamepad.setHat1(HAT_DOWN);
}
if (d2[1] == LOW) {
bleGamepad.setHat1(HAT_LEFT);
}
if (d3[1] == LOW) {
bleGamepad.setHat1(HAT_RIGHT);
}
delay(50);
bleGamepad.setHat1(HAT_CENTERED);
}
}
相変わらずのベタ打ちですけど、ほっといてくださいww
次こそは実用レベルへ引き上げる!
できるかなー?