views:

58

answers:

4

I get 0 0 0 0 0 0 0 0 0 0 0 0

 - (void)applicationDidFinishLaunching:(UIApplication *)application {resultValues.text = @"";
[[UIAccelerometer sharedAccelerometer] setUpdateInterval: 1.0 / kUpdateFrequency];
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
 }
  - (void)accelerometer:(UIAccelerometer*)accelerometer      didAccelerate:(UIAcceleration*)acceleration 
 {
x = acceleration.x;
y = acceleration.y;
z = acceleration.z;
printf("\n%d", x);
printf("\n%d", y);
printf("\n%d", z);

}

+2  A: 

The acceleration values are doubles, and further expressed in units of earth gravity. e.g. 1g. It is not surprising that when you assign them to ints and print the values they are below zero, as the acceleration vector's component would be distributed over the xyz axis unless you were holding one of them precisely parallel to Earth's acceleration vector.

Treat them like the floating point values that they are, and you should see changes as you manipulate your device.

The only time the accelerometer will give legitimate all zero values is when you are in free fall.

freespace
+1  A: 

x,y,z are floating points, not integers.

change printf("\n%d", x); to printf("\n%f", x);

jojaba
+5  A: 

The problem is with your printf statements.

The UIAcceleration class defines its properties like so:

@property(nonatomic, readonly) UIAccelerationValue x

And UIAccelerationValue is typedef'ed like so:

typedef double UIAccelerationValue

The d printf specifier is for ints. You want one for doubles. You want something like so:

printf("\n%g %g %g", acceleration.x, acceleration.y, acceleration.z);

(You can use f or e as well. See: http://en.wikipedia.org/wiki/Printf#printf_format_placeholders )

Shaggy Frog
+1  A: 
printf("\n%.5f", x);
printf("\n%.5f", y);
printf("\n%.5f", z);
Andrew_E