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 le gyromètre pour détecter les changements dans le mouvement utilisateur.
Les gyromètres complètent les accéléromètres en tant que contrôleurs de jeu. L’accéléromètre peut mesurer le mouvement linéaire tandis que le gyromètre mesure la vitesse angulaire ou le mouvement de rotation.
- API importantes :Windows.Devices.Sensors, Gyrometer
Note
Cet article se concentre sur le code qui montre comment utiliser un gyromètre. Pour obtenir une vue d’ensemble du capteur gyromètre, consultez Capteurs : Gyromètre.
Prerequisites
Vous devez être familiarisé avec le capteur gyromètre et ses utilisations. Voir Capteurs : Gyromètre.
L’appareil que vous utilisez doit prendre en charge un gyromètre.
Exemple de code
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>
Lorsque l’application s’exécute, vous pouvez modifier les valeurs du gyromè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 gyromètre dans votre application.
Se connecter au capteur
Appelez la méthode GetDefault pour établir une connexion avec le gyromètre par défaut.
private Gyrometer? gyrometer;
// ...
gyrometer = Gyrometer.GetDefault();
Vous pouvez également appeler FromIdAsync pour créer une valeur Gyrometer à partir d’une valeur DeviceInformation.Id. Pour plus d’informations, consultez Énumérer les appareils.
Si aucun capteur gyromètre n’est détecté, le message d’état est mis à jour pour informer l’utilisateur.
Définir l’intervalle de rapport
L’application établit l’intervalle de rapport dans la méthode MainPage. 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 = gyrometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
gyrometer.ReportInterval = reportInterval;
Lire les données du capteur
Les nouvelles données de gyromè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.
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);
});
}
Rubriques connexes
Windows developer