Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Découvrez comment utiliser l’inclinomètre pour déterminer le tangage, le roulis et le lacet.
Cet exemple crée une application simple qui s’appuie sur un inclinomètre en tant qu’appareil d’entrée. Certains jeux 3D nécessitent un inclinomètre en tant qu’appareil d’entrée. Un exemple courant est un simulateur de vol, qui pourrait mapper les trois axes de l’inclinomètre (X, Y et Z) à l’ascenseur, à l’aileron et aux entrées de rudder de l’avion.
- API importantes :Windows.Devices.Sensors, Inclinomètre
Note
Cet article se concentre sur le code qui montre comment utiliser un inclinomètre. Pour obtenir une vue d’ensemble du capteur d’inclinomètre, consultez Capteurs : Inclinomètre.
Prerequisites
Vous devez être familiarisé avec le capteur d’inclinomètre et ses utilisations. Voir Capteurs : Inclinomètre.
L’appareil ou l’émulateur que vous utilisez doit prendre en charge un inclinomètre.
Exemple de code
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>
Lorsque l’application s’exécute, vous pouvez modifier les valeurs d’inclinomètre en déplaçant l’appareil.
L’exemple précédent illustre le code essentiel que vous devez écrire pour intégrer l’entrée inclinomètre dans votre application.
Se connecter au capteur
Appelez la méthode GetDefault pour établir une connexion avec l’inclinomètre par défaut.
private Inclinometer? inclinometer;
// ...
inclinometer = Inclinometer.GetDefault();
Vous pouvez également appeler FromIdAsync pour créer une valeur Inclinomètre à partir d’une valeur DeviceInformation.Id. Pour plus d’informations, consultez Énumérer les appareils.
Si aucun capteur d’inclinomètre n’est détecté, le message d’état est mis à jour pour informer l’utilisateur.
Définir l’intervalle de rapport
L’intervalle de rapport est défini dans le constructeur de la page. Ce code récupère l’intervalle minimal pris en charge par l’appareil et le compare à un intervalle demandé de 16 millisecondes (ce qui correspond approximativement à un taux d’actualisation de 60-Hz). Si l’intervalle minimal pris en charge est supérieur à l’intervalle demandé, le code fixe la valeur à la valeur minimale. Sinon, elle définit la valeur à l’intervalle demandé.
uint minReportInterval = inclinometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
inclinometer.ReportInterval = reportInterval;
Lire les données du capteur
Les nouvelles données d’inclinomètre sont capturées dans le gestionnaire d’événements ReadingChanged . Chaque fois que le pilote de capteur reçoit de nouvelles données du capteur, il transmet les valeurs à votre application à l’aide de cet événement. Pour cet exemple, ces nouvelles valeurs sont écrites dans les blocs de texte trouvés dans le code XAML pour la page correspondante.
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);
});
}
Rubriques connexes
Windows developer