見出し画像

サターンコントローラーの無線化計画2

ATOM LiteとATOM TailBATを導入

どうも無駄な努力です。
サターンコントローラーの無線化計画、優先での動作確認ができたので無線化していきます。

無線化、、、と言えば、まずは電源のバッテリー化ですよね。
そのため、ATOM LiteとATOM TailBATを購入しました。
ATOM MarixだとLEDで遊たくなるのでLiteですよねww
ATOM TailBATは190mAhと容量は小さいですが、一体感と言い、充電回路内蔵の一体型を考えればこれ一択ですね。
バッテリーの持ちは作り込む過程で気が付いたら書きます。

無線のプログラミングについて

カッコよく書いてますが、ESP32用のBluetoothゲームパッド用ライブラリがありますので、基本はサンプルプログラムに前回のコードを貼っただけです。

ESP32-BLE-Gamepadのライブラリはコレです!作った人ありがとうございます!
ライブラリを入れたらスケッチ例で読み出すべし!

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

次こそは実用レベルへ引き上げる!

できるかなー?

この記事が気に入ったらサポートをしてみませんか?