Usar o inclinômetroUse the inclinometer

APIs importantesImportant APIs

AmostraSample

Saiba como usar o inclinômetro para determinar a rotação sobre o eixo x, a rolagem e a rotação sobre o eixo y.Learn how to use the inclinometer to determine pitch, roll, and yaw.

Alguns jogos 3-D requerem um inclinômetro como dispositivo de entrada.Some 3-D games require an inclinometer as an input device. Um exemplo comum é o simulador de voo, que mapeia os eixos do inclinômetro (X, Y e Z) para as entradas de elevador, aileron e leme da aeronave.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é-requisitosPrerequisites

Você deve estar familiarizado com a linguagem XAML, o Microsoft Visual C# e eventos.You should be familiar with Extensible Application Markup Language (XAML), Microsoft Visual C#, and events.

O dispositivo ou emulador que você está usando deve ter suporte para um inclinômetro.The device or emulator that you're using must support a inclinometer.

Criar um aplicativo simples de inclinômetroCreate a simple inclinometer app

Esta seção está dividida em duas subseções.This section is divided into two subsections. A primeira subseção guiará você pelas etapas necessárias para criar um aplicativo simples de inclinômetro do zero.The first subsection will take you through the steps necessary to create a simple inclinometer application from scratch. A subseção seguintes explica o aplicativo que você acabou de criar.The following subsection explains the app you have just created.

InstruçõesInstructions

  • Crie um novo projeto. Escolha um Aplicativo (Universal do Windows) em Branco nos modelos de projetos do Visual C#.Create a new project, choosing a Blank App (Universal Windows) from the Visual C# project templates.

  • Abra o arquivo MainPage.xaml.cs do projeto e substitua o código existente pelo exemplo abaixo.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);
                }
            }
        }
    }

Você precisará substituir o nome do namespace no trecho anterior pelo nome que você deu a seu projeto.You'll need to rename the namespace in the previous snippet with the name you gave your project. Por exemplo, se você criou um projeto denominado InclinometerCS, pode substituir namespace App1 por namespace InclinometerCS.For example, if you created a project named InclinometerCS, you'd replace namespace App1 with namespace InclinometerCS.

  • Abra o arquivo MainPage.xaml e substitua o conteúdo original pelo XML abaixo.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>

Você precisará substituir a primeira parte do nome da classe no trecho anterior pelo namespace de seu aplicativo.You'll need to replace the first part of the class name in the previous snippet with the namespace of your app. Por exemplo, se você criou um projeto denominado InclinometerCS, pode substituir x:Class="App1.MainPage" por 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". Você também deve substituir xmlns:local="using:App1" por xmlns:local="using:InclinometerCS".You should also replace xmlns:local="using:App1" with xmlns:local="using:InclinometerCS".

  • Pressione F5 ou selecione depurar > Iniciar Depuração para compilar, implantar e executar o aplicativo.Press F5 or select Debug > Start Debugging to build, deploy, and run the app.

Quando o aplicativo estiver em execução, você poderá alterar os valores do inclinômetro. Basta mover o dispositivo ou usar as ferramentas do emulador.Once the app is running, you can change the inclinometer values by moving the device or using the emulator tools.

  • Pare o aplicativo retornando ao Visual Studio e pressionando Shift + F5 ou selecione depurar > parar depuração para parar o aplicativo.Stop the app by returning to Visual Studio and pressing Shift+F5 or select Debug > Stop Debugging to stop the app.

ExplicaçãoExplanation

O exemplo anterior demonstra quão pouco código você precisará para escrever a fim de integrar a entrada do girômetro em seu aplicativo.The previous example demonstrates how little code you'll need to write in order to integrate inclinometer input in your app.

O aplicativo estabelece uma conexão com o inclinômetro padrão no método MainPage.The app establishes a connection with the default inclinometer in the MainPage method.

_inclinometer = Inclinometer.GetDefault();

O aplicativo estabelece o intervalo de relatório MainPage.The app establishes the report interval within the MainPage method. Esse código recupera o intervalo mínimo com suporte do dispositivo e o compara com um intervalo solicitado de 16 milissegundos (aproximadamente a uma taxa de atualização 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). Se o intervalo mínimo suportado for maior que o intervalo solicitado, o código definirá valor mínimo.If the minimum supported interval is greater than the requested interval, the code sets the value to the minimum. Do contrário, ele definirá o valor para o intervalo solicitado.Otherwise, it sets the value to the requested interval.

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

Os novos dados do inclinômetro são capturados no método ReadingChanged.The new inclinometer data is captured in the ReadingChanged method. Toda vez que o driver do sensor recebe novos dados do sensor, ele transmite o valor para seu aplicativo usando este manipulador de eventos.Each time the sensor driver receives new data from the sensor, it passes the values to your app using this event handler. O aplicativo registra este manipulador de eventos na seguinte linha.The app registers this event handler on the following line.

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

Esses novos valores são gravados nos TextBlocks encontrados no XAML do projeto.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"/>