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
if Switch1.IsChecked then begin
shakeCount := 0;
Label1.Text := ' ';
keepPoint := MotionSensor1.Sensor.AccelerationX
+ MotionSensor1.Sensor.AccelerationY
+ MotionSensor1.Sensor.AccelerationZ;
end;
Timer1.Enabled := Switch1.IsChecked;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
mPoint: Double;
begin
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
// 振
shakeCount := shakeCount + 1;
end;
keepPoint := mPoint;
end;
end.