본문 바로가기

WindowPhone

Windows Phone 7 Accelerometer 사용법

Windows Phone 7 에 보면 Accelerometer 라는 센서가 존재 하는 데요.

이번에는 이 센서를 사용 하는 방법에 대해서 적어 보겠습니다.


우선 필요한 dll을 추가 해야 하는데요. 필요한 dll은 위에 보시는 것처럼


Microsoft.Devieces.Sensors.dll”

입니다.

추가 해주신 dll 안에는 다음과 같은 내용물 들이 들어 있습니다.

 




그리고 간단한 샘플을 보여 드리도록 하겠습니다.

우선 In Xaml

 

    <Grid x:Name="LayoutRoot" Background="Transparent">

        <Rectangle x:Name="rect" Fill="Red" HorizontalAlignment="Center" Height="10" Stroke="Black" VerticalAlignment="Center" Width="10" RenderTransformOrigin="0.5,0.5">

            <Rectangle.RenderTransform>

                <CompositeTransform x:Name="compositeTransform"/>

            </Rectangle.RenderTransform>

        </Rectangle>

    </Grid>

 ** 실행화면

간단히 빨간색 사각형을 하나 추가 해 주었구요. 사각형의 CompositeTransform 에 이름을 줬습니다.

그리고



In CS

        #region Members

        /// <summary>
        /// 현재 Accelerometer가 활성화 중인지 여부
        /// </summary>
        bool _isAccelActive;

        /// <summary>
        /// 읽어 들인 Accelerometer의 값을 저장
        /// </summary>
        private Point _accelReading;

 

        #endregion Members

        #region Constructors

        /// <summary>
        /// 기본 생성자
        /// </summary>
        public MainPage()
        {
            InitializeComponent();
            Init();
            SetAccelerometer();
        }

        #endregion Constructors

        #region Methods

        /// <summary>
        /// 초기화
        /// </summary>
        private void Init()
        {
            _isAccelActive = false;
            _accelReading = new Point();
        }

        /// <summary>
        /// Accelerometer 설정
        /// </summary>
        private void SetAccelerometer()
        {
            Accelerometer accelerometer = new Accelerometer();

            try
            {
                //시작
                accelerometer.Start();

                //활성화
                _isAccelActive = true;
            }
            catch (AccelerometerFailedException ex)
            {
                _isAccelActive = false;
                MessageBox.Show(ex.Message);
            }
            catch (UnauthorizedAccessException ex)
            {
                _isAccelActive = false;
                MessageBox.Show(ex.Message);
            }

            accelerometer.ReadingChanged += new EventHandler<AccelerometerReadingEventArgs>(accelerometer_ReadingChanged);

        }

        #endregion Methods

 

        #region EventHandlers

        void accelerometer_ReadingChanged(object sender, AccelerometerReadingEventArgs e)

        {

            //활성화 상태가 아니라면 쀍
            if (_isAccelActive == false)
                return;

            //값을 저장
            _accelReading.X = e.X;
            _accelReading.Y = e.Y;

            Dispatcher.BeginInvoke(() =>
            {
                //화면의 사각형을 움직여 준다.
                compositeTransform.TranslateX += _accelReading.X * 3;
                compositeTransform.TranslateY -= _accelReading.Y * 3;
            });

        }

        #endregion EventHandlers

 

 

간단하게 Accelerometer을 하나 추가 하고 ReadingChanged 이벤트를 받아서 사각형의 CompositeTransform 을 움직여 주는 코드 입니다.

간단하니 좋네용 :-D