Peripheral myCompass As CompassA @ 0 ' 設定模組編號為0 Dim g_bCalEndEvent As Byte ' 儲存校正完成判斷參數 Dim g_iFX As Integer ' 儲存X軸磁場強度的參數 Dim g_iFY As Integer ' 儲存Y軸磁場強度的參數 Dim g_wAngle As Word ' 儲存偵測角度的參數 Dim g_iDevAngle As Integer ' 儲存偏向角的參數 Sub Main() ' 主程式 g_bCalEndEvent = 0 ' 清除校正判斷參數 Debug CLS Debug "開始校正模組,請水平旋轉模組至少360度以上", CR myCompass.Calibration(2) ' 設定校正時間為20秒 Do Loop Until g_bCalEndEvent=1 ' 偵測到校正完成事件再離開 Debug "校正結束", CR Pause 120 ' 校正完成後,等待模組重啟時間120ms。 myCompass.SetRefreshFreq(4) ' 設定每秒更新偵測值 myCompass.SaveAngle(0, 0) ' 將0度儲存於第0個角度儲存區 myCompass.SetDevAngleLimit(45) ' 設定最大偏向角為45度 myCompass.SetDevAngleNum(0) ' 將第0個儲存區的角度設為基準方位 myCompass.EnableRefreshEvent() ' 啟動更新偵測值事件 myCompass.EnableDevAngleLimitEvent() ' 啟動超出最大偏向角事件 Do ' 無窮迴圈 Loop End Sub Event myCompass.FieldRefreshEvent() ' 更新偵測值事件 myCompass.GetXYField(g_iFX, g_iFY) ' 取得XY軸的磁場值 myCompass.GetAngle(g_wAngle) ' 取得與正北的角度差異值 Debug CSRXY(1, 5), "目前方位: ", %DEC3 g_wAngle, CR Debug CSRXY(1, 6), "X軸磁場強度: ", %DEC6 g_iFX, CR Debug CSRXY(1, 7), "Y軸磁場強度: ", %DEC6 g_iFY, CR End Event Event myCompass.DevAngleLimitEvent() ' 超出最大偏向角事件 myCompass.GetDevAngle(0, g_iDevAngle) ' 取得偏向角的角度 Debug CSRXY(1, 10), "偏向角: ", %DEC4 g_iDevAngle, CR End Event Event myCompass.CalEndEvent() ' 校正完成事件 g_bCalEndEvent = 1 End Event