Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dowiedz się, jak używać inklinometru do określania pochylenia, przechylenia i odchylenia.
W tym przykładzie utworzono prostą aplikację, która opiera się na inklinometrze jako urządzeniu wejściowym. Niektóre gry 3-W wymagają inklinometru jako urządzenia wejściowego. Jednym z typowych przykładów jest symulator lotu, który może mapować trzy osie inklinometru (X, Y i Z) do windy, aileronu i steru wejściowego samolotu.
- Ważne interfejsy API:Windows.Devices.Sensors, inklinometr
Note
Ten artykuł koncentruje się na kodzie, który pokazuje, jak używać inklinometru. Aby zapoznać się z omówieniem czujnika inklinometru, zobacz Czujniki: Inclinometer.
Prerequisites
Należy zapoznać się z czujnikiem inklinometru i jego zastosowaniami. Zobacz Czujniki: Inclinometer.
Urządzenie lub emulator, którego używasz, musi obsługiwać inklinometr.
Przykładowy kod
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>
Po uruchomieniu aplikacji można zmienić wartości inklinometru, przenosząc urządzenie.
W poprzednim przykładzie pokazano niezbędny kod, który należy napisać, aby zintegrować dane wejściowe inklinometru z aplikacją.
Nawiązywanie połączenia z czujnikiem
Wywołaj metodę GetDefault , aby nawiązać połączenie z domyślnym inklinometrem.
private Inclinometer? inclinometer;
// ...
inclinometer = Inclinometer.GetDefault();
Możesz również wywołać FromIdAsync, aby utworzyć obiekt Inclinometer na podstawie wartości DeviceInformation.Id. Aby uzyskać więcej informacji, zobacz Enumerate devices (Wyliczanie urządzeń).
Jeśli nie zostanie wykryty czujnik przechyłu, komunikat o statusie zostanie zaktualizowany, aby poinformować użytkownika.
Ustawianie interwału raportu
Interwał raportu jest ustawiany w konstruktorze strony. Ten kod pobiera minimalny interwał obsługiwany przez urządzenie i porównuje go z żądanym interwałem wynoszącym 16 milisekund (w przybliżeniu szybkością odświeżania 60-Hz). Jeśli minimalny obsługiwany interwał jest większy niż żądany interwał, kod ustawia wartość na minimalną. W przeciwnym razie ustawia wartość na żądany interwał.
uint minReportInterval = inclinometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
inclinometer.ReportInterval = reportInterval;
Odczytywanie danych z czujnika
Nowe dane inklinometru są przechwytywane w procedurze obsługi zdarzeń ReadingChanged . Za każdym razem, gdy sterownik czujnika odbiera nowe dane z czujnika, przekazuje wartości do aplikacji przy użyciu tego zdarzenia. W tym przykładzie te nowe wartości są zapisywane w blokach tekstowych znajdujących się w języku XAML odpowiedniej strony.
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);
});
}