Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Informazioni su come usare il giroscopio per rilevare le modifiche apportate allo spostamento dell'utente.
I giroscopi completano gli accelerometri nei controller di gioco. L'accelerometro può misurare il movimento lineare mentre il giroscopio misura la velocità angolare o il movimento rotazionale.
- APIimportanti:Windows. Devices.Sensors, Gyrometer
Note
Questo articolo è incentrato sul codice che illustra come usare un giroscopio. Per una panoramica del sensore giroscopio, vedi Sensori: Giroscopio.
Prerequisiti
Dovresti avere familiarità con il sensore giroscopio e i suoi usi. Vedi Sensori: Giroscopio.
Il dispositivo in uso deve supportare un giroscopio.
Esempio di codice
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 l'app viene eseguita, è possibile modificare i valori del giroscopio spostando il dispositivo.
L'esempio precedente illustra il codice essenziale da scrivere per integrare l'input del giroscopio nella tua app.
Connettersi al sensore
Chiamare il metodo GetDefault per stabilire una connessione con il giroscopio predefinito.
private Gyrometer? gyrometer;
// ...
gyrometer = Gyrometer.GetDefault();
È anche possibile chiamare FromIdAsync per creare un valore Gyrometer da un valore DeviceInformation.Id. Per altre info, vedi Enumerare i dispositivi.
Se non viene rilevato alcun sensore giroscopio, il messaggio di stato viene aggiornato per informare l'utente.
Impostare l'intervallo del report
L'app stabilisce l'intervallo di report all'interno del metodo MainPage. Questo codice recupera l'intervallo minimo supportato dal dispositivo e lo confronta con un intervallo richiesto di 16 millisecondi (che approssima una frequenza di aggiornamento a 60 Hz). Se l'intervallo minimo supportato è maggiore dell'intervallo richiesto, il codice imposta il valore sul valore minimo. In caso contrario, imposta il valore sull'intervallo richiesto.
uint minReportInterval = gyrometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
gyrometer.ReportInterval = reportInterval;
Leggere i dati dei sensori
I nuovi dati del giroscopio vengono acquisiti nel gestore eventi ReadingChanged . Ogni volta che il driver del sensore riceve nuovi dati dal sensore, passa i valori all'app usando questo evento. Per questo esempio, questi nuovi valori vengono scritti nei blocchi di testo trovati nel codice XAML per la pagina corrispondente.
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);
});
}