Начиная с версии Delphi XE4, в состав палитры компонентов вошла новая вкладка — Sensors, на которой расположились компоненты для работы с различными датчиками, встроенными в мобильное устройство: датчик местоположения, компас, датчик ускорения и положения в пространстве и так далее. Таким образом, разработчикам в Delphi не требуется затрачивать дополнительное время на организацию работы с любыми датчиками, встроенными в мобильное устройство, в том числе и на работу с акселерометром в Delphi.
| Основная информация по компоненту | ||
| Вкладка палитры компонентов | Sensors | |
| Исходник официального примера и документация | DocWiki | |
Демонстрационный пример показывает как работать в Delphi с акселерометром — датчиком ускорения. Датчик акселерометра используется для получения информации об ускорении устройства, угловом ускорении, движении и скорости.
Внешний вид демонстрационного приложения представлен на рисунке ниже:
На форме приложения расположены следующие компоненты:
- TMotionSensor для предоставления информации об ускорении, угле, состоянии и скорости движения устройства.
- TTimer для повторения определенных действий через заданный интервал времени. TTimer указывает временной интервал, по прошествии которого TMotionSensor предоставляет информацию пользователю.
- TSwitch — двухпозиционный выключатель. TSwitch включает TTimer и TMotionSensor.
- 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 предоставляет различные типы датчиков движения. Каждый тип датчика поддерживает различный набор свойств:
|
| iOS | iOS предоставляет различные типы датчиков движения. Каждый тип датчика поддерживает различный набор свойств:
|
Демонстрационный пример
Пример показывает как использовать 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:
При подготовке статьи использовалась информация со следующих ресурсов:
- Официальный репозиторий демонстрационных примеров Delphi на SourceForge
- Документация по компоненту на сайте Embarcadero


