В том то и дело что плата геймпада целая, это полноценный беспроводной геймпад от сега (в данном случае китайский) геймпад.я правильно понял, что от оригинального пульта остались лишь кнопки и корпус?
Если для батареи места не нашлось - как оно питается? Я вмжу там DC-DC - нафига он там, если нет питания?
void segaRead() {
  digitalWrite(SEL, HIGH);
  sega_up = (digitalRead(UP_OR_Z) == LOW);
  sega_left = (digitalRead(LEFT_OR_X) == LOW);
  sega_right = (digitalRead(RIGHT_OR_MODE) == LOW);
  sega_down = (digitalRead(DOWN_OR_Y) == LOW);
  sega_c = (digitalRead(C_OR_START) == LOW);
  sega_b = (digitalRead(B_OR_A) == LOW);
  digitalWrite(SEL, LOW);
  sega_a = (digitalRead(B_OR_A) == LOW);
  sega_start = (digitalRead(C_OR_START) == LOW);
  digitalWrite(SEL, HIGH);
  digitalWrite(SEL, LOW);
  digitalWrite(SEL, HIGH);
  digitalWrite(SEL, LOW);
  digitalWrite(SEL, HIGH);
  sega_x = (digitalRead(LEFT_OR_X) == LOW);
  sega_y = (digitalRead(DOWN_OR_Y) == LOW);
  sega_z = (digitalRead(UP_OR_Z) == LOW);
  sega_mode = (digitalRead(RIGHT_OR_MODE) == LOW);
  digitalWrite(SEL, LOW);
  digitalWrite(SEL, HIGH);
}#include <OLED_I2C.h>
OLED oled(SDA, SCL);
extern uint8_t SmallFont[];
#define UP_OR_Z 2
#define DOWN_OR_Y 3
#define LEFT_OR_X 4
#define RIGHT_OR_MODE 5
#define B_OR_A 6
#define SEL 7
#define C_OR_START 8
int i;
bool sega_up = false;
bool sega_down = false;
bool sega_left = false;
bool sega_right = false;
bool sega_start = false;
bool sega_mode = false;
bool sega_a = false;
bool sega_b = false;
bool sega_c = false;
bool sega_x = false;
bool sega_y = false;
bool sega_z = false;
void segaRead() {
  digitalWrite(SEL, HIGH);
  sega_up = (digitalRead(UP_OR_Z) == LOW);
  sega_left = (digitalRead(LEFT_OR_X) == LOW);
  sega_right = (digitalRead(RIGHT_OR_MODE) == LOW);
  sega_down = (digitalRead(DOWN_OR_Y) == LOW);
  sega_c = (digitalRead(C_OR_START) == LOW);
  sega_b = (digitalRead(B_OR_A) == LOW);
  digitalWrite(SEL, LOW);
  sega_a = (digitalRead(B_OR_A) == LOW);
  sega_start = (digitalRead(C_OR_START) == LOW);
  digitalWrite(SEL, HIGH);
  digitalWrite(SEL, LOW);
  digitalWrite(SEL, HIGH);
  digitalWrite(SEL, LOW);
  digitalWrite(SEL, HIGH);
  sega_x = (digitalRead(LEFT_OR_X) == LOW);
  sega_y = (digitalRead(DOWN_OR_Y) == LOW);
  sega_z = (digitalRead(UP_OR_Z) == LOW);
  sega_mode = (digitalRead(RIGHT_OR_MODE) == LOW);
  digitalWrite(SEL, LOW);
  digitalWrite(SEL, HIGH);
}
void setup() {
  oled.begin();
  oled.setFont(SmallFont);
  pinMode(SEL, OUTPUT);
  pinMode(UP_OR_Z, INPUT);
  pinMode(DOWN_OR_Y, INPUT);
  pinMode(LEFT_OR_X, INPUT);
  pinMode(RIGHT_OR_MODE, INPUT);
  pinMode(B_OR_A, INPUT);
  pinMode(C_OR_START, INPUT);
}
void loop() {
  segaRead();
  char temp[16];
  oled.clrScr();
  sprintf(temp, " %s   %s  %s%s%s",
          sega_up ? "U" : "u",
          sega_mode ? "M" : "m",
          sega_x ? "X" : "x",
          sega_y ? "Y" : "y",
          sega_z ? "Z" : "z");
  oled.print(temp, CENTER, 8 * 3);
  sprintf(temp, "%s%s%s  %s  %s%s%s",
          sega_left ? "L" : "l",
          sega_down ? "D" : "d",
          sega_right ? "R" : "r",
          sega_start ? "S" : "s",
          sega_a ? "A" : "a",
          sega_b ? "B" : "b",
          sega_c ? "C" : "c");
  oled.print(temp, CENTER, 8 * 4);
  oled.print("SEGA", CENTER, 52);
  oled.printNumI(i, LEFT, 52);
  {
    if (sega_up == 1) {
      oled.print("UP", LEFT, 0);
    } else if (sega_down == 1)
    { oled.print("DOWN", LEFT, 0);
    } else if (sega_left == 1)
    { oled.print("LEFT", LEFT, 0);
    } else if (sega_right == 1)
    { oled.print("RIGHT", LEFT, 0);
    } else if (sega_a == 1)
    { oled.print("A", RIGHT, 0);
    } else if (sega_b == 1)
    { oled.print("B", RIGHT, 0);
    } else if (sega_c == 1)
    { oled.print("C", RIGHT, 0);
    } else if (sega_mode == 1)
    { oled.print("MODE", CENTER, 0);
    } else if (sega_start == 1)
    { oled.print("START", CENTER, 0);
    } else if (sega_x == 1)
    { oled.print("X", CENTER, 8);
    } else if (sega_y == 1)
    { oled.print("Y", CENTER, 8);
    } else if (sega_z == 1)
    { oled.print("Z", CENTER, 8);
    }
  }
  oled.update();
}#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 radio(9, 10);
#define UP_OR_Z 2
#define DOWN_OR_Y 3
#define LEFT_OR_X 4
#define RIGHT_OR_MODE 5
#define B_OR_A 6
#define SEL 7
#define C_OR_START 8
int i;
bool sega_up = false;
bool sega_down = false;
bool sega_left = false;
bool sega_right = false;
bool sega_start = false;
bool sega_mode = false;
bool sega_a = false;
bool sega_b = false;
bool sega_c = false;
bool sega_x = false;
bool sega_y = false;
bool sega_z = false;
void segaRead() {
  digitalWrite(SEL, HIGH);
  sega_up = (digitalRead(UP_OR_Z) == LOW);
  sega_left = (digitalRead(LEFT_OR_X) == LOW);
  sega_right = (digitalRead(RIGHT_OR_MODE) == LOW);
  sega_down = (digitalRead(DOWN_OR_Y) == LOW);
  sega_c = (digitalRead(C_OR_START) == LOW);
  sega_b = (digitalRead(B_OR_A) == LOW);
  digitalWrite(SEL, LOW);
  sega_a = (digitalRead(B_OR_A) == LOW);
  sega_start = (digitalRead(C_OR_START) == LOW);
  digitalWrite(SEL, HIGH);
  digitalWrite(SEL, LOW);
  digitalWrite(SEL, HIGH);
  digitalWrite(SEL, LOW);
  digitalWrite(SEL, HIGH);
  sega_x = (digitalRead(LEFT_OR_X) == LOW);
  sega_y = (digitalRead(DOWN_OR_Y) == LOW);
  sega_z = (digitalRead(UP_OR_Z) == LOW);
  sega_mode = (digitalRead(RIGHT_OR_MODE) == LOW);
  digitalWrite(SEL, LOW);
  digitalWrite(SEL, HIGH);
}
void setup() {
  radio.begin();
  radio.setChannel(0x70);
  radio.setPALevel (RF24_PA_MAX);
  radio.setDataRate (RF24_1MBPS);
  radio.openWritingPipe(0x0123456789LL);
  pinMode(SEL, OUTPUT);
  pinMode(UP_OR_Z, INPUT);
  pinMode(DOWN_OR_Y, INPUT);
  pinMode(LEFT_OR_X, INPUT);
  pinMode(RIGHT_OR_MODE, INPUT);
  pinMode(B_OR_A, INPUT);
  pinMode(C_OR_START, INPUT);
}
void loop() {
  segaRead();
  {
    if (sega_up == 1) {
      i = 1;
      radio.write(&i, sizeof(i));
    } else if (sega_down == 1)
    { i = 2;
      radio.write(&i, sizeof(i));
    } else if (sega_left == 1)
    { i = 3;
      radio.write(&i, sizeof(i));
    } else if (sega_right == 1)
    { i = 4;
      radio.write(&i, sizeof(i));
    } else if (sega_a == 1)
    { i = 5;
      radio.write(&i, sizeof(i));
    } else if (sega_b == 1)
    { i = 6;
      radio.write(&i, sizeof(i));
    } else if (sega_c == 1)
    { i = 7;
      radio.write(&i, sizeof(i));
    } else if (sega_mode == 1)
    { i = 8;
      radio.write(&i, sizeof(i));
    } else if (sega_start == 1)
    { i = 9;
      radio.write(&i, sizeof(i));
    } else if (sega_x == 1)
    { i = 10;
      radio.write(&i, sizeof(i));
    } else if (sega_y == 1)
    { i = 11;
      radio.write(&i, sizeof(i));
    } else if (sega_z == 1)
    { i = 12;
      radio.write(&i, sizeof(i));
    } else {
      i = 0;
      radio.write(&i, sizeof(i));
    }
  }
}  //******************************************************************************
  //  Секция определения типов
  //******************************************************************************
  struct
  {
    int16_t Turn;                                                               // Управление поворотом
    int16_t Speed;                                                              // Управление ходом
    unsigned Bunker_1     :1;                                                   // Бункер 1
    unsigned Bunker_2     :1;                                                   // Бункер 2
    unsigned RunFires     :1;                                                   // Ходовые огни
    unsigned SearchLight  :1;                                                   // Прожектор
    unsigned Joystick     :1;                                                   // Инверсия джойстиков
    unsigned Free         :3;                                                   // Пока не занятые переменные
  } SendBuff = {0,0,0};Берется байт, в котором каждому биту назначается определенная кнопка. В итоге на все кнопки хватит два байта информации.Создаётся структура, в которой каждой кнопке или джойстику задаётся своя переменная.
простейшие логические операции.Принял два байта и выковыривай из них данные.
