A blog on novel user interfaces, mobile applications, pervasive and ubiquitous computing. I use the blog as a note pad ;-)

Monday, 11 April 2011

WP7 Tutorial - part 5: Orientation and Acceleration - X,Y,Z

Detecting gestures, orientations, and movement can be realized with the accelerometer. The accelerometer is a sensor that measures the acceleration in 3 dimensions (X, Y, and Z). If the device is not moved the accelerations measure are the gravity forces in each direction. If the device is accelerated the measured results are a combination of the acceleration and the gravity.

A typical exercise for understanding the accelerometer is to create a bubble level (a tool to measure if something is horizontal or vertical - e.g. for hanging pictures on the wall). You probably want to freshen up on arctan2 - at least I needed ;-)

using System;using System.Windows;using Microsoft.Phone.Controls;using Microsoft.Devices.Sensors;// A simple example to read the accelerometer and display the values// In order to make it work you have to add the refercerence to // Microsoft.Devices.Sensors to your project. To do this right-click// in the Solution Explorer on References and than choose add Reference// in the dialog then select Microsoft.Devices.Sensors// Albrecht Schmidt, University of Stuttgart// for a more comprehensive example see: // http://msdn.microsoft.com/en-us/library/ff431810(v=vs.92).aspx// http://msdn.microsoft.com/en-us/library/ff431744(v=vs.92).aspx// and page 80ff, C. Petzold, Programming Windows Phone 7
namespace Accl_X_Y_Z
{
public partial class MainPage : PhoneApplicationPage
{
Accelerometer accelerometer;
public MainPage(){
InitializeComponent();// create a new instance
accelerometer = new Accelerometer();// register a callback function for when values change
accelerometer.ReadingChanged += new EventHandler<AccelerometerReadingEventArgs>(accelerometer_ReadingChanged);// start the accelerometer
accelerometer.Start();}void accelerometer_ReadingChanged(object sender, AccelerometerReadingEventArgs e){// required as from here the textBlocks cannot be accessed
Deployment.Current.Dispatcher.BeginInvoke(()=> ChangeUI(e));}void ChangeUI(AccelerometerReadingEventArgs e){// show the values on the screen
textBlock1.Text ="X: "+ e.X.ToString("0.000");
textBlock2.Text ="Y: "+ e.Y.ToString("0.000");
textBlock3.Text ="Z: "+ e.Z.ToString("0.000");}}}