Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Lär dig hur du använder gyrometern för att identifiera ändringar i användarflytten.
Gyrometrar kompletterar accelerometrar i spelkontroller. Accelerometern kan mäta linjär rörelse medan gyrometern mäter vinkelhastighet eller rotationsrörelse.
- Importerande API:Windows. Devices.Sensors, Gyrometer
Note
Den här artikeln fokuserar på kod som visar hur du använder en gyrometer. En översikt över gyrometersensorn finns i Sensorer: Gyrometer.
Förutsättningar
Du bör känna till gyrometersensorn och dess användningsområden. Se Sensorer: Gyrometer.
Enheten som du använder måste ha stöd för en gyrometer.
Exempelkod
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>
När appen körs kan du ändra gyrometervärdena genom att flytta enheten.
I föregående exempel visas den viktiga kod som du behöver skriva för att integrera gyrometerindata i din app.
Anslut till sensorn
Anropa metoden GetDefault för att upprätta en anslutning till standard gyrometern.
private Gyrometer? gyrometer;
// ...
gyrometer = Gyrometer.GetDefault();
Du kan också anropa FromIdAsync för att skapa ett Gyrometer-objekt från ett DeviceInformation.Id värde. Mer information finns i Räkna upp enheter.
Om ingen gyrometersensor identifieras uppdateras statusmeddelandet för att informera användaren.
Ange rapportintervallet
Appen upprättar rapportintervallet inom MainPage-metoden. Den här koden hämtar det minsta intervall som stöds av enheten och jämför det med ett begärt intervall på 16 millisekunder (vilket motsvarar en uppdateringshastighet på 60 Hz). Om det minsta intervall som stöds är större än det begärda intervallet anger koden värdet till minimum. Annars anges värdet till det begärda intervallet.
uint minReportInterval = gyrometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
gyrometer.ReportInterval = reportInterval;
Läs sensordata
De nya gyrometerdata samlas in i händelsehanteraren ReadingChanged . Varje gång sensordrivrutinen tar emot nya data från sensorn skickar den värdena till din app med den här händelsen. I det här exemplet skrivs dessa nya värden till de textblock som finns i XAML för motsvarande sida.
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);
});
}
Relaterade ämnen
Windows developer