Menu

A

|

A

Astuce : Inclinomètre (Windows 8.1)

Dans cette astuce nous allons découvrir l’inclinomètre, qui permet de connaitre comme son nom l’indique, le degré d’inclinaison d’un périphérique sur ses trois axes.

tdsk1

Contrairement à d’autre senseur, l’inclinomètre n’a pas besoin d’une déclaration spéciale dans le manifeste de l’application.

La classe qui gère ce senseur est la classe statique « Inclinometer », qui regroupe ce qu’il faut pour gérer votre senseur. Contrairement au « Geolocator » ce senseur est toujours actif et travail en tâche de fond. Pour récupérer l’instance de l’inclinomètre, il faut passer par la fonction « GetDefault() » qui vous retourne l’instance courante du senseur. Si vous ne possédez pas de senseur, cette fonction vous retournera NULL, vérifiez donc bien l’instance avant de faire quoi que ce soit. Une fois l’instance retournée.

Voici les propriétés à connaitre :

  • MinimumReportInterval : Cela retourne l’intervalle minimum supporté par l’inclinomètre pour la mise à jour des positions. C’est une propriété en lecture, elle est a titre informative, elle est exprimée en milliseconde.
  • ReportInterval : C’est ici que l’on spécifie l’intervalle désiré (en milliseconde) entre deux notifications de changement d’inclinaison. Quand une tablette bouge, les notifications sont très rapide, cela permet de temporiser ces notifications si vous exécutez un traitement lourd entre chaque. Par contre, saisir un intervalle inférieur au « MinimumReportInterval » sera ignoré par l’API et se positionnera sur son minimum.

Voici ce que cela donne pour l’initialisation :

// Récupération de l'instance
inclinometer = Inclinometer.GetDefault();

// On test si l'inclinomètre existe
if ( inclinometer == null)
{
    throw(new Exception("Inclinometer not aviable."));
}
else
{
    // Spécification de l'intervalle
    double interval = 50;

    inclinometer.ReportInterval = interval < inclinometer.MinimumReportInterval ? inclinometer.MinimumReportInterval : interval;
}

Pour récupérer les changements d’inclinaisons il y a deux solutions, soit on attend que la classe nous l’indique (ce sera donc avec un abonnement à un événement) ou manuellement quand vous le souhaitez (donc avec une fonction).

Méthode automatique (Event) :

C’est la façon la plus simple d’être informé d’un changement d’inclinaison, en s’abonnant à l’événement « ReadingChanged » vous êtes notifié du changement :

// On se branche sur l'événement
inclinometer.ReadingChanged += OnInclinometerReadingChanged;

// Définition de la fonction pour l'événement
private void OnInclinometerReadingChanged(Inclinometer sender, InclinometerReadingChangedEventArgs args)
{
    // Récupération de la lecture du senseur
    InclinometerReading read = args.Reading;

    // Données les plus courantes
    float pitch = read.PitchDegrees;
    float roll = read.RollDegrees;
    float yaw = read.YawDegrees;

    // Faire ici le traitement que vous voulez
}

Attention toutefois, cet événement ne s’exécute pas dans le ThreadUI, si vous devez affecter ces valeurs dans l’interface, n’oubliez pas de le faire dans le ThreadUI :

// On se branche sur l'événement
inclinometer.ReadingChanged += OnInclinometerReadingChanged;

// Définition de la fonction pour l'événement
private void OnInclinometerReadingChanged(Inclinometer sender, InclinometerReadingChangedEventArgs args)
{
    // On fait le traitement dans le ThreadUI
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
    // Faire ici le traitement que vous voulez
    }
}

Voilà pour la méthode automatique.

Méthode manuelle (fonction) :

Dans ce cas précis, c’est nous qui allons demander à un moment que nous déterminons, les dernières valeurs captées par le senseur. Pour se faire on fait appel à la fonction « GetCurrentReading() » :

// Récupération des données
InclinometerReading read = inclinometer.GetCurrentReading();

// Données les plus courantes
float pitch = read.PitchDegrees;
float roll = read.RollDegrees;
float yaw = read.YawDegrees;

C’est une autre façon qui peut avoir beaucoup d’avantage (c’est un peu en fonction de l’utilisation que vous aurez du senseur).

Voilà donc ce qu’il faut savoir pour bien commencer avec le senseur d’inclinaison.

