Акселерометр получи мне 0000 все время - PullRequest
1 голос
/ 01 сентября 2010

Я получаю 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);

}

Ответы [ 4 ]

5 голосов
/ 01 сентября 2010

Проблема в ваших операторах printf.

Класс UIAcceleration определяет свои свойства следующим образом:

@property(nonatomic, readonly) UIAccelerationValue x

И UIAccelerationValue typedef 'выглядит так:

typedef double UIAccelerationValue

Спецификатор d printf предназначен для целых чисел.Вы хотите один на двоих.Вы хотите что-то вроде этого:

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

(Вы также можете использовать f или e. См .: http://en.wikipedia.org/wiki/Printf#printf_format_placeholders)

2 голосов
/ 01 сентября 2010

Значения ускорения удваиваются и далее выражаются в единицах земной гравитации. например 1g. Неудивительно, что когда вы присваиваете их целым числам и печатаете значения, они ниже нуля, поскольку компонент вектора ускорения будет распределяться по оси XYZ, если вы не держите один из них точно параллельно вектору ускорения Земли.

Обращайтесь с ними как со значениями с плавающей запятой, которыми они являются, и вы должны видеть изменения при манипулировании устройством.

Единственный раз, когда акселерометр выдаст законные все нулевые значения, это когда вы находитесь в свободном падении.

1 голос
/ 01 сентября 2010
printf("\n%.5f", x);
printf("\n%.5f", y);
printf("\n%.5f", z);
1 голос
/ 01 сентября 2010

x, y, z - числа с плавающей запятой, а не целые числа.

изменить printf("\n%d", x); на printf("\n%f", x);

...