C# Windows Phone 開發,使用 Gyroscope 陀螺儀加速度感應器,實作【搖一搖】功能 ! !

  • 2487
  • 0
  • C#
  • 2015-06-10

一般我們在開發App時可能會使用到感應器,不管是在類似【搖一搖】或【遊戲】的功能上,我們必須會透過Gyroscope 陀螺儀加速度感應器來幫我們偵測使用著手持智慧型手機的行為,以便做出相對應的回饋或處理,但是要如何取得Gyroscope 陀螺儀加速度感應器的資料呢?!

本篇文章將引導您實作實作Gyroscope 陀螺儀加速度感應器。

一般我們在開發App時可能會使用到感應器,不管是在類似【搖一搖】或【遊戲】的功能上,我們必須會透過Gyroscope 陀螺儀加速度感應器來幫我們偵測使用著手持智慧型手機的行為,以便做出相對應的回饋或處理,但是要如何取得Gyroscope 陀螺儀加速度感應器的資料呢?!

 

本篇文章將引導您實作實作Gyroscope 陀螺儀加速度感應器。

 

陀螺儀(英文:gyroscope),是一種用來感測與維持方向的裝置,基於角動量守恆的理論設計出來的。陀螺儀主要是由一個位於軸心且可旋轉的轉子構成。 陀螺儀一旦開始旋轉,由於轉子的角動量,陀螺儀有抗拒方向改變的趨向。陀螺儀多用於導航定位等系統。

參閱 : 陀螺儀

 

 

而透過C#來撰寫Windows Phone 我們應該這樣做,

 

首先必須開啟感應器的權限

 

在專案底下看到WMAppmanifest.xml 將其開啟

 

image

 

接著在【功能】的頁籤裡將【ID_CAP_SENSORS】勾選

因為我們會用到感應器的功能

 

image

 

接著在【需求】的頁籤中將【ID_REQ_GYROSCOOPE】勾選,

若您的APP沒有GYROSCOPE陀螺儀加速度感應器也可以運作的話,建議您可以不用勾選,

勾選這裡是必須使用到GYROSCOOPE才要打勾,

若不勾選的話可以在APP內做相對應的處理。

 

image

 

再來就是在程式碼的部分,說明一一在程式碼內提供了

 

   1:  public void Initial() {
   2:      //宣告一個GyroScope的變數
   3:      Gyroscope gyroscope;
   4:      //判斷裝置使否有支援GyroScope陀螺儀加速度感應器
   5:      if (!Gyroscope.IsSupported)
   6:      {
   7:          //若不支援的要告訴使用者,您不可以使用部分的哪些功能。
   8:          //若沒有明確指出的話很容易在審核的時候被退件。
   9:          MessageBox.Show("您的裝置太廢了,沒有GyroScope陀螺儀加速度感應器");
  10:      }
  11:      else
  12:      {
  13:          //宣告一個新的Gyroscope
  14:          gyroscope = new Gyroscope();
  15:          //設定Gyroscope的更新時間,單位為毫秒。
  16:          //數字設定太小沒有太大意義反而會增加手機的負擔(耗電)。
  17:          //所以適度就好。
  18:          gyroscope.TimeBetweenUpdates += TimeSpan.FromMilliseconds(20);
  19:          //當GyroScope陀螺儀加速度感應器,值改變的時候觸發事件。
  20:          gyroscope.CurrentValueChanged += gyroscope_CurrentValueChanged;
  21:   
  22:          //啟動GyroScope陀螺儀加速度感應器。
  23:          //若不啟動的話不會觸發CurrentValueChanged事件,等於沒做,所以要加一下。
  24:          gyroscope.Start();
  25:   
  26:          //不用的時候要停止,不然應該會蠻耗電的
  27:          //如果你不想獲得評語類似"垃圾中的垃圾"最好不用的時候停止!!
  28:          //gyroscope.Stop();
  29:                      
  30:      }
  31:  }
  32:   
  33:  private void gyroscope_CurrentValueChanged(object sender, SensorReadingEventArgs<GyroscopeReading> e)
  34:  {
  35:      //X軸的加速度
  36:      float SensorX = e.SensorReading.RotationRate.X;
  37:      //Y軸的加速度
  38:      float SensorY = e.SensorReading.RotationRate.Y;
  39:      //Z軸的加速度
  40:      float SensorZ = e.SensorReading.RotationRate.Z;
  41:   
  42:      //實作搖一搖功能
  43:      if (SensorX > 0.5 || SensorY > 0.5 || SensorZ > 0.5) { 
  44:          //使用者搖一搖了~~
  45:          //看你想做什麼事
  46:          MessageBox.Show("其實搖一搖沒什麼用,你被騙了 哈哈");
  47:          //搖完之後不用了就停止
  48:          ((Gyroscope)sender).Stop();
  49:      }
  50:  }

 

需要注意的是 :

若手機在靜止不動的理想狀況下三軸的加速度會為0,因為靜止不動加速度亦為0,

但是天意難為,在手機裡的GyroScope陀螺儀加速度感應器會因為環境或其他因素有些微的變化,

如地震等外在因素,而GyroScope陀螺儀加速度感應器的靈敏度也和不同廠商所開發出來的晶片而有所不同,

總而言之我是要表達很難為理想狀態的0,所以我們可能要判斷當值小於多少時視為靜止,而不是 值==0 時為靜止,

反之當手機是在晃動的狀態下數值才會有明顯的感變,這時我們就可以延伸實作【搖一搖】的功能。

 

如此一來我們便學會了實作Gyroscope 陀螺儀加速度感應器功能。

 

 

 

References : Gyroscope Class

 

文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝
轉載請註明出處,並且附上本篇文章網址 !  感謝。

SUKI

HOLIESTAR