Kezdőlap > .NET, Windows Phone 7 > Giroszkóp használata

Giroszkóp használata

2012. április 11. szerda Hozzászólás Go to comments

Ezzel a szenzorral megállapíthatjuk, hogy a felhasználó hogyan mozgatja a térben a telefont. A giroszkóp nem tartozik a telefon alapfelszereltségéhez, viszont vannak készülékek, amik támogatják ezt a szenzort. A giroszkóp használata nagyon hasonlít az accelorométeréhez.

image

 

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 a Microsoft.XNA.Framework névtereket:

using Microsoft.Devices.Sensors;

using Microsoft.Xna.Framework;

4. A Contentpanel gridjéhez adjunk négy Textblock-ot: az első három az X, Y, Z térbeli pozíciókat fogja megjeleníteni, míg az utolsó Textblock akkor jelenik meg, ha a giroszkóp nem támogatott eszköz. Ezenkívül három line-t is rajzolunk. 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,100,0,0" Name="xTextBlock" Text="X: 1.0" VerticalAlignment="Top" Foreground="Red" FontSize="28" FontWeight="Bold"/>

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

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

    <Line x:Name="xLine" X1="240" Y1="350" X2="340" Y2="350" Stroke="Red" StrokeThickness="4"></Line>

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

    <Line x:Name="zLine" X1="240" Y1="350" X2="190" Y2="400" Stroke="Blue" StrokeThickness="4"></Line>

    <TextBlock Height="30" HorizontalAlignment="Center" Margin="6,571,6,0" Name="statusTextBlock" Text="" VerticalAlignment="Top" Width="444" />

</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.

Gyroscope gSensor;

6. A konstruktorban ellenőrizzük, hogy rendelkezésünkre áll-e a giroszkóp! Ha igen, példányosítsuk, és iratkozzunk fel a CurrentValueChanged eseményére, ezt követően hívjuk meg a Start metódust! A TimeBetweenUpdates tulajdonsággal a mintavételezési időt határozhatjuk meg:

public MainPage()

{

    InitializeComponent();

 

    if (Gyroscope.IsSupported)

    {

        gSensor = new Gyroscope();

        gSensor.TimeBetweenUpdates = TimeSpan.FromMilliseconds(30); gSensor.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<GyroscopeReading>>(g_CurrentValueChanged);

        gSensor.Start();

    }

    else

    {

        statusTextBlock.Text = "A giroszkó nem támogatott!";

    }

}

7. A CurrentValueChanged esemény törzsét is írjuk meg: itt kiírjuk a Textblock-nak az X, Y,Z értékeket, valamint ennek függvényében csökkentjük vagy épp növeljük a vonalak értékeit.

void g_CurrentValueChanged(object sender, SensorReadingEventArgs<GyroscopeReading> e)

{

    Dispatcher.BeginInvoke(() =>

        {

            Vector3 rotationReading = e.SensorReading.RotationRate;

 

            xTextBlock.Text = "X " + rotationReading.X.ToString("0.00");

            yTextBlock.Text = "Y " + rotationReading.Y.ToString("0.00");

            zTextBlock.Text = "Z " + rotationReading.Z.ToString("0.00");

 

            xLine.X2 = xLine.X1 + rotationReading.X * 200;

            yLine.Y2 = yLine.Y1 – rotationReading.Y * 200;

            zLine.X2 = zLine.X1 – rotationReading.Z * 100;

            zLine.Y2 = zLine.Y1 + rotationReading.Z * 100;

 

        });

}

8. Indítsuk el az alkalmazást és próbáljuk ki! Emulátoron nem tudjuk kipróbálni ezt a funkciót, viszont sajnos a fizikai készülékek egy része sem támogatja ezt a szenzort.

Advertisements
Kategóriák:.NET, Windows Phone 7 Címke: , ,
  1. Kázmér
    2012. április 12. csütörtök - 09:49

    A XAML-példában miért -nal zárod a Line-t? Pocsékolod a karaktereket? 🙂

  2. 2012. április 12. csütörtök - 22:18

    Igaz igaz 🙂 Amikor kipróbáltam a demot, akkor Xaml editorba írtam, és ő “olyan okos” szószátyár típus. 🙂

  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: