Utiliser l’inclinomètreUse the inclinometer

API importantesImportant APIs

ExempleSample

Découvrez comment utiliser l’inclinomètre pour déterminer le tangage, le roulis et le lacet.Learn how to use the inclinometer to determine pitch, roll, and yaw.

Certaines jeux 3D requièrent un inclinomètre en tant que périphérique d’entrée.Some 3-D games require an inclinometer as an input device. Le simulateur de vol en est un exemple courant, qui mappe les trois axes de l’inclinomètre (x, y et z) aux entrées de la gouverne de profondeur, de l’aileron et du volet de dérive.One common example is the flight simulator, which maps the three axes of the inclinometer (X, Y, and Z) to the elevator, aileron, and rudder inputs of the aircraft.

PrérequisPrerequisites

Vous devez maîtriser le langage XAML (Extensible Application Markup Language), Microsoft Visual C# et les événements.You should be familiar with Extensible Application Markup Language (XAML), Microsoft Visual C#, and events.

L’appareil ou émulateur que vous utilisez doit prendre en charge un inclinomètre.The device or emulator that you're using must support a inclinometer.

Créer une application simple d’inclinomètreCreate a simple inclinometer app

Cette section se divise en deux sous-sections.This section is divided into two subsections. La première sous-section vous permet d’accéder aux étapes nécessaires pour créer de bout en bout une application simple d’inclinomètre.The first subsection will take you through the steps necessary to create a simple inclinometer application from scratch. La sous-section suivante décrit l’application que vous venez de créer.The following subsection explains the app you have just created.

InstructionsInstructions

  • Créez un projet en choisissant une Application vide (Windows universel) dans les modèles de projet Visual C#.Create a new project, choosing a Blank App (Universal Windows) from the Visual C# project templates.

  • Ouvrez le fichier MainPage.xaml.cs de votre projet et remplacez le code existant par ce qui suit.Open your project's MainPage.xaml.cs file and replace the existing code with the following.

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using Windows.Foundation;
    using Windows.Foundation.Collections;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Controls.Primitives;
    using Windows.UI.Xaml.Data;
    using Windows.UI.Xaml.Input;
    using Windows.UI.Xaml.Media;
    using Windows.UI.Xaml.Navigation;

    using Windows.UI.Core;
    using Windows.Devices.Sensors;


    namespace App1
    {
        /// <summary>
        /// An empty page that can be used on its own or navigated to within a Frame.
        /// </summary>
        public sealed partial class MainPage : Page
        {
            private Inclinometer _inclinometer;

            // This event handler writes the current inclinometer reading to
            // the three text blocks on the app' s main page.

            private async void ReadingChanged(object sender, InclinometerReadingChangedEventArgs e)
            {
                await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    InclinometerReading reading = e.Reading;
                    txtPitch.Text = String.Format("{0,5:0.00}", reading.PitchDegrees);
                    txtRoll.Text = String.Format("{0,5:0.00}", reading.RollDegrees);
                    txtYaw.Text = String.Format("{0,5:0.00}", reading.YawDegrees);
                });
            }

            public MainPage()
            {
                this.InitializeComponent();
                _inclinometer = Inclinometer.GetDefault();


                if (_inclinometer != null)
                {
                    // Establish the report interval for all scenarios
                    uint minReportInterval = _inclinometer.MinimumReportInterval;
                    uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
                    _inclinometer.ReportInterval = reportInterval;

                    // Establish the event handler
                    _inclinometer.ReadingChanged += new TypedEventHandler<Inclinometer, InclinometerReadingChangedEventArgs>(ReadingChanged);
                }
            }
        }
    }

Vous devez remplacer le nom de l’espace de noms dans l’extrait de code précédent par le nom que vous avez donné à votre projet.You'll need to rename the namespace in the previous snippet with the name you gave your project. Par exemple, si vous avez créé un projet nommé InclinometerCS, vous devez remplacer namespace App1 par namespace InclinometerCS.For example, if you created a project named InclinometerCS, you'd replace namespace App1 with namespace InclinometerCS.

  • Ouvrez le fichier MainPage.xaml et remplacez le contenu d’origine par le code XML suivant.Open the file MainPage.xaml and replace the original contents with the following XML.
        <Page
        x:Class="App1.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:App1"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">

        <Grid x:Name="LayoutRoot" Background="#FF0C0C0C">
            <TextBlock HorizontalAlignment="Left" Height="21" Margin="0,8,0,0" TextWrapping="Wrap" Text="Pitch: " VerticalAlignment="Top" Width="45" Foreground="#FFF9F4F4"/>
            <TextBlock x:Name="txtPitch" HorizontalAlignment="Left" Height="21" Margin="59,8,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="71" Foreground="#FFFDF9F9"/>
            <TextBlock HorizontalAlignment="Left" Height="23" Margin="0,29,0,0" TextWrapping="Wrap" Text="Roll:" VerticalAlignment="Top" Width="55" Foreground="#FFF7F1F1"/>
            <TextBlock x:Name="txtRoll" HorizontalAlignment="Left" Height="23" Margin="59,29,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="50" Foreground="#FFFCF9F9"/>
            <TextBlock HorizontalAlignment="Left" Height="19" Margin="0,56,0,0" TextWrapping="Wrap" Text="Yaw:" VerticalAlignment="Top" Width="55" Foreground="#FFF7F3F3"/>
            <TextBlock x:Name="txtYaw" HorizontalAlignment="Left" Height="19" Margin="55,56,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="54" Foreground="#FFF6F2F2"/>

        </Grid>
    </Page>

Vous devez remplacer la première partie du nom de la classe dans l’extrait de code précédent par l’espace de noms de votre application.You'll need to replace the first part of the class name in the previous snippet with the namespace of your app. Par exemple, si vous avez créé un projet nommé InclinometerCS, vous devez remplacer x:Class="App1.MainPage" par x:Class="InclinometerCS.MainPage".For example, if you created a project named InclinometerCS, you'd replace x:Class="App1.MainPage" with x:Class="InclinometerCS.MainPage". Vous devez aussi remplacer xmlns:local="using:App1" par xmlns:local="using:InclinometerCS".You should also replace xmlns:local="using:App1" with xmlns:local="using:InclinometerCS".

  • Appuyez sur F5 ou sélectionnez Déboguer > Démarrer le débogage pour générer, déployer et exécuter l’application.Press F5 or select Debug > Start Debugging to build, deploy, and run the app.

Une fois l’application en cours d’exécution, vous pouvez modifier les valeurs de l’inclinomètre en déplaçant l’appareil ou à l’aide des outils de l’émulateur.Once the app is running, you can change the inclinometer values by moving the device or using the emulator tools.

  • Arrêtez l’application en retournant dans Visual Studio et en appuyant sur Maj + F5 ou sélectionnez Déboguer > arrêter le débogage pour arrêter l’application.Stop the app by returning to Visual Studio and pressing Shift+F5 or select Debug > Stop Debugging to stop the app.

ExplicationExplanation

L’exemple précédent démontre la faible quantité de code que vous devrez écrire afin d’intégrer l’entrée de l’inclinomètre dans votre application.The previous example demonstrates how little code you'll need to write in order to integrate inclinometer input in your app.

L’application établit une connexion avec l’inclinomètre par défaut dans la méthode MainPage.The app establishes a connection with the default inclinometer in the MainPage method.

_inclinometer = Inclinometer.GetDefault();

L’application établit l’intervalle de rapport dans la méthode MainPage.The app establishes the report interval within the MainPage method. Le code suivant récupère l’intervalle minimal pris en charge par l’appareil et le compare à un intervalle demandé de 16 millisecondes (ce qui représente une fréquence de rafraîchissement de 60 Hz).This code retrieves the minimum interval supported by the device and compares it to a requested interval of 16 milliseconds (which approximates a 60-Hz refresh rate). Si l’intervalle pris en charge minimum est supérieur à l’intervalle demandé, le code définit la valeur sur l’intervalle minimum.If the minimum supported interval is greater than the requested interval, the code sets the value to the minimum. Sinon, il définit la valeur sur l’intervalle demandé.Otherwise, it sets the value to the requested interval.

uint minReportInterval = _inclinometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
_inclinometer.ReportInterval = reportInterval;

Les nouvelles données de l’inclinomètre sont capturées dans la méthode ReadingChanged.The new inclinometer data is captured in the ReadingChanged method. Chaque fois que le pilote du capteur reçoit de nouvelles données du capteur, il transmet les valeurs à votre application à l’aide de ce gestionnaire d’événements.Each time the sensor driver receives new data from the sensor, it passes the values to your app using this event handler. L’application inscrit ce gestionnaire d’événements sur la ligne suivante.The app registers this event handler on the following line.

_inclinometer.ReadingChanged += new TypedEventHandler<Inclinometer,
InclinometerReadingChangedEventArgs>(ReadingChanged);

Ces nouvelles valeurs sont écrites dans les TextBlocks identifiés dans le code XAML du projet.These new values are written to the TextBlocks found in the project's XAML.

<TextBlock HorizontalAlignment="Left" Height="21" Margin="0,8,0,0" TextWrapping="Wrap" Text="Pitch: " VerticalAlignment="Top" Width="45" Foreground="#FFF9F4F4"/>
 <TextBlock x:Name="txtPitch" HorizontalAlignment="Left" Height="21" Margin="59,8,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="71" Foreground="#FFFDF9F9"/>
 <TextBlock HorizontalAlignment="Left" Height="23" Margin="0,29,0,0" TextWrapping="Wrap" Text="Roll:" VerticalAlignment="Top" Width="55" Foreground="#FFF7F1F1"/>
 <TextBlock x:Name="txtRoll" HorizontalAlignment="Left" Height="23" Margin="59,29,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="50" Foreground="#FFFCF9F9"/>
 <TextBlock HorizontalAlignment="Left" Height="19" Margin="0,56,0,0" TextWrapping="Wrap" Text="Yaw:" VerticalAlignment="Top" Width="55" Foreground="#FFF7F3F3"/>
 <TextBlock x:Name="txtYaw" HorizontalAlignment="Left" Height="19" Margin="55,56,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="54" Foreground="#FFF6F2F2"/>