import Tabs depuis '@theme/Tabs' ; import TabItem depuis '@theme/TabItem' ;
Premiers pas avec le stylet VerseGrip
VerseGrips ajoute des fonctionnalités de détection d'orientation à Inverse3, Inverse3X et MinVerse . Cet article décrit la procédure de configuration du stylet VerseGrip ainsi que ses fonctionnalités.
Stylet VerseGrip
Le stylet VerseGrip utilise une technologie sans fil propriétaire à haut débit pour assurer la détection de l'orientation ainsi que les entrées et sorties (E/S) dans la main. Il est polyvalent et conçu pour une grande variété d'applications.
Parmi les principales fonctionnalités, on peut citer :
- 2 touches de saisie,
- 1 touche d'étalonnage,
- 1 bouton Marche/Veille
- 2 LED d'état
- Port de recharge USB-C
- Communication par radio avec une fréquence maximale de 1 kHz
- 10 à 12 heures d'autonomie de la batterie
- Il est possible de coupler jusqu'à 8 stylets VerseGrip sur un même bracelet à l'aide d'un dongle.

Service client
Pour toute question ou demande concernant votre appareil ou son fonctionnement, veuillez contacter notre équipe d'assistance. Le stylet VerseGrip intègre une technologie sans fil complexe et exclusive. L'ouverture de l'appareil entraîne l'annulation de votre garantie et peut le rendre inutilisable. Afin d'éviter des délais d'expédition prolongés et des réparations coûteuses, N'OUVREZ PAS L'APPAREIL.
Configuration et étalonnage du stylet VerseGrip
Cette section décrit les étapes à suivre pour brancher la clé, allumer le VerseGrip Stylus et procéder au calibrage.
Aménagement
- Branchez la clé USB sur un port USB de votre ordinateur.
- Posez la manette sur une surface plane où elle ne risque pas de glisser, les boutons vers le haut et le connecteur sphérique tourné vers l'écran.
Mise en marche et étalonnage
- Appuyez une fois sur le bouton Marche/Arrêt. Le voyant d'état s'allume d'abord en rouge, puis passe au jaune, ce qui indique que l'IMU de l'appareil effectue un auto-étalonnage.
- Une fois l'auto-étalonnage terminé, le stylet se connecte à l'ordinateur.
- Dès que le stylet est correctement connecté et transmet des données sans fil, le voyant d'état clignote en vert.
- Si la batterie est presque à plat, le VerseGrip Stylus s'éteint automatiquement toutes les 2 minutes ; veuillez le recharger immédiatement.
Réétalonnage
Le processus d'étalonnage réinitialise le système de coordonnées de VerseGrip, de sorte que l'orientation dans laquelle l'appareil est tenu pendant l'étalonnage devient le nouvel axe de référence.
- Pour recalibrer, placez le stylet dans la position que vous souhaitez recalibrer, puis appuyez sur le bouton de calibrage et maintenez-le enfoncé pendant trois secondes ou jusqu’à ce que l’alignement change dans la simulation.
Vous trouverez ci-dessous une démonstration comparant le comportement de l'appareil à l'état non calibré et à l'état calibré. Pour nos démonstrations, le VerseGrip doit être maintenu dans la configuration indiquée avant le calibrage.

