Pull to refresh

Windows 7 и Sensor API

Reading time3 min
Views3.8K
Original author: Pietro Brambati
image
Одна из самых прикольных возможностей в Windows 7 — новый Sensor (и Location) API. API полностью нативные, но мы можем использовать его с .NET Framework, если установить Windows API Code Pack 1.0.

Если мы хотим попробовать протестировать Sensor API, можем сделать это даже без реального физического датчика. В Windows 7 SDK(x86 и x64) можно найти Virtual Light Sensor — простое приложение, которое симулирует Ambient Sensor.

На скриншоте видно, как выглядит программа.

image

1) Покупаем датчик

Если мы хотим по тестировать с реальным датчиком, можно приобрести его на Freescale. Собственно вот, как и он выглядит:

image

image


Freescale плата имеет следующие датчики:
  • Датчик освещения
  • 3D акселерометр
  • Две сенсорных полосы

2) Обновление прошивки

Для того чтобы использовать устройство в Windows 7, нам нужно загрузить Windows 7 Sensor Development Kit и обновить прошивку, используя инструкции с readme файла. Для обновления следует подключить устройство к системе. Для этого следуя инструкции, нам нужно прикоснуться к кнопке E4 до того, как на дисплее появится «Press E4 to enter bootloader.»

На следующем изображении я выделил дисплей и кнопку E4, так что дотронутся до кнопки нужно быстро.

image

3) Тестируем датчик в Windows 7

Если мы хотим протестировать все датчики, нам нужно запустить тестовую программу (SensorDevKitDiagnosticApp.exe) в директории tools\Diagnostic\Binaries Tool с Win 7 Development kit:

image

И так, я протестировал датчик, но как бы развлечься дальше?

4) Устанавливаем XNA Game Studio 3.0

С CodePlex мы можем загрузить некоторые классы, которые можно использовать для расширения одного из стартового набора, который идет с XNA Game Studio. Не буду показывать весь код, покажу лишь минимальный список изменений, который стоит сделать для управления машиной с помощью акселерометра.

1. Устанавливаем Microsoft XNA Game Studio 3.0 (62 MB)
2. Устанавливаем Microsoft XNA Racing Game Starter Kit (127 MB)
3. Загружаем Windows 7 Sensor XNA Racing Game (внутри мы найдем два класса и dll файл).

Теперь мы можем создать просто гоночный Game Project с Visual Studio 2008:

image

После этого, нам нужно следовать инструкциям в примере с CodePlex
  • добавляем Windows7.SensorAndLocation.dll, которая содержит обёртку родного API для .NET
  • скопируйте в папку Shaders, PreScreenSkyCubeMapping.cs (этот файл используется для изменения освещения и неба в зависимости от показаний датчика)
  • В папке GameLogic, замените Input.cs. Этот файл содержит код, который получает данные с разных устройств: мышки, клавиатуры, акселерометра. Мы можем заглянуть в метод Initialize, который инициализирует датчик и предоставляет ускорение по осям X и Y, как показано в коде


image

Код дает три свойства:

image

Первое используется для проверки, подключено ли устройство, а остальные для возврата значений акселерометра. В своем тесте я видел значение от -1 до 1.

Теперь у нас есть значения, возвращенные акселерометром, но как их использовать в игре? Прежде всего, мы должны инициализировать датчик, чтобы приложение знало что использовать, далее мы должны контролировать ускорение/замедление автомобиля, поворот вправо/влево.
  • Идем в Graphics\BaseGame.cs и в конце конструктора BaseGame вызываем Input.Initialize(), который должен быть инициализирован до Accelerometer3D датчика.
  • Идем в GameLogic\CarPhysics.cs и в методе Update мы можем, к примеру, контролировать ось X для поворотов влево и вправо

image

Я проделал несколько экспериментов, чтобы откорректировать чувствительность, но вы можете изменить значение 3.0f под себя.

Для того, чтобы машина ускорялась и могла ехать вперед или назад, я добавил этот коде в тот же метод:

image

Вы можете скачать мои классы с примера.

5) Наслаждаемся Windows 7 Sensor API !

Настал момент, когда мы можем нажать F5 и окунуться в игру получая кайф вождения от акселерометра.

image

6) Для любопытных

Если вы желаете знать больше о данном API, посмотрите видео, которое вдохновило меня.
Tags:
Hubs:
+37
Comments20

Articles