You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

75 lines
2.0 KiB

------------------------------------------------------------------------------
-- JUMPER TEAM BJS --
------------------------------------------------------------------------------
with LSM303; use LSM303;
with MicroBit.Display;
with MicroBit.Accelerometer;
with MicroBit.Console;
with MicroBit.Time;
use MicroBit;
procedure Main is
Data : LSM303.All_Axes_Data;
FreeFallCounter : Integer;
FreeFallDetectionCycles : Integer;
FreeFallCondition : Boolean;
Threshold : Axis_Data;
begin
Console.Put_Line ("Jumper - starting up ..");
-- Initialization
FreeFallCondition := False;
FreeFallCounter := 0;
FreeFallDetectionCycles := 100; -- 100 * 5ms = 500ms
Threshold := 20;
loop
-- READ DATA
-- Read the accelerometer data
Data := Accelerometer.Data;
-- Print the data on the serial port
Console.Put_Line ("X:" & Data.X'Img & ASCII.HT &
"Y:" & Data.Y'Img & ASCII.HT &
"Z:" & Data.Z'Img);
--------------------------------------------------------------------
-- FREEFALL DETECTION
-- check wether all axis are sub-threshold => increment counter
if abs(Data.X) < Threshold and
abs(Data.Y) < Threshold and
abs(Data.Z) < Threshold then
FreeFallCounter := FreeFallCounter + 1;
-- otherwise reset counter
else
FreeFallCounter := 0;
end if;
-- Set free fall condition when counter reaches threshold
if FreeFallCounter >= FreeFallDetectionCycles then
FreeFallCondition := True;
end if;
--------------------------------------------------------------------
-- DISPLAY
-- Clear the LED matrix
Display.Clear;
-- Check, wether FreeFallCondition was triggered
if FreeFallCondition then
Display.Display ('X');
else
Display.Display ('0');
end if;
Time.Sleep (5); -- 200 samples / s
end loop;
end Main;