
Como que se pousa assim?
Tirei essa foto uns anos atrás e acabei achando perdida numa pasta aleatória do meu PC

Tirei essa foto uns anos atrás e acabei achando perdida numa pasta aleatória do meu PC
Eu tentei comprar numa farmácia do bairro mas não puderam vender por ser material promocional, procurei na internet em diversos sites de vendas e não achei. Se alguém encontrar uma à venda online me avisem por favor. Eu recebo no fim do mês então não tem muita pressa. Parece que são 2 modelos diferentes, eu tenho interesse pelos 2 mas principalmente esse da foto.
AAAAAAAAAAAAAAAAAAAAAAAAAAA
Já fiz 2 posts sobre isso, uma dois anos atrás e o outro post é recente. Simplesmente não quis deixar uma guitarra do Guitar Hero da marca Clone morrer, até pq eu sou viciado em Guitar Hero até hoje. E é o seguinte, no último post minha ideia era usar uma placa de joystick genérico pra recuperar a placa principal* da guitarra**, o que acabou dando quase certo mas os botões estavam pressionando sozinho, então removi a placa do joystick e depois de muito pensar, decidi usar uma placa ESP32 que estava parada aqui em casa faz uns meses. Soldei tudo na placa e agora a guitarra está funcionando perfeitamente via bluetooth, que nos meus testes, incrivelmente não ficou com latência pelo que notei. Meu próximo passo é soldar uma bateria, preciso comprar o módulo primeiro.
* Tive que cortar as trilhas da placa principal pra o que sobrou não ficar interferindo no resultado final
** A guitarra é muito antiga, primeiro começou com problema no wireless, e depois a placa foi dando defeitos aleatórios que fui tentando arrumar, mas só foi piorando.
Abaixo deixo o código que eu usei no Arduino IDE:
/*
============================================================
Guitar Hero BLE Gamepad - ESP32-WROOM
Clone Hero compatible
============================================================
Mapeamento de pinos:
D13 -> Botão Verde (Fret 1) -> Botão 1
D12 -> Botão Vermelho(Fret 2) -> Botão 2
D14 -> Botão Amarelo (Fret 3) -> Botão 3
D27 -> Botão Azul (Fret 4) -> Botão 4
D26 -> Botão Laranja (Fret 5) -> Botão 5
D33 -> Strum Up -> DPad Cima
D32 -> Strum Down -> DPad Baixo
D34 -> Whammy Bar -> Eixo Z (analógico)
D4 -> Start -> Botão 6
D5 -> Select -> Botão 7
Dependência: BleGamepad by lemmingdev
Instalar via Library Manager: "BleGamepad"
============================================================
*/
#include <BleGamepad.h>
#include <NimBLEDevice.h>
// --- Pinos ---
#define PIN_VERDE 13 // Fret 1
#define PIN_VERMELHO 12 // Fret 2
#define PIN_AMARELO 14 // Fret 3
#define PIN_AZUL 27 // Fret 4
#define PIN_LARANJA 26 // Fret 5
#define PIN_STRUM_UP 33
#define PIN_STRUM_DOWN 32
#define PIN_WHAMMY 34
#define PIN_START 4 // Botão 6
#define PIN_SELECT 5 // Botão 7
// --- BLE Gamepad ---
// Nome que vai aparecer no Bluetooth do PC
BleGamepad bleGamepad("Guitar Hero Controller", "ESP32", 100);
BleGamepadConfiguration config;
void setup() {
Serial.begin(115200);
Serial.println("Iniciando Guitar Hero BLE...");
// Configura pinos como entrada com pull-up interno
// (botão fecha o circuito para GND)
pinMode(PIN_VERDE, INPUT_PULLUP);
pinMode(PIN_VERMELHO, INPUT_PULLUP);
pinMode(PIN_AMARELO, INPUT_PULLUP);
pinMode(PIN_AZUL, INPUT_PULLUP);
pinMode(PIN_LARANJA, INPUT_PULLUP);
pinMode(PIN_STRUM_UP, INPUT_PULLUP);
pinMode(PIN_STRUM_DOWN, INPUT_PULLUP);
// D34 é input-only no ESP32, não suporta pull-up interno
pinMode(PIN_WHAMMY, INPUT);
pinMode(PIN_START, INPUT_PULLUP);
pinMode(PIN_SELECT, INPUT_PULLUP);
// Configura o gamepad: 7 botões + DPad + eixo Z (whammy)
config.setButtonCount(7);
config.setHatSwitchCount(1); // DPad para o strum
config.setAutoReport(false); // Controle manual do envio
NimBLEDevice::setSecurityAuth(true, true, true); // bonding, MITM, SC
NimBLEDevice::setSecurityPasskey(22558800); // seu PIN aqui
NimBLEDevice::setSecurityIOCap(BLE_HS_IO_DISPLAY_ONLY);
bleGamepad.begin(&config);
Serial.println("Aguardando conexão BLE...");
}
// Estado anterior para detectar mudança (evita envio desnecessário)
bool prevVerde = false;
bool prevVermelho = false;
bool prevAmarelo = false;
bool prevAzul = false;
bool prevLaranja = false;
bool prevStrumUp = false;
bool prevStrumDown = false;
bool prevStart = false;
bool prevSelect = false;
int prevWhammy = 0;
void loop() {
if (!bleGamepad.isConnected()) {
// Pisca no serial enquanto aguarda conexão
Serial.println("Aguardando conexão...");
delay(1000);
return;
}
// Lê os pinos (LOW = pressionado, por causa do pull-up)
bool verde = !digitalRead(PIN_VERDE);
bool vermelho = !digitalRead(PIN_VERMELHO);
bool amarelo = !digitalRead(PIN_AMARELO);
bool azul = !digitalRead(PIN_AZUL);
bool laranja = !digitalRead(PIN_LARANJA);
bool strumUp = !digitalRead(PIN_STRUM_UP);
bool strumDown = !digitalRead(PIN_STRUM_DOWN);
bool start = !digitalRead(PIN_START);
bool select = !digitalRead(PIN_SELECT);
// Whammy: lê analógico (0-4095) e mapeia para 0-32767
int whammyRaw = analogRead(PIN_WHAMMY);
int whammy = map(whammyRaw, 0, 4095, 0, 32767);
// Verifica se houve mudança de estado
bool mudou = (verde != prevVerde ||
vermelho != prevVermelho ||
amarelo != prevAmarelo ||
azul != prevAzul ||
laranja != prevLaranja ||
strumUp != prevStrumUp ||
strumDown!= prevStrumDown ||
start != prevStart ||
select != prevSelect ||
abs(whammy - prevWhammy) > 200); // tolerância pra ruído analógico
if (mudou) {
// --- Frets (botões 1 a 5) ---
if (verde) bleGamepad.press(BUTTON_1);
else bleGamepad.release(BUTTON_1);
if (vermelho) bleGamepad.press(BUTTON_2);
else bleGamepad.release(BUTTON_2);
if (amarelo) bleGamepad.press(BUTTON_3);
else bleGamepad.release(BUTTON_3);
if (azul) bleGamepad.press(BUTTON_4);
else bleGamepad.release(BUTTON_4);
if (laranja) bleGamepad.press(BUTTON_5);
else bleGamepad.release(BUTTON_5);
if (start) bleGamepad.press(BUTTON_6);
else bleGamepad.release(BUTTON_6);
if (select) bleGamepad.press(BUTTON_7);
else bleGamepad.release(BUTTON_7);
// --- Whammy Bar (eixo Z) ---
bleGamepad.setZ(whammy);
// --- Strum via DPad (Hat Switch) ---
if (strumUp && !strumDown) {
bleGamepad.setHat(HAT_UP);
} else if (strumDown && !strumUp) {
bleGamepad.setHat(HAT_DOWN);
} else {
bleGamepad.setHat(HAT_CENTERED);
}
// Envia o relatório HID
bleGamepad.sendReport();
// Atualiza estado anterior
prevVerde = verde;
prevVermelho = vermelho;
prevAmarelo = amarelo;
prevAzul = azul;
prevLaranja = laranja;
prevStrumUp = strumUp;
prevStrumDown = strumDown;
prevStart = start;
prevSelect = select;
prevWhammy = whammy;
}
// Pequeno delay para debounce e estabilidade
delay(5);
}
I don't need to say how much I hate the pages that makes videos like this.