Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Saiba como usar o gyrometer para detectar alterações na movimentação do usuário.
Os giroscópios complementam os acelerômetros em controles de jogos. O acelerômetro pode medir o movimento linear enquanto o giro mede a velocidade angular ou o movimento rotacional.
- APIs importantes:Windows.Devices.Sensors, Gyrometer
Note
Este artigo se concentra no código que demonstra como usar um gyrometer. Para obter uma visão geral do sensor gyrometer, consulte Sensores: Gyrometer.
Prerequisites
Você deve estar familiarizado com o sensor de giroscópio e seus usos. Consulte Sensores: Gyrometer.
O dispositivo que você está usando deve dar suporte a um gyrometer.
Código de exemplo
using Microsoft.UI.Dispatching;
using Microsoft.UI.Xaml.Controls;
using Windows.Devices.Sensors;
namespace DevicesDemo.Pages
{
public sealed partial class GyrometerPage : Page
{
private Gyrometer? gyrometer;
public GyrometerPage()
{
InitializeComponent();
// Get the default gyrometer sensor object.
gyrometer = Gyrometer.GetDefault();
if (gyrometer != null)
{
// Establish the report interval.
uint minReportInterval = gyrometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
gyrometer.ReportInterval = reportInterval;
// Assign an event handler for the reading-changed event.
gyrometer.ReadingChanged += Gyrometer_ReadingChanged;
}
else
{
statusBar.Message = "No gyrometer was found.";
statusBar.Severity = InfoBarSeverity.Error;
statusBar.IsOpen = true;
}
}
// This event handler writes the current gyrometer reading to
// the three axis text blocks on the XAML page.
private void Gyrometer_ReadingChanged(Gyrometer sender, GyrometerReadingChangedEventArgs args)
{
DispatcherQueue?.TryEnqueue(DispatcherQueuePriority.Normal, () =>
{
GyrometerReading reading = args.Reading;
txtXAxis.Text = String.Format("{0,5:0.00}", reading.AngularVelocityX);
txtYAxis.Text = String.Format("{0,5:0.00}", reading.AngularVelocityY);
txtZAxis.Text = String.Format("{0,5:0.00}", reading.AngularVelocityZ);
});
}
}
}
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Margin="24">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="44"/>
<RowDefinition Height="44"/>
<RowDefinition Height="44"/>
</Grid.RowDefinitions>
<TextBlock Text="X-axis:" Style="{StaticResource LabelTextBlockStyle}"/>
<TextBlock x:Name="txtXAxis" Grid.Column="1" Text="---"/>
<TextBlock Grid.Row="1" Text="Y-axis:" Style="{StaticResource LabelTextBlockStyle}"/>
<TextBlock x:Name="txtYAxis" Grid.Column="1" Grid.Row="1" Text="---"/>
<TextBlock Grid.Row="2" Text="Z-axis:" Style="{StaticResource LabelTextBlockStyle}"/>
<TextBlock x:Name="txtZAxis" Grid.Column="1" Grid.Row="2" Text="---"/>
</Grid>
<InfoBar x:Name="statusBar" Grid.Row="1"/>
</Grid>
Quando o aplicativo é executado, você pode alterar os valores do gyrometer movendo o dispositivo.
O exemplo anterior demonstra o código essencial que você precisa escrever para integrar a entrada do gyrometer ao seu aplicativo.
Conectar-se ao sensor
Chame o método GetDefault para estabelecer uma conexão com o gyrometer padrão.
private Gyrometer? gyrometer;
// ...
gyrometer = Gyrometer.GetDefault();
Você também pode chamar FromIdAsync para criar um objeto Gyrometer de um valor DeviceInformation.Id. Para obter mais informações, consulte Enumerar dispositivos.
Se nenhum sensor gyrometer for detectado, a mensagem de status será atualizada para informar o usuário.
Definir o intervalo de relatório
O aplicativo estabelece o intervalo de relatório dentro do método MainPage. Esse código recupera o intervalo mínimo com suporte do dispositivo e o compara a um intervalo solicitado de 16 milissegundos (que aproxima uma taxa de atualização de 60 Hz). Se o intervalo mínimo com suporte for maior que o intervalo solicitado, o código definirá o valor como o mínimo. Caso contrário, define o valor para o intervalo solicitado.
uint minReportInterval = gyrometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
gyrometer.ReportInterval = reportInterval;
Ler dados do sensor
Os novos dados do gyrometer são capturados no manipulador de eventos ReadingChanged . Sempre que o driver do sensor recebe novos dados do sensor, ele passa os valores para seu aplicativo usando esse evento. Para este exemplo, esses novos valores são gravados nos blocos de texto encontrados no XAML da página correspondente.
gyrometer.ReadingChanged += Gyrometer_ReadingChanged;
// ...
private void Gyrometer_ReadingChanged(Gyrometer sender, GyrometerReadingChangedEventArgs args)
{
DispatcherQueue?.TryEnqueue(DispatcherQueuePriority.Normal, () =>
{
GyrometerReading reading = args.Reading;
txtXAxis.Text = String.Format("{0,5:0.00}", reading.AngularVelocityX);
txtYAxis.Text = String.Format("{0,5:0.00}", reading.AngularVelocityY);
txtZAxis.Text = String.Format("{0,5:0.00}", reading.AngularVelocityZ);
});
}
Tópicos relacionados:
Windows developer