birtemp
سه شنبه 02 آبان 1391, 00:52 صبح
مقدمه
accelerometer یا شتاب سنج قطعه ای است در اسمارتفون های امروزی که می تواند جهت و بزرگی نیروی وارده بر آنها را گزارش دهد. این نیرو در امتداد سه بعد نشان داده می شود: X افقی – Y عمودی – Z عمود بر سطح. مقادیر هر بُعد می تواند بین دو عدد -۲ الی ۲ متغیر باشد. هنگامی که اسمارتفون روی یک سطح صاف باشد، مقادیر X:0 – Y:0 و Z:0 خواهد بود.
تمامی گوشی های ویندوز فون دارای شتاب سنج هستند. هر گاه دستگاه یک جنبشی بکند، می توان از مقادیر X – Y و Z کمک گرفت و شدت نیروی حرکت همراه با جهت حرکت را بدست آورد.
مبانی شتاب سنج
فریمورک ویندوز فون در قالب کلاس Accelerometer پشتیبانی قدرتمندی از شتاب سنج می کند. این کلاس در فضای نامی Microsoft.Devices.Sensors در اسمبلی Microsoft.Devices.Sensors قرار دارد.
زمانیکه اسمارتفون تکان بخورد، رویداد ReadingChanged قابل اجرا است.
مراحل ساخت نرم افزار کار با شتاب سنج
مرحله ۱: یک پروژه با نام AccelerometerDemo از نوع Windows Phone Application زبان سی شارپ در نرم افزار ویژوال استودیو ایجاد کنید.
http://www.prolearn-vs.com/wp-content/uploads/2012/08/Accelerometer-image001.jpg (http://www.prolearn-vs.com/wp-content/uploads/2012/08/Accelerometer-image001.jpg)
اگر پنجره New Windows Phone Application نمایان شد، گزینه Windows Phone OS 7.1 را انتخاب کنید.
http://www.prolearn-vs.com/wp-content/uploads/2012/08/Accelerometer-image002.png (http://www.prolearn-vs.com/wp-content/uploads/2012/08/Accelerometer-image002.png)
مرحله ۲: از طریق راست کلیک کردن روی پروژه (http://www.prolearn-vs.com) خود در قسمت Solution Explorer گزینه Add a reference را انتخاب کرده و در زبانه .NET گزینه Microsoft.Devices.Sensors.dll را انتخاب کنید.
http://www.prolearn-vs.com/wp-content/uploads/2012/08/Accelerometer-image003.png (http://www.prolearn-vs.com/wp-content/uploads/2012/08/Accelerometer-image003.png)
مرحله ۳: فایل MainPage.xaml.cs را باز کرده و فضای نامی “Microsoft.Device.Sensors” را به آن اضافه کنید:
using Microsoft.Devices.Sensors;
مرحله ۴: سه عدد کنترل Textbox و دو عدد کنترل Button به فرم MainPage.xaml اضافه کنید.
نام Buttonها را “Start” و “Stop” بگذارید.
کلاس accelerometer را به عنوان متغیر در صفحه MainPage.xaml.cs اضافه کنید در قسمت constructor آنرا مقداردهی اولیه کنید:
public partial class MainPage : PhoneApplicationPage
{
Accelerometer myAccelerometer;
// Constructor
public MainPage()
{
InitializeComponent();
myAccelerometer = new Accelerometer();
}
}
مرحله ۵: بر روی دکمه Start دابل کلیک کرده و کد زیر را در آن جایگذاری کنید (مانند نمونه زیر):
private void buttonStart_Click(object sender, RoutedEventArgs e)
{
myAccelerometer.Start();
}
مرحله ۶: حالا بر روی دکمه Stop دابل کلیک کرده و کد زیر را در آن جایگذاری کنید (مانند نمونه زیر):
private void buttonStop_Click(object sender, RoutedEventArgs e)
{
myAccelerometer.Stop();
}
مرحله ۷: با کلیک روی دکمه Start یک event handler برای رویداد ReadingChanged ایجاد می گردد و با کلیک روی دکمه Stop عکس عمل Start اتفاق می افتد.
private void buttonStart_Click(object sender, RoutedEventArgs e)
{
myAccelerometer.Start();
myAccelerometer.ReadingChanged += myAccelerometer_ReadingChanged;
}
private void buttonStop_Click(object sender, RoutedEventArgs e)
{
myAccelerometer.Stop();
myAccelerometer.ReadingChanged -= myAccelerometer_ReadingChanged;
}
مرحله ۸: برای نگهداری X – Y – Z ، مقادیر را از شتاب سنج دریافت کرده و آنها را در Textboxها قرار می دهیم.
private void buttonStart_Click(object sender, RoutedEventArgs e)
{
myAccelerometer.Start();
myAccelerometer.ReadingChanged += myAccelerometer_ReadingChanged;
}
مرحله ۹: در مرحله آخر هم برنامه را تست کنید. کد کامل برنامه را نیز می توانید در زیر مشاهده می کنید:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using Microsoft.Devices.Sensors;
namespace AccelerometerDemo
{
public partial class MainPage : PhoneApplicationPage
{
Accelerometer myAccelerometer;
// Constructor
public MainPage()
{
InitializeComponent();
myAccelerometer = new Accelerometer();
}
private void buttonStart_Click(object sender, RoutedEventArgs e)
{
myAccelerometer.Start();
myAccelerometer.ReadingChanged += myAccelerometer_ReadingChanged;
}
void myAccelerometer_ReadingChanged(object sender, AccelerometerReadingEventArgs e)
{
this.Dispatcher.BeginInvoke(delegate()
{
textBoxX.Text = e.X.ToString();
textBoxY.Text = e.Y.ToString();
textBlockZ.Text = e.Z.ToString();
}
);
}
private void buttonStop_Click(object sender, RoutedEventArgs e)
{
myAccelerometer.Stop();
myAccelerometer.ReadingChanged -= myAccelerometer_ReadingChanged;
}
}
}
هنگام اجرای پروژه با کلیک روی دکمه Start خواهید دید که جعبه های متن با هر حرکت شبیه ساز ویندوز فون به صورت خودکار بروزرسانی می شوند.
اگر مشکلی در تست برنامه پیش آمد می توانید از سورس کدی که در زیر قرار داده شده استفاده کنید!
سورس کد (http://www.prolearn-vs.com/wp-content/uploads/2012/08/AccelerometerDemo-www.prolearn-vs.com_.zip)
منبع: www.prolearn-vs.com (http://www.prolearn-vs.com)
accelerometer یا شتاب سنج قطعه ای است در اسمارتفون های امروزی که می تواند جهت و بزرگی نیروی وارده بر آنها را گزارش دهد. این نیرو در امتداد سه بعد نشان داده می شود: X افقی – Y عمودی – Z عمود بر سطح. مقادیر هر بُعد می تواند بین دو عدد -۲ الی ۲ متغیر باشد. هنگامی که اسمارتفون روی یک سطح صاف باشد، مقادیر X:0 – Y:0 و Z:0 خواهد بود.
تمامی گوشی های ویندوز فون دارای شتاب سنج هستند. هر گاه دستگاه یک جنبشی بکند، می توان از مقادیر X – Y و Z کمک گرفت و شدت نیروی حرکت همراه با جهت حرکت را بدست آورد.
مبانی شتاب سنج
فریمورک ویندوز فون در قالب کلاس Accelerometer پشتیبانی قدرتمندی از شتاب سنج می کند. این کلاس در فضای نامی Microsoft.Devices.Sensors در اسمبلی Microsoft.Devices.Sensors قرار دارد.
زمانیکه اسمارتفون تکان بخورد، رویداد ReadingChanged قابل اجرا است.
مراحل ساخت نرم افزار کار با شتاب سنج
مرحله ۱: یک پروژه با نام AccelerometerDemo از نوع Windows Phone Application زبان سی شارپ در نرم افزار ویژوال استودیو ایجاد کنید.
http://www.prolearn-vs.com/wp-content/uploads/2012/08/Accelerometer-image001.jpg (http://www.prolearn-vs.com/wp-content/uploads/2012/08/Accelerometer-image001.jpg)
اگر پنجره New Windows Phone Application نمایان شد، گزینه Windows Phone OS 7.1 را انتخاب کنید.
http://www.prolearn-vs.com/wp-content/uploads/2012/08/Accelerometer-image002.png (http://www.prolearn-vs.com/wp-content/uploads/2012/08/Accelerometer-image002.png)
مرحله ۲: از طریق راست کلیک کردن روی پروژه (http://www.prolearn-vs.com) خود در قسمت Solution Explorer گزینه Add a reference را انتخاب کرده و در زبانه .NET گزینه Microsoft.Devices.Sensors.dll را انتخاب کنید.
http://www.prolearn-vs.com/wp-content/uploads/2012/08/Accelerometer-image003.png (http://www.prolearn-vs.com/wp-content/uploads/2012/08/Accelerometer-image003.png)
مرحله ۳: فایل MainPage.xaml.cs را باز کرده و فضای نامی “Microsoft.Device.Sensors” را به آن اضافه کنید:
using Microsoft.Devices.Sensors;
مرحله ۴: سه عدد کنترل Textbox و دو عدد کنترل Button به فرم MainPage.xaml اضافه کنید.
نام Buttonها را “Start” و “Stop” بگذارید.
کلاس accelerometer را به عنوان متغیر در صفحه MainPage.xaml.cs اضافه کنید در قسمت constructor آنرا مقداردهی اولیه کنید:
public partial class MainPage : PhoneApplicationPage
{
Accelerometer myAccelerometer;
// Constructor
public MainPage()
{
InitializeComponent();
myAccelerometer = new Accelerometer();
}
}
مرحله ۵: بر روی دکمه Start دابل کلیک کرده و کد زیر را در آن جایگذاری کنید (مانند نمونه زیر):
private void buttonStart_Click(object sender, RoutedEventArgs e)
{
myAccelerometer.Start();
}
مرحله ۶: حالا بر روی دکمه Stop دابل کلیک کرده و کد زیر را در آن جایگذاری کنید (مانند نمونه زیر):
private void buttonStop_Click(object sender, RoutedEventArgs e)
{
myAccelerometer.Stop();
}
مرحله ۷: با کلیک روی دکمه Start یک event handler برای رویداد ReadingChanged ایجاد می گردد و با کلیک روی دکمه Stop عکس عمل Start اتفاق می افتد.
private void buttonStart_Click(object sender, RoutedEventArgs e)
{
myAccelerometer.Start();
myAccelerometer.ReadingChanged += myAccelerometer_ReadingChanged;
}
private void buttonStop_Click(object sender, RoutedEventArgs e)
{
myAccelerometer.Stop();
myAccelerometer.ReadingChanged -= myAccelerometer_ReadingChanged;
}
مرحله ۸: برای نگهداری X – Y – Z ، مقادیر را از شتاب سنج دریافت کرده و آنها را در Textboxها قرار می دهیم.
private void buttonStart_Click(object sender, RoutedEventArgs e)
{
myAccelerometer.Start();
myAccelerometer.ReadingChanged += myAccelerometer_ReadingChanged;
}
مرحله ۹: در مرحله آخر هم برنامه را تست کنید. کد کامل برنامه را نیز می توانید در زیر مشاهده می کنید:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using Microsoft.Devices.Sensors;
namespace AccelerometerDemo
{
public partial class MainPage : PhoneApplicationPage
{
Accelerometer myAccelerometer;
// Constructor
public MainPage()
{
InitializeComponent();
myAccelerometer = new Accelerometer();
}
private void buttonStart_Click(object sender, RoutedEventArgs e)
{
myAccelerometer.Start();
myAccelerometer.ReadingChanged += myAccelerometer_ReadingChanged;
}
void myAccelerometer_ReadingChanged(object sender, AccelerometerReadingEventArgs e)
{
this.Dispatcher.BeginInvoke(delegate()
{
textBoxX.Text = e.X.ToString();
textBoxY.Text = e.Y.ToString();
textBlockZ.Text = e.Z.ToString();
}
);
}
private void buttonStop_Click(object sender, RoutedEventArgs e)
{
myAccelerometer.Stop();
myAccelerometer.ReadingChanged -= myAccelerometer_ReadingChanged;
}
}
}
هنگام اجرای پروژه با کلیک روی دکمه Start خواهید دید که جعبه های متن با هر حرکت شبیه ساز ویندوز فون به صورت خودکار بروزرسانی می شوند.
اگر مشکلی در تست برنامه پیش آمد می توانید از سورس کدی که در زیر قرار داده شده استفاده کنید!
سورس کد (http://www.prolearn-vs.com/wp-content/uploads/2012/08/AccelerometerDemo-www.prolearn-vs.com_.zip)
منبع: www.prolearn-vs.com (http://www.prolearn-vs.com)