Aller au contenu principal

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​

CouleurSéquence lumineuseDescription
GelbAffichage/masquage rapideCalibrage initial automatique de la référence du capteur (poser le VerseGrip à l'arrêt sur la table)
Clignotement rapideBouton d'alignement et d'étalonnage enfoncé, processus d'étalonnage lancé
DurableBouton d'alignement et d'étalonnage enfoncé, étalonnage terminé
PourritureAffichage/masquage rapideAdaptateur déconnecté, aucun signal provenant de l'hôte
Clignotement rapideLe bouton marche/arrêt a été enfoncé, la procédure d'arrêt a été lancée
GrünAfficher/MasquerAdaptateur connecté, VerseGrip en mode de transfert de données actif
DurableAdaptateur branché, VerseGrip en mode de transfert de données actif, alimentation USB connectée
WeißAfficher/MasquerAdaptateur connecté, VerseGrip en mode veille/stand-by sans transfert de données
DurableAdaptateur branché, VerseGrip en mode veille/standby sans transfert de données, alimentation USB branchée
OrangeBlitz (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
TurquoiseAfficher/MasquerMode de mise à jour du micrologiciel de l'appareil
(Heller)DurableLes touches utilisateur ont été enfoncées ; la couleur d'affichage actuelle est fixe et plus claire
AusPas de lampeArrêt progressif, mise hors tension
Couleur de l'indicateur de chargeSéquence lumineuseDescription
BlauDurableChargé
Clignotement rapideLe chargement est presque terminé
AusPas de lampeChargement 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).

CouleurSéquence lumineuseDescription
PourritureDurableInitialisation des composants en attente
BlinkenMode veille. Aucun transfert de données
BlauDurableCalibrage initial automatique de la référence du capteur (poser le VerseGrip à l'arrêt sur la table)
GrünBlinkenAdaptateur connecté, VerseGrip en mode de transfert de données actif
AusPas de lampeArrêt progressif, mise hors tension
Couleur de l'indicateur de chargeSéquence lumineuseDescription
BlauDurableChargé
Clignotement rapideLe chargement est presque terminé
AusPas de lampeChargement 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);

}
}