В том то и дело что плата геймпада целая, это полноценный беспроводной геймпад от сега (в данном случае китайский) геймпад.я правильно понял, что от оригинального пульта остались лишь кнопки и корпус?
Если для батареи места не нашлось - как оно питается? Я вмжу там 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};
Берется байт, в котором каждому биту назначается определенная кнопка. В итоге на все кнопки хватит два байта информации.Создаётся структура, в которой каждой кнопке или джойстику задаётся своя переменная.
простейшие логические операции.Принял два байта и выковыривай из них данные.