光センサーを使うには

光センサー 光センサーとは、デバイスの周囲の環境光を取得し、どれだけデバイスに光がそそがれているかを取得できます。 たいていのデバイスはフロントカメラの横に環境光センサーがついています。なのでここに手をかざすと環境光センサーは低い値をしめすことになります。     LightSensor 環境光を取得するにはLightSensorクラスを使用します。 まず、このようなXAML UIを用意します。 <Grid> <TextBlock x:Name=”text_light” FontSize=”24″ /> </Grid>   コンストラクタでLightSensorを初期化し、ReportIntervalには環境光センサーの取得間隔を設定します。 ReadingChangedイベントではIlluminanceInLuxプロパティを取得することで環境光センサーの値を取得することができます。 LightSensor sensor = LightSensor.GetDefault(); sensor.ReportInterval = sensor.MinimumReportInterval; sensor.ReadingChanged += async(s, ee) => { await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { text_light.Text = ee.Reading.IlluminanceInLux.ToString(“F1”); }); };  

単純なデバイスの方向を検知するには

単純なデバイスの方向 デバイスの傾きを取得するなら、加速度センサーを利用できますが、SimpleOrientationクラスを使用すると、デバイスが縦向きなのか、横向きなのか、画面が上なのか、画面が下なのかなど、単純なデバイスの向きを簡単に取得することができます。   取得できる種類は以下の6つです。 NotRotated デバイス回転なし FaceUp 画面が上方向   FaceDown 画面が下方向   Rotated90DegreesCounterclockwise デバイスが反時計回りに90度回転   Rotated180DegreesCounterclockwise デバイスが反時計回りに180度回転   Rotated270DegreesCounterclockwise デバイスが反時計回りに270度回転   SimpleOrientation 単純なデバイスの方向を取得するには、SimpleOrientationクラスを使います。 このようなXAML UIを用意します。 <Grid> <TextBlock x:Name=”text_orientation” FontSize=”24″ /> </Grid>   コンストラクタでSimpleOrientationクラスを初期化し、デバイスの傾きが変わると、OrientationChangedイベントが発生します。 Orientationプロパティを取得することでSimpleOrientation列挙体の値を取得することができます。 SimpleOrientationSensor sensor = SimpleOrientationSensor.GetDefault(); sensor.OrientationChanged += async(s, ee) => { await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { switch(ee.Orientation) { case SimpleOrientation.Faceup: text_orientation.Text =…

傾斜計を利用するには

傾斜計 傾斜計とは、加速度センサーと同じようにデバイスの傾きを取得することができるセンサーです。 加速度センサーはとりうる値が0.0~1.0なので直感的ではありません。 傾斜計はX軸回転、Y軸回転、Z軸回転をそれぞれPitch、Roll、Yawとして表し、その回転角度を取得できるので非常に直感的です。 このような座標軸で考えた時、     Pitch値はこのような値をとります。   Roll値はこのような値をとります。   Yaw値はこのような値をとります。     Inclinometer 傾斜計を使うにはInclinometerクラスを使います。   このようなXAMLUIを作ります。 <Grid> <StackPanel> <TextBlock x:Name=”text_pitch” FontSize=”24″ /> <TextBlock x:Name=”text_roll” FontSize=”24″ /> <TextBlock x:Name=”text_yaw” FontSize=”24″ /> </StackPanel> </Grid>   コンストラクタでinclinometerクラスを初期化し、ReportIntervalプロパティ値でセンサーの取得時間間隔を設定します。 ReadingChangedイベントで値を取得します。 このイベントは別スレッドから呼ばれるため、Dispatcher.RunAsyncでUIスレッドで実行結果を表示します。 Inclinometer meter = Inclinometer.GetDefault(); meter.ReportInterval = meter.MinimumReportInterval *10; meter.ReadingChanged += async(s, ee) => { await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, ()…

方位センサーを利用するには

方位センサー 方位センサー(またはコンパス)は、タブレットがどの方位を向いているかを取得することができます。 取得できる値は、タブレットの上方が北からどれだけ回転しているかの角度の値です。   Compass 方位センサーを利用するには、Compassクラスを使用します。 ReportIntervalに取得間隔を設定し、 ReadingChangedイベントで方位角度を取得することができます。   まず、このようなUIをつくります。 <Grid> <TextBlock x:Name=”text_compass” HorizontalAlignment=”Left” Margin=”53,121,0,0″ TextWrapping=”Wrap” Text=”TextBlock” VerticalAlignment=”Top” FontSize=”24″/> </Grid>   コンストラクタではCompassクラスを初期化し、ReadingChangedイベントで値を取得、表示します。 Compass compass = Compass.GetDefault(); compass.ReportInterval = compass.MinimumReportInterval * 50; compass.ReadingChanged += async(s, ee) => { await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { text_compass.Text = string.Format(“北から{0}度”, ee.Reading.HeadingMagneticNorth.ToString(“F0”)); }); };  

ジャイロメーターを利用するには

ジャイロメーター ジャイロメーターとは、デバイスの角速度を取得するセンサーです。 基本的な概念や座標軸は加速度センサーと変わりませんが、ジャイロセンサーは角速度を測るものなので デバイスを回転させた瞬間は値は大きくなりますが、しばらくすると値は0.0に収束します。     上の座標軸で考えると、デバイスを回転させた瞬間に回転した座標軸の値が大きくなり、回転していない座標軸は0.0のままです。 その後、徐々にすべての座標軸の値が0.0になります。   Gyrometer ジャイロメーターを使用するには、Gyrometerクラスを利用します。   まず、このようなXAMLUIをつくります。 <Grid> <StackPanel> <TextBlock x:Name=”text_x” FontSize=”24″ /> <TextBlock x:Name=”text_y” FontSize=”24″ /> <TextBlock x:Name=”text_z” FontSize=”24″ /> </StackPanel> </Grid>   コンストラクタでGyrometerクラスを初期化し、ReportIntervalプロパティでジャイロメーターから値を取得する間隔を設定します。 MinimumIntervalプロパティではデバイスのジャイロセンサー取得間隔の最小値を取得することができます。   ReadingChangedイベントでジャイロメーターから値を取得できますが、これは別スレッドで呼ばれるのでDispatcher.RunAsyncでUIスレッドから呼ぶ必要があります。 Gyrometer gyrometer = Gyrometer.GetDefault(); gyrometer.ReportInterval = gyrometer.MinimumReportInterval * 50; gyrometer.ReadingChanged += async(s, ee) => { await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { text_x.Text…