Astuce : Inclinomètre (Windows 8.1)

Dans cette astuce nous allons découvrir l’inclinomètre, qui permet de connaitre comme son nom l’indique, le degré d’inclinaison d’un périphérique sur ses trois axes.

tdsk1

Contrairement à d’autre senseur, l’inclinomètre n’a pas besoin d’une déclaration spéciale dans le manifeste de l’application.

La classe qui gère ce senseur est la classe statique « Inclinometer », qui regroupe ce qu’il faut pour gérer votre senseur. Contrairement au « Geolocator » ce senseur est toujours actif et travail en tâche de fond. Pour récupérer l’instance de l’inclinomètre, il faut passer par la fonction « GetDefault() » qui vous retourne l’instance courante du senseur. Si vous ne possédez pas de senseur, cette fonction vous retournera NULL, vérifiez donc bien l’instance avant de faire quoi que ce soit. Une fois l’instance retournée.

Voici les propriétés à connaitre :

  • MinimumReportInterval : Cela retourne l’intervalle minimum supporté par l’inclinomètre pour la mise à jour des positions. C’est une propriété en lecture, elle est a titre informative, elle est exprimée en milliseconde.
  • ReportInterval : C’est ici que l’on spécifie l’intervalle désiré (en milliseconde) entre deux notifications de changement d’inclinaison. Quand une tablette bouge, les notifications sont très rapide, cela permet de temporiser ces notifications si vous exécutez un traitement lourd entre chaque. Par contre, saisir un intervalle inférieur au « MinimumReportInterval » sera ignoré par l’API et se positionnera sur son minimum.

Voici ce que cela donne pour l’initialisation :

// Récupération de l'instance
inclinometer = Inclinometer.GetDefault();

// On test si l'inclinomètre existe
if ( inclinometer == null)
{
    throw(new Exception("Inclinometer not aviable."));
}
else
{
    // Spécification de l'intervalle
    double interval = 50;

    inclinometer.ReportInterval = interval < inclinometer.MinimumReportInterval ? inclinometer.MinimumReportInterval : interval;
}

Pour récupérer les changements d’inclinaisons il y a deux solutions, soit on attend que la classe nous l’indique (ce sera donc avec un abonnement à un événement) ou manuellement quand vous le souhaitez (donc avec une fonction).

Méthode automatique (Event) :

C’est la façon la plus simple d’être informé d’un changement d’inclinaison, en s’abonnant à l’événement « ReadingChanged » vous êtes notifié du changement :

// On se branche sur l'événement
inclinometer.ReadingChanged += OnInclinometerReadingChanged;

// Définition de la fonction pour l'événement
private void OnInclinometerReadingChanged(Inclinometer sender, InclinometerReadingChangedEventArgs args)
{
    // Récupération de la lecture du senseur
    InclinometerReading read = args.Reading;

    // Données les plus courantes
    float pitch = read.PitchDegrees;
    float roll = read.RollDegrees;
    float yaw = read.YawDegrees;

    // Faire ici le traitement que vous voulez
}

Attention toutefois, cet événement ne s’exécute pas dans le ThreadUI, si vous devez affecter ces valeurs dans l’interface, n’oubliez pas de le faire dans le ThreadUI :

// On se branche sur l'événement
inclinometer.ReadingChanged += OnInclinometerReadingChanged;

// Définition de la fonction pour l'événement
private void OnInclinometerReadingChanged(Inclinometer sender, InclinometerReadingChangedEventArgs args)
{
    // On fait le traitement dans le ThreadUI
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
    // Faire ici le traitement que vous voulez
    }
}

Voilà pour la méthode automatique.

Méthode manuelle (fonction) :

Dans ce cas précis, c’est nous qui allons demander à un moment que nous déterminons, les dernières valeurs captées par le senseur. Pour se faire on fait appel à la fonction « GetCurrentReading() » :

// Récupération des données
InclinometerReading read = inclinometer.GetCurrentReading();

// Données les plus courantes
float pitch = read.PitchDegrees;
float roll = read.RollDegrees;
float yaw = read.YawDegrees;

C’est une autre façon qui peut avoir beaucoup d’avantage (c’est un peu en fonction de l’utilisation que vous aurez du senseur).

Voilà donc ce qu’il faut savoir pour bien commencer avec le senseur d’inclinaison.

No Comments

Comments Are Closed