From 8b2f39ac5da6d127f7fe88dec12d8fda9e8160c8 Mon Sep 17 00:00:00 2001 From: M1n-0 Date: Fri, 8 May 2026 00:04:39 +0200 Subject: [PATCH] add test unitaire --- main.cpp | 191 +++++++++++++++++++++++++++++++++++++++ main.py | 73 --------------- test.py | 73 --------------- test_bluetooth.cpp | 52 +++++++++++ test_boutons_droite.cpp | 52 +++++++++++ test_boutons_gauche.cpp | 52 +++++++++++ test_joystick_droite.cpp | 130 ++++++++++++++++++++++++++ test_joystick_gauche.cpp | 0 8 files changed, 477 insertions(+), 146 deletions(-) create mode 100644 main.cpp delete mode 100644 main.py delete mode 100644 test.py create mode 100644 test_bluetooth.cpp create mode 100644 test_boutons_droite.cpp create mode 100644 test_boutons_gauche.cpp create mode 100644 test_joystick_droite.cpp create mode 100644 test_joystick_gauche.cpp diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..0cc3a49 --- /dev/null +++ b/main.cpp @@ -0,0 +1,191 @@ +#include +#include +#include + +BleGamepad bleGamepad("Test Manette ESP32", "Nino", 100); + +// -------------------- BOUTONS -------------------- +// 4 boutons à gauche +const int leftButtons[4] = { + 13, 12, 14, 27 +}; + +// 4 boutons à droite +const int rightButtons[4] = { + 26, 25, 33, 32 +}; + +// -------------------- JOYSTICKS -------------------- +// Joystick gauche +const int joyLX = 34; +const int joyLY = 35; + +// Joystick droit +const int joyRX = 39; +const int joyRY = 36; + +// Zone morte +const int deadzone = 180; + +// Pour limiter l'affichage série +unsigned long lastPrint = 0; +const unsigned long printInterval = 300; + +int16_t readJoystickAxis(int pin) { + int value = analogRead(pin); // 0 à 4095 + int centered = value - 2048; + + if (abs(centered) < deadzone) { + return 0; + } + + return map(value, 0, 4095, -32767, 32767); +} + +void testBluetoothConnection() { + static bool lastConnectionState = false; + bool currentConnectionState = bleGamepad.isConnected(); + + if (currentConnectionState != lastConnectionState) { + if (currentConnectionState) { + Serial.println("[BT] Connecte a un appareil !"); + } else { + Serial.println("[BT] Deconnecte."); + } + + lastConnectionState = currentConnectionState; + } +} + +void testButtons() { + static bool lastLeftState[4] = {HIGH, HIGH, HIGH, HIGH}; + static bool lastRightState[4] = {HIGH, HIGH, HIGH, HIGH}; + + // Boutons gauche = boutons 1 à 4 + for (int i = 0; i < 4; i++) { + bool currentState = digitalRead(leftButtons[i]); + + if (currentState != lastLeftState[i]) { + if (currentState == LOW) { + Serial.print("[BOUTON GAUCHE "); + Serial.print(i + 1); + Serial.println("] Appuye"); + + if (bleGamepad.isConnected()) { + bleGamepad.press(i + 1); + } + } else { + Serial.print("[BOUTON GAUCHE "); + Serial.print(i + 1); + Serial.println("] Relache"); + + if (bleGamepad.isConnected()) { + bleGamepad.release(i + 1); + } + } + + lastLeftState[i] = currentState; + } + } + + // Boutons droite = boutons 5 à 8 + for (int i = 0; i < 4; i++) { + bool currentState = digitalRead(rightButtons[i]); + + if (currentState != lastRightState[i]) { + if (currentState == LOW) { + Serial.print("[BOUTON DROITE "); + Serial.print(i + 1); + Serial.println("] Appuye"); + + if (bleGamepad.isConnected()) { + bleGamepad.press(i + 5); + } + } else { + Serial.print("[BOUTON DROITE "); + Serial.print(i + 1); + Serial.println("] Relache"); + + if (bleGamepad.isConnected()) { + bleGamepad.release(i + 5); + } + } + + lastRightState[i] = currentState; + } + } +} + +void testJoysticks() { + if (millis() - lastPrint >= printInterval) { + lastPrint = millis(); + + int rawLX = analogRead(joyLX); + int rawLY = analogRead(joyLY); + int rawRX = analogRead(joyRX); + int rawRY = analogRead(joyRY); + + int16_t lx = readJoystickAxis(joyLX); + int16_t ly = readJoystickAxis(joyLY); + int16_t rx = readJoystickAxis(joyRX); + int16_t ry = readJoystickAxis(joyRY); + + Serial.println("----- JOYSTICKS -----"); + + Serial.print("[JOY GAUCHE] raw X="); + Serial.print(rawLX); + Serial.print(" raw Y="); + Serial.print(rawLY); + Serial.print(" | mapped X="); + Serial.print(lx); + Serial.print(" mapped Y="); + Serial.println(ly); + + Serial.print("[JOY DROITE] raw X="); + Serial.print(rawRX); + Serial.print(" raw Y="); + Serial.print(rawRY); + Serial.print(" | mapped X="); + Serial.print(rx); + Serial.print(" mapped Y="); + Serial.println(ry); + + if (bleGamepad.isConnected()) { + bleGamepad.setAxes(lx, ly, 0, rx, ry, 0); + } + } +} + +void setup() { + Serial.begin(115200); + delay(1000); + + Serial.println(); + Serial.println("===== TEST MANETTE ESP32 ====="); + + for (int i = 0; i < 4; i++) { + pinMode(leftButtons[i], INPUT_PULLUP); + pinMode(rightButtons[i], INPUT_PULLUP); + } + + analogReadResolution(12); + + BleGamepadConfiguration bleGamepadConfig; + bleGamepadConfig.setAutoReport(true); + bleGamepadConfig.setButtonCount(8); + bleGamepadConfig.setWhichAxes(true, true, false, true, true, false, false, false); + + bleGamepad.begin(&bleGamepadConfig); + + Serial.println("Bluetooth HID demarre."); + Serial.println("Cherche la manette : Test Manette ESP32"); + Serial.println("Attente connexion..."); +} + +void loop() { + testBluetoothConnection(); + testButtons(); + testJoysticks(); + + delay(20); +} \ No newline at end of file diff --git a/main.py b/main.py deleted file mode 100644 index 761db16..0000000 --- a/main.py +++ /dev/null @@ -1,73 +0,0 @@ -#include - -BleGamepad bleGamepad("Manette ModulX", "Nono", 100); - -// --------- BOUTONS --------- -// Boutons câblés entre GPIO et GND -const int buttonPins[8] = { - 13, 12, 14, 27, - 26, 25, 33, 32 -}; - -// --------- JOYSTICKS --------- -// Joystick gauche -const int joyLX = 34; -const int joyLY = 35; - -// Joystick droit -const int joyRX = 39; -const int joyRY = 36; - -// Zone morte pour éviter les tremblements -const int deadzone = 180; - -// Convertit ADC ESP32 0-4095 vers axe manette -32767 à 32767 -int16_t mapJoystick(int pin) { - int value = analogRead(pin); // 0 à 4095 - int centered = value - 2048; - - if (abs(centered) < deadzone) { - return 0; - } - - return map(value, 0, 4095, -32767, 32767); -} - -void setup() { - Serial.begin(115200); - - for (int i = 0; i < 8; i++) { - pinMode(buttonPins[i], INPUT_PULLUP); - } - - bleGamepad.begin(); -} - -void loop() { - if (bleGamepad.isConnected()) { - - // Gestion des 8 boutons - for (int i = 0; i < 8; i++) { - bool pressed = digitalRead(buttonPins[i]) == LOW; - - if (pressed) { - bleGamepad.press(i + 1); // boutons 1 à 8 - } else { - bleGamepad.release(i + 1); - } - } - - // Lecture des joysticks - int16_t lx = mapJoystick(joyLX); - int16_t ly = mapJoystick(joyLY); - int16_t rx = mapJoystick(joyRX); - int16_t ry = mapJoystick(joyRY); - - // Envoie des axes - // X, Y = joystick gauche - // RX, RY = joystick droit - bleGamepad.setAxes(lx, ly, 0, rx, ry, 0); - - delay(10); - } -} \ No newline at end of file diff --git a/test.py b/test.py deleted file mode 100644 index 8f54c15..0000000 --- a/test.py +++ /dev/null @@ -1,73 +0,0 @@ -#include - -BleGamepad bleGamepad("Manette ESP32", "Nino", 100); - -// --------- BOUTONS --------- -// Boutons câblés entre GPIO et GND -const int buttonPins[8] = { - 13, 12, 14, 27, - 26, 25, 33, 32 -}; - -// --------- JOYSTICKS --------- -// Joystick gauche -const int joyLX = 34; -const int joyLY = 35; - -// Joystick droit -const int joyRX = 39; -const int joyRY = 36; - -// Zone morte pour éviter les tremblements -const int deadzone = 180; - -// Convertit ADC ESP32 0-4095 vers axe manette -32767 à 32767 -int16_t mapJoystick(int pin) { - int value = analogRead(pin); // 0 à 4095 - int centered = value - 2048; - - if (abs(centered) < deadzone) { - return 0; - } - - return map(value, 0, 4095, -32767, 32767); -} - -void setup() { - Serial.begin(115200); - - for (int i = 0; i < 8; i++) { - pinMode(buttonPins[i], INPUT_PULLUP); - } - - bleGamepad.begin(); -} - -void loop() { - if (bleGamepad.isConnected()) { - - // Gestion des 8 boutons - for (int i = 0; i < 8; i++) { - bool pressed = digitalRead(buttonPins[i]) == LOW; - - if (pressed) { - bleGamepad.press(i + 1); // boutons 1 à 8 - } else { - bleGamepad.release(i + 1); - } - } - - // Lecture des joysticks - int16_t lx = mapJoystick(joyLX); - int16_t ly = mapJoystick(joyLY); - int16_t rx = mapJoystick(joyRX); - int16_t ry = mapJoystick(joyRY); - - // Envoie des axes - // X, Y = joystick gauche - // RX, RY = joystick droit - bleGamepad.setAxes(lx, ly, 0, rx, ry, 0); - - delay(10); - } -} \ No newline at end of file diff --git a/test_bluetooth.cpp b/test_bluetooth.cpp new file mode 100644 index 0000000..23b22e4 --- /dev/null +++ b/test_bluetooth.cpp @@ -0,0 +1,52 @@ +#include + +#include +#include + +BleCompositeHID compositeHID("Modulx Controller V4", "Nono", 100); +GamepadDevice gamepad; + +void setup() { + Serial.begin(115200); + delay(1000); + + Serial.println(); + Serial.println("===== TEST BLE COMPOSITE HID ====="); + + compositeHID.addDevice(&gamepad); + compositeHID.begin(); + + Serial.println("BLE demarre."); + Serial.println("Nom Bluetooth : Modulx Controller V4"); + Serial.println(" AHHHHHHH Essaie de l'appairer"); +} + +void loop() { + static bool lastConnected = false; + bool connected = compositeHID.isConnected(); + + if (connected != lastConnected) { + if (connected) { + Serial.println("[BLE] Connecte !"); + } else { + Serial.println("[BLE] Deconnecte."); + } + + lastConnected = connected; + } + + if (connected) { + Serial.println("[BLE] Test bouton 1"); + + gamepad.press(1); + gamepad.sendGamepadReport(); + delay(200); + + gamepad.release(1); + gamepad.sendGamepadReport(); + delay(1800); + } else { + Serial.println("[BLE] En attente connexion..."); + delay(1000); + } +} \ No newline at end of file diff --git a/test_boutons_droite.cpp b/test_boutons_droite.cpp new file mode 100644 index 0000000..455175a --- /dev/null +++ b/test_boutons_droite.cpp @@ -0,0 +1,52 @@ +#include + +// Test uniquement des 5 boutons droite +const int rightButtons[5] = { + 25, 33, 32, 4, 17 +}; + +void setup() { + Serial.begin(115200); + delay(1000); + + Serial.println(); + Serial.println("===== TEST BOUTONS DROITE ====="); + + for (int i = 0; i < 5; i++) { + pinMode(rightButtons[i], INPUT_PULLUP); + + Serial.print("Bouton droite "); + Serial.print(i + 1); + Serial.print(" sur GPIO "); + Serial.println(rightButtons[i]); + } + + Serial.println(); + Serial.println("Cablage attendu : GPIO ---- bouton ---- GND"); + Serial.println("Relache = HIGH"); + Serial.println("Appuye = LOW"); + Serial.println(); +} + +void loop() { + Serial.println("----- ETAT BOUTONS DROITE -----"); + + for (int i = 0; i < 5; i++) { + int state = digitalRead(rightButtons[i]); + + Serial.print("Bouton D"); + Serial.print(i + 1); + Serial.print(" GPIO "); + Serial.print(rightButtons[i]); + Serial.print(" = "); + + if (state == LOW) { + Serial.println("APPUYE"); + } else { + Serial.println("relache"); + } + } + + Serial.println(); + delay(500); +} \ No newline at end of file diff --git a/test_boutons_gauche.cpp b/test_boutons_gauche.cpp new file mode 100644 index 0000000..87778e8 --- /dev/null +++ b/test_boutons_gauche.cpp @@ -0,0 +1,52 @@ +#include + +// Test uniquement des 5 boutons gauche +const int leftButtons[5] = { + 13, 12, 14, 27, 26 +}; + +void setup() { + Serial.begin(115200); + delay(1000); + + Serial.println(); + Serial.println("===== TEST BOUTONS GAUCHE ====="); + + for (int i = 0; i < 5; i++) { + pinMode(leftButtons[i], INPUT_PULLUP); + + Serial.print("Bouton gauche "); + Serial.print(i + 1); + Serial.print(" sur GPIO "); + Serial.println(leftButtons[i]); + } + + Serial.println(); + Serial.println("Cablage attendu : GPIO ---- bouton ---- GND"); + Serial.println("Relache = HIGH"); + Serial.println("Appuye = LOW"); + Serial.println(); +} + +void loop() { + Serial.println("----- ETAT BOUTONS GAUCHE -----"); + + for (int i = 0; i < 5; i++) { + int state = digitalRead(leftButtons[i]); + + Serial.print("Bouton G"); + Serial.print(i + 1); + Serial.print(" GPIO "); + Serial.print(leftButtons[i]); + Serial.print(" = "); + + if (state == LOW) { + Serial.println("APPUYE"); + } else { + Serial.println("relache"); + } + } + + Serial.println(); + delay(500); +} \ No newline at end of file diff --git a/test_joystick_droite.cpp b/test_joystick_droite.cpp new file mode 100644 index 0000000..c2de606 --- /dev/null +++ b/test_joystick_droite.cpp @@ -0,0 +1,130 @@ +#include + +#include +#include + +BleCompositeHID compositeHID("Modulx Controller V4", "Nono", 100); +GamepadDevice gamepad; + +// Joystick droit +const int JOY_RIGHT_X = 34; // VRX +const int JOY_RIGHT_Y = 35; // VRY + +// Centre réel mesuré au démarrage +int centerRightX = 2048; +int centerRightY = 2048; + +// Zone morte autour du centre réel +const int DEADZONE = 250; + +unsigned long lastPrint = 0; +const unsigned long PRINT_INTERVAL = 300; + +int16_t readJoystickAxisCalibrated(int pin, int centerValue) { + int raw = analogRead(pin); + int centered = raw - centerValue; + + if (abs(centered) < DEADZONE) { + return 0; + } + + // Conversion selon le côté + if (centered > 0) { + return map(centered, DEADZONE, 4095 - centerValue, 0, 32767); + } else { + return map(centered, -DEADZONE, -centerValue, 0, -32767); + } +} + +void calibrateRightJoystick() { + long sumX = 0; + long sumY = 0; + const int samples = 100; + + Serial.println("Calibration joystick droit..."); + Serial.println("Ne touche pas au joystick."); + + delay(1000); + + for (int i = 0; i < samples; i++) { + sumX += analogRead(JOY_RIGHT_X); + sumY += analogRead(JOY_RIGHT_Y); + delay(5); + } + + centerRightX = sumX / samples; + centerRightY = sumY / samples; + + Serial.print("Centre joystick droit X = "); + Serial.println(centerRightX); + + Serial.print("Centre joystick droit Y = "); + Serial.println(centerRightY); +} + +void setup() { + Serial.begin(115200); + delay(1000); + + Serial.println(); + Serial.println("===== TEST BLE COMPOSITE HID + JOYSTICK DROIT ====="); + + analogReadResolution(12); + + calibrateRightJoystick(); + + compositeHID.addDevice(&gamepad); + compositeHID.begin(); + + Serial.println("BLE demarre."); + Serial.println("Nom Bluetooth : Modulx Controller V4"); + Serial.println("Joystick droit : VRX GPIO34 / VRY GPIO35"); +} + +void loop() { + static bool lastConnected = false; + bool connected = compositeHID.isConnected(); + + if (connected != lastConnected) { + if (connected) { + Serial.println("[BLE] Connecte !"); + } else { + Serial.println("[BLE] Deconnecte."); + } + + lastConnected = connected; + } + + int rawX = analogRead(JOY_RIGHT_X); + int rawY = analogRead(JOY_RIGHT_Y); + + int16_t rightX = readJoystickAxisCalibrated(JOY_RIGHT_X, centerRightX); + int16_t rightY = readJoystickAxisCalibrated(JOY_RIGHT_Y, centerRightY); + + if (millis() - lastPrint >= PRINT_INTERVAL) { + lastPrint = millis(); + + Serial.print("[JOY DROIT] raw X="); + Serial.print(rawX); + Serial.print(" raw Y="); + Serial.print(rawY); + + Serial.print(" | center X="); + Serial.print(centerRightX); + Serial.print(" center Y="); + Serial.print(centerRightY); + + Serial.print(" | mapped X="); + Serial.print(rightX); + Serial.print(" mapped Y="); + Serial.println(rightY); + } + + if (connected) { + gamepad.setRightThumb(rightX, rightY); + gamepad.sendGamepadReport(); + delay(20); + } else { + delay(100); + } +} \ No newline at end of file diff --git a/test_joystick_gauche.cpp b/test_joystick_gauche.cpp new file mode 100644 index 0000000..e69de29