Websites Navigation: Airbit | Shop | m-shell.net
Languages: EN | DE

Module accel: Accelerator Measurements

  
Compatibility of module accel
Sony Ericsson phones and Nokia S60 2nd Edition phones lack this module.Module not found
Selected Nokia S60 3rd Edition phones and Nokia S60 5th Edition phones devices with builtin acceleration sensor.ok

This module returns the measurements of the builtin acceleration sensor. Please note that only a few devices have a such a sensor.

Each measurement corresponds to a vector in three dimensional space. Unfortunately the meaning of the values returned varies between devices, in particular the sign of the z component.

On the N95-8GB, we found the following:

KeyMeaningType
xParallel to the screen, negative to the left, positive to the right.Number
yParallel to the screen, negative to the bottom, positive to the top.Number
zOrthogonal to the screen, negative away from the viewer, positive towards the viewer.Number

   Vector directions on the N95-8GB

If the device is still, the acceleration corresponds to the gravitation and thus allows to determine the rotation of the device. For instance, if the device lies flat on a table with the screen facing up, the z component will have a large value (gravitation pulling "down"). If the device is flipped over, the z component will change its sign.

The maximum magnitude of the measurements seems to be about 370 for gravitation only. Some devices return higher values for short time acceleration, e.g. when tapping on the device.

accel.get

• function get() → Array

Gets the current acceleration vector.

// Check whether the N95-8GB is face up or down
function isFaceUp()
  return accel.get()["z"]<0
end
print isFaceUp()
→ true

accel.new

• function new(mindelta=20, timeout=-1) → Array|null

Waits until any component of the acceleration vector changes by at least mindelta, then returns the current vector. If timeout>=0 and timeout milliseconds have passed without any change, null is returned.

The following example draws a blue line in perpendicular direction:

// compute the center and radius
s=graph.size();
cx=s[0]/2; cy=s[1]/2; r=cx;
if cy<r then r=cy end;
// compute the scale factor
f=-r/300;
// initially there is no line
dx=0; dy=0;
do
  graph.show();
  a=accel.new(10);
  // erase the old line
  graph.pen(graph.bg());
  graph.line(cx, cy, cx+dx, cy+dy);
  // compute the new line
  dx=f*a["y"]; dy=f*a["x"];
  // draw the new line
  graph.pen(graph.blue);
  graph.line(cx, cy, cx+dx, cy+dy)
  // until the device is flipped
until a["z"]>200


© 2004-2011 airbit AG, CH-8008 Zürich
Document AB-M-LIB-888
mShell Home  > Documentation  > Manuals