此页面有用吗?
您对此内容的反馈非常重要。 请告诉我们您的想法。
更多反馈?
1500 个剩余字符
导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

快速入门:使用测斜仪确定俯仰、滚转和偏航 (C#)

可以使用测斜仪和用 C# 编写的应用确定俯仰、滚转和偏航。

一些三维游戏应用需要测斜仪作为输入设备。一个常见的示例是飞行模拟器,它将测斜仪的三条轴(X、Y 和 Z)映射到飞行器的升降舵、副翼和方向舵输入。

路线图:本主题与其他主题有何关联?请参阅:使用 C# 或 Visual Basic 的 Windows 运行时应用的路线图

目标: 完成此快速入门后,你将了解如何使用测斜仪检测运动中的变化。

先决条件

你应当熟悉 XAML、Visual C# 和事件。

你使用的设备或仿真器必须支持测斜仪。

完成所需时间: 20 分钟.

说明

1. 打开 Microsoft Visual Studio

打开 Visual Studio 的一个实例。

2. 创建新项目

创建新项目,从“Visual C#/应用商店应用”项目类型中选择“空白应用程序”

3. 替换 C# 代码

打开你项目的 MainPage.xaml.cs 文件,用下列内容替换现有的代码。



using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

using Windows.UI.Core;
using Windows.Devices.Sensors;


namespace App1
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        private Inclinometer _inclinometer;

        // This event handler writes the current inclinometer reading to 
        // the three text blocks on the app's main page.

        private async void ReadingChanged(object sender, InclinometerReadingChangedEventArgs e)
        {
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                InclinometerReading reading = e.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);
            });
        }

        public MainPage()
        {
            this.InitializeComponent();
            _inclinometer = Inclinometer.GetDefault();
 

            if (_inclinometer != null)
            {
                // Establish the report interval for all scenarios
                uint minReportInterval = _inclinometer.MinimumReportInterval;
                uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
                _inclinometer.ReportInterval = reportInterval;

                // Establish the event handler
                _inclinometer.ReadingChanged += new TypedEventHandler<Inclinometer, InclinometerReadingChangedEventArgs>(ReadingChanged);
            }
        }
    }
}


你将需要用你给予项目的名称为上面的代码片段中的命名空间重命名。例如,如果你创建了一个名为“InclinometerCS”的项目,则使用 namespace InclinometerCS 替换 namespace App1

4. 替换 XAML 代码

打开文件 MainPage.xaml 并使用以下 XML 替换原始内容。


<Page
    x:Class="App1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App1"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid x:Name="LayoutRoot" Background="#FF0C0C0C">
        <TextBlock HorizontalAlignment="Left" Height="21" Margin="0,8,0,0" TextWrapping="Wrap" Text="Pitch: " VerticalAlignment="Top" Width="45" Foreground="#FFF9F4F4"/>
        <TextBlock x:Name="txtPitch" HorizontalAlignment="Left" Height="21" Margin="59,8,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="71" Foreground="#FFFDF9F9"/>
        <TextBlock HorizontalAlignment="Left" Height="23" Margin="0,29,0,0" TextWrapping="Wrap" Text="Roll:" VerticalAlignment="Top" Width="55" Foreground="#FFF7F1F1"/>
        <TextBlock x:Name="txtRoll" HorizontalAlignment="Left" Height="23" Margin="59,29,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="50" Foreground="#FFFCF9F9"/>
        <TextBlock HorizontalAlignment="Left" Height="19" Margin="0,56,0,0" TextWrapping="Wrap" Text="Yaw:" VerticalAlignment="Top" Width="55" Foreground="#FFF7F3F3"/>
        <TextBlock x:Name="txtYaw" HorizontalAlignment="Left" Height="19" Margin="55,56,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="54" Foreground="#FFF6F2F2"/>

    </Grid>
</Page>

你将需要用你的应用的命名空间替换上面的代码片段中类名称的第一部分。例如,如果你创建了一个名为“InclinometerCS”的项目,则使用 x:Class="InclinometerCS.MainPage" 替换 x:Class="App1.MainPage"。你还应当使用 xmlns:local="using:InclinometerCS" 替换 xmlns:local="using:App1"

5. 生成、部署并运行应用

按 F5 或选择“调试”>“启动调试”来构建、部署并运行应用。

应用运行后,你可以通过迁移设备或使用仿真器工具更改加速计的值。

6. 停止应用

  1. 按 ALT+Tab 切换到 Visual Studio。
  2. 按 Shift+F5 或选择“调试”>“停止调试”来停止应用。

摘要

前面的示例演示了,只需要写入极少的代码即可将测斜仪输入集成到你的应用。

该应用在 MainPage 方法中建立了与默认测斜仪的连接。


_inclinometer = Inclinometer.GetDefault();

该应用在 MainPage 方法中建立了报告间隔。此代码检索设备支持的最短间隔,并将它与所请求的间隔 16 毫秒(大约 60-Hz 刷新率)进行比较。如果支持的最短间隔大于所请求的间隔,则此代码会将报告间隔设置为所支持的最短间隔。否则,它会将报告间隔设置为所请求的间隔。


uint minReportInterval = _accelerometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
_accelerometer.ReportInterval = reportInterval;

ReadingChanged 方法中捕获新的测斜仪数据。每次传感器驱动程序从传感器接收到新数据时,它都将使用此事件处理程序将此值传递到你的应用中。应用在下行中注册此事件处理程序。


_inclinometer.ReadingChanged += new TypedEventHandler<Inclinometer, 
InclinometerReadingChangedEventArgs>(ReadingChanged);

这些新值写入项目的 XAML 中找到的 TextBlock 中。


<TextBlock HorizontalAlignment="Left" Height="21" Margin="0,8,0,0" TextWrapping="Wrap" Text="Pitch: " VerticalAlignment="Top" Width="45" Foreground="#FFF9F4F4"/>
 <TextBlock x:Name="txtPitch" HorizontalAlignment="Left" Height="21" Margin="59,8,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="71" Foreground="#FFFDF9F9"/>
 <TextBlock HorizontalAlignment="Left" Height="23" Margin="0,29,0,0" TextWrapping="Wrap" Text="Roll:" VerticalAlignment="Top" Width="55" Foreground="#FFF7F1F1"/>
 <TextBlock x:Name="txtRoll" HorizontalAlignment="Left" Height="23" Margin="59,29,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="50" Foreground="#FFFCF9F9"/>
 <TextBlock HorizontalAlignment="Left" Height="19" Margin="0,56,0,0" TextWrapping="Wrap" Text="Yaw:" VerticalAlignment="Top" Width="55" Foreground="#FFF7F3F3"/>
 <TextBlock x:Name="txtYaw" HorizontalAlignment="Left" Height="19" Margin="55,56,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="54" Foreground="#FFF6F2F2"/>


相关主题

Inclinometer class
测斜仪示例
创建使用 C#、C++ 或 VB 的应用的路线图

 

 

Microsoft 正在进行一项网上调查,以了解您对 MSDN 网站的意见。 如果您选择参加,我们将会在您离开 MSDN 网站时向您显示该网上调查。

是否要参加?
显示:
© 2015 Microsoft