Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Aprenda a usar el inclinómetro para determinar el tono, el rollo y el giro.
En este ejemplo se crea una aplicación sencilla que se basa en un inclinómetro como dispositivo de entrada. Algunos juegos 3D requieren un inclinómetro como dispositivo de entrada. Un ejemplo común es un simulador de vuelo, que podría asignar los tres ejes del inclinómetro (X, Y y Z) al ascensor, el aileron y las entradas de rudder de la aeronave.
- API importantes:Windows.Devices.Sensors, Inclinometer
Note
Este artículo se centra en el código que muestra cómo usar un inclinómetro. Para obtener información general sobre el sensor de inclinómetro, consulte Sensors: Inclinometer.
Prerequisites
Debe estar familiarizado con el sensor de inclinómetro y sus usos. Consulte Sensores: Inclinometer.
El dispositivo o emulador que está usando debe admitir un inclinómetro.
Código de ejemplo
using Microsoft.UI.Dispatching;
using Microsoft.UI.Xaml.Controls;
using Windows.Devices.Sensors;
namespace DevicesDemo.Pages
{
public sealed partial class InclinometerPage : Page
{
private Inclinometer? inclinometer;
public InclinometerPage()
{
InitializeComponent();
// Get the default inclinometer sensor object.
inclinometer = Inclinometer.GetDefault();
if (inclinometer != null)
{
// Establish the report interval.
uint minReportInterval = inclinometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
inclinometer.ReportInterval = reportInterval;
// Assign an event handler for the reading-changed event.
inclinometer.ReadingChanged += Inclinometer_ReadingChanged;
}
else
{
statusBar.Message = "No inclinometer was found.";
statusBar.Severity = InfoBarSeverity.Error;
statusBar.IsOpen = true;
}
}
// This event handler writes the current inclinometer
// reading to the text blocks on the XAML page.
private void Inclinometer_ReadingChanged(Inclinometer sender, InclinometerReadingChangedEventArgs args)
{
DispatcherQueue?.TryEnqueue(DispatcherQueuePriority.Normal, () =>
{
InclinometerReading reading = args.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);
});
}
}
}
<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="Pitch:" Style="{StaticResource LabelTextBlockStyle}"/>
<TextBlock x:Name="txtPitch" Grid.Column="1" Text="---"/>
<TextBlock Grid.Row="1" Text="Roll:" Style="{StaticResource LabelTextBlockStyle}"/>
<TextBlock x:Name="txtRoll" Grid.Column="1" Grid.Row="1" Text="---"/>
<TextBlock Grid.Row="2" Text="Yaw:" Style="{StaticResource LabelTextBlockStyle}"/>
<TextBlock x:Name="txtYaw" Grid.Column="1" Grid.Row="2" Text="---"/>
</Grid>
<InfoBar x:Name="statusBar" Grid.Row="1"/>
</Grid>
Cuando se ejecuta la aplicación, puedes cambiar los valores del inclinómetro moviendo el dispositivo.
En el ejemplo anterior se muestra el código esencial que debe escribir para integrar la entrada del inclinómetro en la aplicación.
Conexión al sensor
Llame al método GetDefault para establecer una conexión con el inclinómetro predeterminado.
private Inclinometer? inclinometer;
// ...
inclinometer = Inclinometer.GetDefault();
También puede llamar a FromIdAsync para crear un objeto Inclinometer a partir de un valor de DeviceInformation.Id. Para obtener más información, consulta Enumerar dispositivos.
Si no se detecta ningún sensor de inclinómetro, el mensaje de estado se actualiza para informar al usuario.
Establecimiento del intervalo de informe
El intervalo de informe se establece dentro del constructor de la página. Este código recupera el intervalo mínimo admitido por el dispositivo y lo compara con un intervalo solicitado de 16 milisegundos (que aproxima una frecuencia de actualización de 60 Hz). Si el intervalo mínimo admitido es mayor que el intervalo solicitado, el código establece el valor en el mínimo. De lo contrario, establece el valor en el intervalo solicitado.
uint minReportInterval = inclinometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
inclinometer.ReportInterval = reportInterval;
Leer datos del sensor
Los nuevos datos del inclinómetro se capturan en el controlador de eventos ReadingChanged . Cada vez que el controlador del sensor recibe nuevos datos del sensor, pasa los valores a la aplicación mediante este evento. En este ejemplo, estos nuevos valores se escriben en los bloques de texto que se encuentran en el XAML de la página correspondiente.
inclinometer.ReadingChanged += Inclinometer_ReadingChanged;
// ...
private void Inclinometer_ReadingChanged(Inclinometer sender, InclinometerReadingChangedEventArgs args)
{
DispatcherQueue?.TryEnqueue(DispatcherQueuePriority.Normal, () =>
{
InclinometerReading reading = args.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);
});
}