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 inklinometern för att avgöra stampning, rullning och girning.
Det här exemplet skapar en enkel app som använder lutningssensorn som inmatningsenhet. Vissa 3D-spel kräver en inlinometer som indataenhet. Ett vanligt exempel är en flygsimulator, som kan koppla lutningsmätarens tre axlar (X, Y och Z) till inmatningar för flygplanets höjdroder, skevroder och sidoroder.
- Importerande API:Windows. Devices.Sensors, Inclinometer
Note
Den här artikeln handlar om kod som visar hur man använder en inklinometer. En översikt över inlinometersensorn finns i Sensorer: Inlinometer.
Förutsättningar
Du bör känna till inlinometersensorn och dess användning. Se Sensorer: Inklinometer.
Enheten eller emulatorn som du använder måste stödja en inklinometer.
Exempelkod
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>
När appen körs kan du ändra lutningsvärdena genom att flytta enheten.
Det föregående exemplet visar den kod som du behöver skriva för att integrera indata från en lutningsmätare i din app.
Anslut till sensorn
Anropa metoden GetDefault för att upprätta en anslutning med standardinlinometern.
private Inclinometer? inclinometer;
// ...
inclinometer = Inclinometer.GetDefault();
Du kan också anropa FromIdAsync för att skapa ett Inklinometer objekt från ett DeviceInformation.Id värde. Mer information finns i Räkna upp enheter.
Om ingen lutningssensor identifieras uppdateras statusmeddelandet för att informera användaren.
Ange rapportintervallet
Rapportintervallet anges i sidans konstruktor. 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 = inclinometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
inclinometer.ReportInterval = reportInterval;
Läs sensordata
De nya inklinometerdatan fångas upp 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.
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);
});
}
Relaterade ämnen
Windows developer