Mode veille et mise hors tension
- Appuyez une fois sur le bouton Marche/Arrêt pour revenir en mode veille. Le voyant d'état commence à clignoter en blanc et la transmission des données s'interrompt.
- Pour éteindre le stylet VerseGrip, maintenez le bouton marche/arrêt enfoncé pendant 5 secondes, puis relâchez-le. Une fois le bouton relâché, le voyant d'état devrait s'éteindre et l'écran ne devrait plus afficher quoi que ce soit. Le transfert de données est alors interrompu.
Chargé
- Branchez le stylet VerseGrip à une source d'alimentation via le port de recharge USB-C.
- Le voyant d'état de charge reste allumé en bleu lorsque l'appareil est branché sur le secteur, et s'éteint lorsque la batterie est complètement chargée.
- Si le stylet est éteint lorsque vous le branchez sur le secteur, il s'allume automatiquement.
AVERTISSEMENT : pour les appareils VerseGrip Stylus livrés entre août et décembre 2024, ne laissez pas la batterie se décharger complètement. Une fois la batterie déchargée, il se peut qu’elle ne puisse plus se recharger. Si cela se produit, le VerseGrip Stylus continuera de fonctionner tant qu’il sera branché. Contactez le service d’assistance de Haply pour obtenir le fichier de mise à jour du micrologiciel permettant de résoudre ce problème.
États et voyants lumineux
| Couleur | Séquence lumineuse | Description |
|---|---|---|
| Gelb | Affichage/masquage rapide | Calibrage initial automatique de la référence du capteur (poser le VerseGrip à l'arrêt sur la table) |
| Clignotement rapide | Bouton d'alignement et d'étalonnage enfoncé, processus d'étalonnage lancé | |
| Durable | Bouton d'alignement et d'étalonnage enfoncé, étalonnage terminé | |
| Pourriture | Affichage/masquage rapide | Adaptateur déconnecté, aucun signal provenant de l'hôte |
| Clignotement rapide | Le bouton marche/arrêt a été enfoncé, la procédure d'arrêt a été lancée | |
| Grün | Afficher/Masquer | Adaptateur connecté, VerseGrip en mode de transfert de données actif |
| Durable | Adaptateur branché, VerseGrip en mode de transfert de données actif, alimentation USB connectée | |
| Weiß | Afficher/Masquer | Adaptateur connecté, VerseGrip en mode veille/stand-by sans transfert de données |
| Durable | Adaptateur branché, VerseGrip en mode veille/standby sans transfert de données, alimentation USB branchée | |
| Orange | Blitz (imbriqué) | Avertissement de niveau de batterie faible, notification imbriquée dans l'état actuel |
| Doppelblitz (imbriqué) | Avertissement en cas de niveau de batterie critique, notification imbriquée dans l'état actuel | |
| Turquoise | Afficher/Masquer | Mode de mise à jour du micrologiciel de l'appareil |
| (Heller) | Durable | Les touches utilisateur ont été enfoncées ; la couleur d'affichage actuelle est fixe et plus claire |
| Aus | Pas de lampe | Arrêt progressif, mise hors tension |
| Couleur de l'indicateur de charge | Séquence lumineuse | Description |
|---|---|---|
| Blau | Durable | Chargé |
| Clignotement rapide | Le chargement est presque terminé | |
| Aus | Pas de lampe | Chargement terminé |
Anciens états et voyants lumineux
Les voyants d'état suivants correspondent à des états et des couleurs antérieurs, présents dans les versions précédentes du VerseGrip Stylus (micrologiciel 1.10 et antérieur).
| Couleur | Séquence lumineuse | Description |
|---|---|---|
| Pourriture | Durable | Initialisation des composants en attente |
| Blinken | Mode veille. Aucun transfert de données | |
| Blau | Durable | Calibrage initial automatique de la référence du capteur (poser le VerseGrip à l'arrêt sur la table) |
| Grün | Blinken | Adaptateur connecté, VerseGrip en mode de transfert de données actif |
| Aus | Pas de lampe | Arrêt progressif, mise hors tension |
| Couleur de l'indicateur de charge | Séquence lumineuse | Description |
|---|---|---|
| Blau | Durable | Chargé |
| Clignotement rapide | Le chargement est presque terminé | |
| Aus | Pas de lampe | Chargement terminé |
Exemple de code
Voici un exemple simple illustrant comment utiliser le stylet VerseGrip en C++.
#include <external/libhv.h>
#include <nlohmann/json.hpp>
#include <chrono>
#include <cstdio>
#include <string>
using namespace hv;
using json = nlohmann::json;
// Procedure to get the first detected and available Wired VerseGrip Stylus device id
std::string get_first_verse_grip_device_id(const json &data) {
const auto& vgs = data["wireless_verse_grip"];
if (vgs.empty()) {
return "";
}
return vgs.items().begin().key();
}
int main() {
const auto print_delay = std::chrono::milliseconds(100);
auto current = std::chrono::high_resolution_clock::now();
bool first_message = true;
std::string device_id;
WebSocketClient ws;
ws.onmessage = [&](const std::string &msg) {
json data = json::parse(msg);
if (first_message) {
first_message = false;
const std::string first_id = get_first_verse_grip_device_id(data);
if (first_id.empty()) {
printf("no Wireless VerseGrip found.\n");
ws.close();
return;
}
device_id = first_id;
}
if (device_id.empty() || !data["wireless_verse_grip"].contains(device_id)) {
return;
}
const auto now = std::chrono::high_resolution_clock::now();
if (std::chrono::high_resolution_clock::now() > current + print_delay) {
current = now;
const json state = data["wireless_verse_grip"][device_id];
printf("Rotation : { x:%f, y:%f, z:%f, w:%f }, Hall:%i, Button : [%d, %d, %d], Battery: {%f}\n",
state["orientation"]["x"].get<float>(),
state["orientation"]["y"].get<float>(),
state["orientation"]["z"].get<float>(),
state["orientation"]["w"].get<float>(),
state["hall"].get<int8_t>(),
state["buttons"]["a"].get<bool>(),
state["buttons"]["b"].get<bool>(),
state["buttons"]["c"].get<bool>(),
state["battery_level"].get<float>());
}
};
ws.open("ws://localhost:10000");
printf("Press ENTER to stop...\n\n");
while (std::cin.get() != '\n') {
}
if (ws.isConnected()) {
ws.close();
}
return 0;
}
#include <string.h>
#include <chrono>
#include <iostream>
#include <iterator>
#include <string>
#include <thread>
#include "HardwareAPI.h"
int main(int argc, char* argv[])
{
char* portName;
if (argc < 2)
{
std::printf("Usage: %s <port>\n", argv[0]);
}
else
{
#if defined(_WIN32) || defined(_WIN64)
portName = _strdup(argv[1]); // argv1;
#endif
#if defined(__linux__)
portName = strdup(argv[1]); // argv1;
#endif
}
Haply::HardwareAPI::IO::SerialStream serial_stream(portName);
Haply::HardwareAPI::Devices::Handle handle(&serial_stream);
while (true)
{
Haply::HardwareAPI::Devices::Handle::VersegripStatusResponse data;
data = handle.GetVersegripStatus();
std::printf(
"device_id: %d battery_level: %f quaternion: %f %f %f %f buttons: "
"%d error_flags: %d\n",
data.device_id, data.battery_level, data.quaternion[0],
data.quaternion[1], data.quaternion[2], data.quaternion[3],
data.buttons, data.error_flag);
}
}