Kezdőoldal > .NET, Windows Phone 7 > Iránytű használata

Iránytű használata

2012. április 10. kedd Hozzászólás Go to comments

Meghatározhatjuk, hogy a telefonunk melyik égtáj felé néz. Használata nagyon hasonló az előzőekben megismert szenzorokhoz. Sajnos ez szintén olyan szenzor, amit nem tudunk kipróbálni az emulátorban, a kipróbálásához olyan fizikai készülékre van szükségünk, amely támogatja ezt a szenzort. Nézzük is meg működés közben:

1. Készítsünk egy új Windows Phone 7 alkalmazást!

2. A referenciákhoz adjuk hozzá a Microsoft.Devices.Sensors és a Microsoft.XNA.Framework assembly-t. Solution Explorer-ben kattintsunk jobb egérgombbal, a References-en a megjelenő helyi menüből válasszuk ki a Microsoft.Devices.Sensors és a Microsoft.XNA.Framework assemblyt és kattintsunk az OK gombra!

3. Oldjuk fel a Microsoft.Devices.Sensors és és a Microsoft.XNA.Framework névtereket:

using Microsoft.Devices.Sensors;

using Microsoft.Xna.Framework;

4. A Contentpanel gridjéhez adjunk hét Textblock-ot, ezenkívül egy line-t is rajzolunk a felhasználói felületre, ennek fogjuk a méreteit változtatni. A XAML a következőképpen néz ki:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">

    <TextBlock Height="30" HorizontalAlignment="Left" Margin="20,73,0,0" Text="MAGNETIC" VerticalAlignment="Top" Foreground="White" FontSize="28" FontWeight="Bold"/>

    <TextBlock Height="30" HorizontalAlignment="Right" Margin="0,74,47,0" Text="TRUE" VerticalAlignment="Top" Foreground="Gray" FontSize="28" FontWeight="Bold"/>

    <TextBlock Height="30" HorizontalAlignment="Left" Margin="20,100,0,0" Name="magneticValue" Text="1.0" VerticalAlignment="Top" Foreground="White" FontSize="28" FontWeight="Bold" Width="147" TextAlignment="Center" />

    <TextBlock Height="30" HorizontalAlignment="Right" Margin="0,100,20,0" Name="trueValue" Text="1.0" VerticalAlignment="Top" Foreground="Gray" FontSize="28" FontWeight="Bold" Width="123" TextAlignment="Center" />

    <TextBlock Height="30" HorizontalAlignment="Left" Margin="20,140,0,0" Name="xBlock" Text="X: 1.0" VerticalAlignment="Top" Foreground="Red" FontSize="28" FontWeight="Bold"/>

    <TextBlock Height="30" HorizontalAlignment="Center" Margin="0,140,0,0" Name="yBlock" Text="Y: 1.0" VerticalAlignment="Top" Foreground="Green" FontSize="28" FontWeight="Bold"/>

    <TextBlock Height="30" HorizontalAlignment="Right" Margin="0,140,20,0" Name="zBlock" Text="Z: 1.0" VerticalAlignment="Top" Foreground="Blue" FontSize="28" FontWeight="Bold"/>

    <Line x:Name="magneticLine" X1="240" Y1="350" X2="240" Y2="270" Stroke="White" StrokeThickness="4"></Line>

</Grid

5. Ezt követően hozzunk létre egy giroszkópot (most a konstruktor előtt tesszük ezt meg)! Példányosítása később történik meg a konstruktorban.

Compass compassSensor;

6. Nézzük meg, hogy a készülék támogatja-e az adott szenzort! Ha igen, példányosítsuk a Compass osztályt, állítsuk be a mintavételezési intervallumot, valamint iratkozzunk fel a CurrentValueChanged eseményére, és végül hívjuk meg a Start metódusát:

public MainPage()

{

    InitializeComponent();

    if (Compass.IsSupported)

    {

        compassSensor = new Compass();

        compassSensor.TimeBetweenUpdates = TimeSpan.FromMilliseconds(1);

        compassSensor.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<CompassReading>>(compass_CurrentValueChanged);

        compassSensor.Start();

    }

}

7. A CurrentValueChanged törzsét is írjuk meg: itt kiíratjuk a megfelelő értékeket, valamint a kirajzolt vonalat (Line) módosítjuk az égtájnak megfelelően:

Void compass_CurrentValueChanged(object sender, SensorReadingEventArgs<CompassReading> e)

{

    Dispatcher.BeginInvoke(() =>

        {

magneticValue.Text = e.SensorReading.MagneticHeading.ToString("0.00");

trueValue.Text = e.SensorReading.TrueHeading.ToString("0.00");

 

magneticLine.X2 = magneticLine.X1 – (200 * Math.Sin(MathHelper.ToRadians((float)e.SensorReading.MagneticHeading)));

magneticLine.Y2 = magneticLine.Y1 – (200 * Math.Cos(MathHelper.ToRadians((float)e.SensorReading.MagneticHeading)));

 

xBlock.Text = "X: " + e.SensorReading.MagnetometerReading.X.ToString("0.00");

yBlock.Text = "Y: " + e.SensorReading.MagnetometerReading.Y.ToString("0.00");

zBlock.Text = "Z: " + e.SensorReading.MagnetometerReading.Z.ToString("0.00");

        });

}

8. Ezt az alkalmazást is csak fizikai készüléken tudjuk kipróbálni, amelyben van iránytűszenzor. Az érdekesség kedvéért a készülék mellett mozgassunk egy mágnest, és figyeljük meg ennek a hatását!

Advertisements
Kategóriák:.NET, Windows Phone 7 Címke: , ,
  1. Még nincs hozzászólás.
  1. No trackbacks yet.

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s

%d blogger ezt kedveli: