Ako využiť magnetický senzor vo Windows 8.1 aplikácii

Moderné tablety a konvertibilné zariadenia pod taktovkou operačného systému Windows 8.1 sú vybavené širokou paletou senzorov – spravidla kompasom, akcelerometrom, gyroskopom, meračom osvetlenia, náklonomerom a systémom pre určovanie polohy. Náklonomer a akcelerometer má v tabletoch veľmi dôležitú funkciu, umožňuje nielen zistenie aktuálnej orientácie prístroja (na výšku, či na šírku), ale nakoľko tablet nemá žiadne kurzorové tlačidlá ani nijaký ekvivalent joysticku využíva sa naklápanie prístroja veľmi často aj na ovládanie hier.

Ak zariadenie príslušný senzor nepodporuje, je potrebné v aplikácii túto skutočnosť ošetriť a deklarovať to aj v špeciálnych požiadavkách pre aplikáciu vo Windows obchode.

Kompas

Aplikácie typu “kompas” využívajú polovodičový senzor na meranie poľa. Pomocou tohto senzora je možné určiť orientáciu zariadenia voči severu, teda severnému magnetickému pólu. Na prezentovanie sa najčastejšie používa kruhová stupnica vo vnútri ktorej je obrázok tzv. magnetického kríža, ktorý prehľadne ukazuje hlavné svetové strany. Na otáčanie kruhu využijeme s výhodou animáciu – rotáciu obrázku tak aby stupnica ukazovala správnu hodnotu voči pevnému bodu.

MainPage.xaml

<Grid HorizontalAlignment=”Left” VerticalAlignment=”Top” Grid.Row=”1″>

<Grid.RowDefinitions>

<RowDefinition Height=”*”/>

<RowDefinition Height=”100″/>

</Grid.RowDefinitions>

 

<Grid.Resources>

<Storyboard x:Name=”Storyboard”>

<DoubleAnimation x:Name=”daAnim”

Storyboard.TargetName=”RotateImage”

Storyboard.TargetProperty=”(UIElement.RenderTransform)

.(RotateTransform.Angle)”

From=”0″ To=”360″ Duration=”00:00:1.000″ />

</Storyboard>

</Grid.Resources>

 

<Canvas Width=”450″ Height=”450″ Margin=”20″ Grid.Row=”0″>

<Polyline Points=”215,-20, 235,-20 225,0 215,-20″

Stroke=”red” StrokeThickness=”2″ />

<Image x:Name=”RotateImage” Stretch=”Uniform” Width=”450″ Height=”450″

Source=”Assets/kompas1.png” RenderTransformOrigin=”0.5, 0.5″>

<Image.RenderTransform>

<RotateTransform Angle=”0″ />

</Image.RenderTransform>

</Image>

</Canvas>

<StackPanel Orientation=”Horizontal” Grid.Row=”1″>

<TextBlock x:Name=”tbNorth” Text=”ss-” FontSize=”32″ />

<TextBlock Text=” Accuracy: ” FontSize=”32″ />

<TextBlock x:Name=”tbAccuracy” Text=”-” FontSize=”32″/>

</StackPanel>

</Grid>

 

V kóde sa najskôr pripojíme na senzor

_compass = Compass.GetDefault();

Následne je potrebné ošetriť ak zariadenie príslušný senzor nemá. Čiže ak si používateľ aplikáciu nainštaluje na klasickom notebooku, bez magnetického senzoru, zobrazí sa mu upozornenie o tejto skutočnosti a zvyšok funkcionality bude zablokovaný. Hodnota zo senzora sa číta v procedúre ReadingChanged vždy vtedy, keď dôjde k zmene hodnoty

Fragmenty kódu týkajúce sa kompasu v MainPage.xaml.cs:

using Windows.Devices.Sensors;

using Windows.UI.Core;

 

private Compass _compass;

private uint _desiredReportInterval;

private int nAzimut;

 

private void pageRoot_Loaded(object sender, RoutedEventArgs e)

{

if (_compass != null)

{

_compass.ReportInterval = _desiredReportInterval;

_compass.ReadingChanged += new TypedEventHandler<Compass,

CompassReadingChangedEventArgs>(ReadingChanged);

}

else

{

tbNorth.Text = “No compass sensor found”;

}

}

 

async private void ReadingChanged(object sender, CompassReadingChangedEventArgs e)

{

await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>

{

CompassReading reading = e.Reading;

nAzimut = 360- Convert.ToInt32(reading.HeadingMagneticNorth);

daAnim.From = nFrom;

daAnim.To = nAzimut;

nFrom = nAzimut;

// Start animácie

Scenario1Storyboard.Begin();

 

tbNorth.Text = String.Format(“{0,5:0.00}”, reading.HeadingMagneticNorth);

 

switch (reading.HeadingAccuracy)

{

case MagnetometerAccuracy.Unknown:

tbAccuracy.Text = “Unknown”;

break;

case MagnetometerAccuracy.Unreliable:

tbAccuracy.Text = “Unreliable”;

break;

case MagnetometerAccuracy.Approximate:

tbAccuracy.Text = “Approximate”;

break;

case MagnetometerAccuracy.High:

tbAccuracy.Text = “High”;

break;

default:

tbAccuracy.Text = “No data”;

break;

}

});

}

 

Teraz môžete aplikáciu na vhodnom zariadení, napríklad Windows RT tablete cez diaľkové pripojenie k vývojárskom počítači otestovať.

Aplikáciu nájdete vo Windows obchode pod názvom Magnetic compass

http://apps.microsoft.com/windows/en-gb/app/magnetic-compass/62077e36-cd01-443a-a015-4a044d04e399

Reklamy

Pridaj komentár

Zadajte svoje údaje, alebo kliknite na ikonu pre prihlásenie:

WordPress.com Logo

Na komentovanie používate váš WordPress.com účet. Odhlásiť sa / Zmeniť )

Twitter picture

Na komentovanie používate váš Twitter účet. Odhlásiť sa / Zmeniť )

Facebook photo

Na komentovanie používate váš Facebook účet. Odhlásiť sa / Zmeniť )

Google+ photo

Na komentovanie používate váš Google+ účet. Odhlásiť sa / Zmeniť )

Connecting to %s


%d bloggers like this: