Пробуем датчики. Ориентация устройства в пространстве.

добавлено: 03 апр 13
понравилось:0
просмотров: 2635
комментов: 0

теги:

Автор: PeaK

Вторая попытка применения датчиков. Всё-таки до очередного релиза RAD Studio осталось несколько дней.
Посмотрим, как работает датчик положения.

Существует огромное количество программ для разных мобильных платформ, типа измерение уровня горизонта или вертикали, почему бы не поиграть с этим датчиком?

Как обычно создаем новый мобильный проект, на форму кидаем три TLabel и TTimer.
Двойной щелчок по форме и в конструкторе пишем:

procedure TForm9.FormCreate(Sender: TObject);
var
  i : Integer;
  LSensorArray : TSensorArray;
begin
  TSensorManager.Current.Activate();
  LSensorArray := TSensorManager.Current.GetSensorsByCategory(TSensorCategory.Orientation);
  FOrientationSensor := nil;
  if Length(LSensorArray) > 0 then
    FOrientationSensor := TCustomOrientationSensor(LSensorArray[0]);
end;


Компилятор ругается, разумеется. Добавляем к списку юнитов System.Sensors.
Код довольно очевиден. Это всё тот же старый добрый Дельфи, который "давно мёртв". Все кнопочки, типа F11, переключающие нас от кода юнита к дизайнеру формы работают. Нажимаем, и на форме кликаем на таймер дважды, проваливаемся в обработчик событий таймера. Вообще ничего нового, за исключением того, что код работает на устройстве под управлением iOS 6.1. Пишем код:

procedure TForm9.Timer1Timer(Sender: TObject);
begin
  if Assigned(FOrientationSensor) then
  begin
    Label1.Text := Format('TiltX = %3.5f',[FOrientationSensor.TiltX]);
    Label2.Text := Format('TiltX = %3.5f',[FOrientationSensor.TiltY]);
    Label3.Text := Format('TiltX = %3.5f',[FOrientationSensor.TiltZ]);
  end;
end;


Человек, который немного знаком с Дельфи делает всё это быстро и на автомате.
Всё. Мы можем запустить проект и посмотреть, что происходит. К сожалению, смотреть необходимо на настоящем девайсе, нужно быть зарегистрированным iOS разработчиком. Но это плата за возможность добавлять наши приложения в AppStore.
Обновляются значения довольно медленно. Правильно - в дизайнере для Timer1 ставим значение Interval равным 100.
Смотрим на экран:
Картинка с другого сайта.
Все довольно просто.

Для чего это можно применить:
Для управления какими-то функциями, например - очистить форму ввода, повернув телефон экраном вниз(или наклонив), или повернуть на экране объект, на боковой грани которого расположена кнопка.

Забыл упомянуть об одной из особенностей.
Если в данном случае последние символы XYZ это не значит, что это координаты. На самом деле это углы поворота. А в другом датчике - компасе, переменные HeadingX, HeadingY и HeadingZ - это действительно координаты вектора, указывающего на север.

Комментарии




Необходимо войти на сайт, чтобы оставлять комментарии