www.safezone-fpv.com

Station S - Tools · Extraits

Cette page montre quelques briques concrètes (double gimbal, RP2040, capteurs) tout en gardant le dépôt complet privé. Elle complète la page concept Tools et rassure les contributeurs sur lavancement réel.

1. Dossiers concernés

assets/station_s/
+- include/app/tools/
¦  +- obb_dual_gimbal.h
+- src/app/tools/
   +- obb_dual_gimbal.cpp

Ces fichiers cohabitent avec les modules GeoMail/Settings déjà exposés : un même build embarque diagnostic + contrôleur.

2. Abstraction double gimbal

struct StickState {
  int16_t x = 0;
  int16_t y = 0;
  bool press = false;
};

struct ControllerState {
  StickState left;
  StickState right;
  uint32_t keypad_mask = 0;   // 20 touches tactiles
  bool rp2040_online = false; // dongle USB/I2C détecté
};

Les axes sont normalisés (-1024/+1024). Le masque de 20 touches est utilisé pour les combinaisons durgence décrites dans la page concept.

3. Pont RP2040 ? ESP32

bool read_stick_from_i2c(uint8_t channel, StickState &stick) {
  Wire.beginTransmission(0x28);
  Wire.write(channel);
  if (Wire.endTransmission(false) != 0) return false;
  if (Wire.requestFrom(0x28, (uint8_t)5) != 5) return false;
  stick.x = (Wire.read() << 8) | Wire.read();
  stick.y = (Wire.read() << 8) | Wire.read();
  stick.press = Wire.read();
  return true;
}

Le mini RP2040 (branché en USB sur la Station?S) lit les gimbals analogiques et renvoie les valeurs via I²C. On peut ainsi brancher nimporte quel module Arduino low-cost ou un joystick récupéré.

4. Clavier 20 touches

bool read_keypad_mask(uint32_t &mask) {
  Wire.beginTransmission(0x28);
  Wire.write(0x80);            // registre matrice tactile
  if (Wire.endTransmission(false) != 0) return false;
  if (Wire.requestFrom(0x28, (uint8_t)3) != 3) return false;
  mask  = Wire.read();         // 16 premiers boutons
  mask |= Wire.read() << 8;
  mask |= Wire.read() << 16;   // touches spec + urgence
  return true;
}

Les combinaisons (ex : touche 18 + appui stick gauche) déclenchent lenregistrement durgence évoqué dans la page Tools.

5. Profils firmware

void set_callback(controller_callback_t cb) {
  s_callback = std::move(cb);
}

controller_callback_t drone_cb = [](const ControllerState &state) {
  if (!state.rp2040_online) return;
  // Mapper vers un paquet RC Wi-Fi / caméra PTZ
};

Chaque firmware (drone, caméra PTZ, jeux éducatifs) na quà brancher un callback différent. Les scripts Tools permettent de pousser ces firmwares sur demande.

Future schéma module contrôleur

Future illustration : carter Station?S + double gimbal + RP2040.