уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Начиная с версии Delphi XE4, в состав палитры компонентов вошла новая вкладка — Sensors, на которой расположились компоненты для работы с различными датчиками, встроенными в мобильное устройство: датчик местоположения, компас, датчик ускорения и положения в пространстве и так далее. Таким образом, разработчикам в Delphi не требуется затрачивать дополнительное время на организацию работы с любыми датчиками, встроенными в мобильное устройство, в том числе и на работу с акселерометром в Delphi.

Основная информация по компоненту
Вкладка палитры компонентов Sensors
Исходник официального примера и документация SourceForge DocWiki

Демонстрационный пример показывает как работать в Delphi с акселерометром — датчиком ускорения. Датчик акселерометра используется для получения информации об ускорении устройства, угловом ускорении, движении и скорости.

Внешний вид демонстрационного приложения представлен на рисунке ниже:

 

На форме приложения расположены следующие компоненты:

  1. TMotionSensor для предоставления информации об ускорении, угле, состоянии и скорости движения устройства.
  2. TTimer для повторения определенных действий через заданный интервал времени. TTimer указывает временной интервал, по прошествии которого TMotionSensor предоставляет информацию пользователю.
  3. TSwitch — двухпозиционный выключатель. TSwitch включает TTimer и TMotionSensor.
  4. TListBox для отображения набора элементов информации TMotionSensor в прокручиваемом списке.

При запуске приложения TMotionSensor и TTimer отключены. Когда вы включаете TSwitch, TMotionSensor и TTimer включаются, и каждый элемент TListBoxItem (в списке TListBox) показывает различную информацию об ускорении, угле, состоянии и скорости движения устройства.

В примере показывается следующая информация о движении устройства:

  • Ускорение по оси X.
  • Ускорение по оси Y.
  • Ускорение по оси Z.
  • Угловое ускорение по оси X.
  • Угловое ускорение по оси Y.
  • Угловое ускорение по оси Z.
  • Скорость.

Использование компонента

В зависимости от того на какой платформе запускается приложения, датчик TMotionSensor может поддерживать различные свойства:

  • AccelerationX, AccelerationY и AccelerationZ — возвращают ускорение по осям X, Y и Z.
  • AngleAccelX, AngleAccelY и AngleAccelZ возвращают угловое ускорение в градусах в секунду в квадрате (°/с²) для осей X, Y и Z.
  • Speed — определяет скорость устройства в метрах в секунду (м/с).
  • Motion — определяет, находится ли устройство в движении или нет.

Для того, чтобы понять, что именно может показывать датчик, можно воспользоваться следующей таблицей:

Платформа Что поддерживается
Android Android предоставляет различные типы датчиков движения. Каждый тип датчика поддерживает различный набор свойств:
  • Датчик Accelerometer3D обеспечивает свойства AccelerationX, AccelerationY и AccelerationZ.
  • Датчик Gyrometer3D обеспечивает свойства AngleAccelX, AngleAccelY и AngleAccelZ.
  • Датчик GravityAccelerometer3D обеспечивает свойства AccelerationX, AccelerationY и AccelerationZ.
  • Датчик LinearAccelerometer3D обеспечивает свойства AccelerationX, AccelerationY и AccelerationZ.
iOS iOS предоставляет различные типы датчиков движения. Каждый тип датчика поддерживает различный набор свойств:
  • Датчик Accelerometer3D обеспечивает свойства AccelerationX, AccelerationY и AccelerationZ.
  • Датчик MotionDetector обеспечивает свойства AccelerationX, AccelerationY, AccelerationZ, AngleAccelX, AngleAccelY и AngleAccelZ.

Демонстрационный пример

Пример показывает как использовать TMotionSensor и выводить пользователю только ту информацию, которую возвращают датчики мобильного устройства.

Так, при срабатывании таймера выполняется следующий код:

procedure TAccelerometerForm.Timer1Timer(Sender: TObject);
var
  LProp: TCustomMotionSensor.TProperty;
 
begin
  for LProp in MotionSensor1.Sensor.AvailableProperties do
  begin
    { get the data from the sensor }
    case LProp of
      TCustomMotionSensor.TProperty.AccelerationX:
      begin
        lbAccelerationX.Visible := True;
        lbAccelerationX.Text := Format('Acceleration X: %6.2f', [MotionSensor1.Sensor.AccelerationX]);
      end;
      TCustomMotionSensor.TProperty.AccelerationY:
      begin
        lbAccelerationY.Visible := True;
        lbAccelerationY.Text := Format('Acceleration Y: %6.2f', [MotionSensor1.Sensor.AccelerationY]);
      end;
      TCustomMotionSensor.TProperty.AccelerationZ:
      begin
        lbAccelerationZ.Visible := True;
        lbAccelerationZ.Text := Format('Acceleration Z: %6.2f', [MotionSensor1.Sensor.AccelerationZ]);
      end;
      TCustomMotionSensor.TProperty.AngleAccelX:
      begin
        lbAngleAccelX.Visible := True;
        lbAngleAccelX.Text := Format('Angle X: %6.2f', [MotionSensor1.Sensor.AngleAccelX]);
      end;
      TCustomMotionSensor.TProperty.AngleAccelY:
      begin
        lbAngleAccelY.Visible := True;
        lbAngleAccelY.Text := Format('Angle Y: %6.2f', [MotionSensor1.Sensor.AngleAccelY]);
      end;
      TCustomMotionSensor.TProperty.AngleAccelZ:
      begin
        lbAngleAccelZ.Visible := True;
        lbAngleAccelZ.Text := Format('Angle Z: %6.2f', [MotionSensor1.Sensor.AngleAccelZ]);
      end;
      TCustomMotionSensor.TProperty.Motion:
      begin
        lbMotion.Visible := True;
        lbMotion.Text := Format('Motion: %6.2f', [MotionSensor1.Sensor.Motion]);
      end;
      TCustomMotionSensor.TProperty.Speed:
      begin
        lbSpeed.Visible := True;
        lbSpeed.Text := Format('Speed: %6.2f', [MotionSensor1.Sensor.Speed]);
      end;
    end;
  end;
end;

В зависимости от поддерживаемых свойств список TListBox заполняется соответствующими элементами. На рисунке ниже представлен пример работающего демонстрационного приложения, запущенного под ОС Android:

 

При подготовке статьи использовалась информация со следующих ресурсов:

  1. Официальный репозиторий демонстрационных примеров Delphi на SourceForge
  2. Документация по компоненту на сайте Embarcadero

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.