見出し画像

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

今更ながらセガサターンです

どうも無駄な努力です。
趣味で古いゲームコントローラーを直したり、分解清掃したりしてます。

昔にセガサターンのコントローラーを分解清掃してRetroPieに使ったりしていました。(動画はバーテャスティックですがプロトコルは同じ)


いずれは自力でUSB化などを考えていましたが、M5STACKやAtomMatrixで無線化が容易な事を知りました、、、って、遅いですねww
昔に色々試そうとして諦めたAtomMatrixがあったので使います。

Arduinoの思い出しから始める

DataStreamerの件でArduinoのプログラミングをやってました。
素人がプログラムを切って張るようなレベルですが、とりあえず思い出すことから始めます。
どっかで買った安いピンヘッダと圧着ペンチでコチョコチョします。
繋いだらGPIOのピンを差し込んで・・・
そして、4時間・・・
ローカルレベルでコントローラーのON/OFFを拾うまで出来ました!
思いつきでやったにしては上出来、、、だよね?

RETROPIE仕様のコネクタから変換する黄色いハーネスを制作

コントローラー信号について

下記サイトの方を参考(丸パクリ)しましたww
この場を借りて、ありがとうございます!って言わせてもらいます。

今日はボタンの検出で終わり!

for文も使わずバカみたいなベタ打ちですが、シリアルモニタですべてのボタンの動きは見れました。
デバイス用のミドルウェアなんだから良しとしましょう。
(自己満足)

https://youtu.be/B4c8KkNzYkI

#include "M5Atom.h"

void setup() {
    M5.begin(true, false, true); 
    delay(10);
    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() {

    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);



    if (d0[0] == LOW) {
      Serial.print('Z');
      } 
    if (d1[0] == LOW) {
      Serial.print('Y');
      } 
    if (d2[0] == LOW) {
      Serial.print('X');
      } 
    if (d3[0] == LOW) {
      Serial.print('R');
      } 
      
    if (d0[1] == LOW) {
      Serial.print('U');
      } 
    if (d1[1] == LOW) {
      Serial.print('D');
      } 
    if (d2[1] == LOW) {
      Serial.print('H');
      } 
    if (d3[1] == LOW) {
      Serial.print('M');
      } 

    if (d0[2] == LOW) {
      Serial.print('B');
      } 
    if (d1[2] == LOW) {
      Serial.print('C');
      } 
    if (d2[2] == LOW) {
      Serial.print('A');
      } 
    if (d3[2] == LOW) {
      Serial.print('S');
      } 

    if (d3[3] == LOW) {
      Serial.print('L');
      } 

    delay(50);
}

改めて見たら、for文でコードが1/2以下にできるなww

次は無線化!

カッコつけてますが、Arduino IDEのサンプルライブラリで無線ジョイスティックがあるんで貼り付けて試すだけですww
動いてほしいなー!

いいなと思ったら応援しよう!