Delphi 앱 - 스마트 폰의 흔들림을 가볍게 감지
10592 단어 안드로이드델파이FireMonkeyFMX
불행히도, 흔들렸는지, 단순한 이동인지는 센서만으로는 판단은 할 수 없습니다.
「Android shake 검출」등의 키워드로, 검색하면 여러분 여러가지 로직으로 검지하고 있습니다.
(기본적으로 가속도 센서를 사용하여 감지합니다)
Delphi로 만든 앱으로 구현해 보았습니다.
가속도 센서의 컴포넌트 TMotionSensor와 TTimer를 사용하여 진폭과 속도에서 어리석은 알고리즘으로 감지합니다.
거친 알고리즘
일정 시간내(0.3초)로, 진폭이 ±1 이상이면 카운트를 실시해, 카운트가 3 이상이 되면 쉐이크로 간주하고 있습니다.
쉐이크의 방향은 X, Y, Z 각각 있기 때문에,
(기점의 X + Y + Z) - (시간내 종점의 X + Y + Z)
의 값을 진폭으로 하고 있습니다.
디자인 화면
MotionSensor의 Active를 True로 설정하는 것을 잊지 마십시오.
샘플 코드
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
FMX.Controls.Presentation, System.Sensors, System.Sensors.Components;
type
TForm1 = class(TForm)
ToolBar1: TToolBar;
Switch1: TSwitch;
Label1: TLabel;
Timer1: TTimer;
MotionSensor1: TMotionSensor;
procedure Timer1Timer(Sender: TObject);
procedure Switch1Switch(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private 宣言 }
public
keepPoint: Double; //位置保存
shakeCount: Integer; //振りカウント
{ public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.FormCreate(Sender: TObject);
begin
// 初期化
keepPoint := 0;
shakeCount := 0;
Label1.Text := ' ';
end;
procedure TForm1.Switch1Switch(Sender: TObject);
begin
//スイッチが ONになったらカウントの初期化と基本ざっくり位置を保存する
if Switch1.IsChecked then begin
shakeCount := 0;
Label1.Text := ' ';
keepPoint := MotionSensor1.Sensor.AccelerationX
+ MotionSensor1.Sensor.AccelerationY
+ MotionSensor1.Sensor.AccelerationZ;
end;
//Timerの起動を制御
Timer1.Enabled := Switch1.IsChecked;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
mPoint: Double; //作業用
begin
// 振りカウントが 3以上になったらシェイクとみなす
if shakeCount > 3 then begin
Label1.Text := 'しぇいく';
shakeCount := 0;
Switch1.IsChecked := False;
exit;
end;
// 現在位置ざっくり
mPoint := MotionSensor1.Sensor.AccelerationX
+ MotionSensor1.Sensor.AccelerationY
+ MotionSensor1.Sensor.AccelerationZ;
if ((keepPoint - mPoint) > 1) or ((keepPoint - mPoint) < -1) then begin
// 振りカウント +1
shakeCount := shakeCount + 1;
end;
// 現在ざっくり位置保存
keepPoint := mPoint;
end;
end.
실행해보기
앱을 시작하고
스위치를 켜고 스마트 폰을 척
라고 감지했습니다!
Reference
이 문제에 관하여(Delphi 앱 - 스마트 폰의 흔들림을 가볍게 감지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/CYonezawa/items/8490406709749d59fa83텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)