-(IBAction)measureAngle:(id)sender {
test = test+1; // updates test
// we check for remainder of test odd or even, this alternates between
// the moving angle reading and the static angle reading
j = j + 0.5; // update by 0.5, as it takes 2 button clicks to call display label
// this is used as the amount to divide by for the average
[self displayLabel];
}
-(void) displayLabel {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
buttonImage1 = [UIImage imageNamed:@"aoe_btn_start_off.png"];
buttonImage2 = [UIImage imageNamed:@"aoe_btn_stop_off.png"];
[self.view addSubview:startButton];
self.motionManager = [[[CMMotionManager alloc] init] autorelease];
NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease];
if ((test%2) == 1) { // triggered when it is equal to 0
// so after the first call ( 1 + (-1)) = 0
// then
[startButton setImage:buttonImage2 forState:UIControlStateNormal];
motionManager.accelerometerUpdateInterval = 1.0/10.0;
[motionManager startAccelerometerUpdatesToQueue:queue withHandler:
^(CMAccelerometerData *accelerometerData, NSError *error){
if (error) {
[motionManager stopAccelerometerUpdates];
labelText = [NSString stringWithFormat:
@"Accelerometer encountered error: %@", error];
}
else {
labelText = [NSString stringWithFormat:
@"%.0f",
fabs((accelerometerData.acceleration.y)*90)];
result = fabs((accelerometerData.acceleration.y)*90);
}
[accelerometerLabel performSelectorOnMainThread:@selector(setText:)
withObject:labelText
waitUntilDone:YES];
}];
[pool drain];
}
else {
accelerometerLabel.text = @"This device has no accelerometer.";
}
if ( test > 20) {
[self resetMethod];
}
if ((test%2) == 0){
[startButton setImage:buttonImage1 forState:UIControlStateNormal];
accelerometerLabel.text = [NSString stringWithFormat:@"%.f", result];
switch (test)
{
case 2:
angle1.text = [NSString stringWithFormat:@"%.0f", result];
a1 = result;
break;
case 4:
angle2.text = [NSString stringWithFormat:@"%.0f", result];
a2 = result;
break;
case 6:
angle3.text = [NSString stringWithFormat:@"%.0f", result];
a3 = result;
break;
case 8:
angle4.text = [NSString stringWithFormat:@"%.0f", result];
a4 = result;
break;
case 10:
angle5.text = [NSString stringWithFormat:@"%.0f", result];
a5 = result;
break;
case 12:
angle6.text = [NSString stringWithFormat:@"%.0f", result];
a6 = result;
break;
case 14:
angle7.text = [NSString stringWithFormat:@"%.0f", result];
a7 = result;
break;
case 16:
angle8.text = [NSString stringWithFormat:@"%.0f", result];
a8 = result;
break;
case 18:
angle9.text = [NSString stringWithFormat:@"%.0f", result];
a9 = result;
break;
case 20:
angle10.text = [NSString stringWithFormat:@"%.0f", result];
a10 = result;
break;
default:
average = 0;
break;
}
average = (a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10)/j; // calculates average
// j is the running total
if(isnan(average)) {
averageAngle.text = [NSString stringWithFormat:@""];
}
else {
averageAngle.text = [NSString stringWithFormat:@"%.1f\u00B0", average ];
}
}
}
-(IBAction)resetAll:(id)sender {
[self resetMethod];
[self displayLabel];
}
-(void) resetMethod {
averageAngle.text = [NSString stringWithFormat:@""];
test = 0;
average = 0;
result =0;
j =0;
a1 = 0;
a2 = 0;
a3 = 0;
a4 = 0;
a5 = 0;
a6 = 0;
a7 = 0;
a8 = 0;
a9 = 0;
a10= 0;
accelerometerLabel.text = [NSString stringWithFormat:@""];
angle1.text = [NSString stringWithFormat:@""];
angle2.text = [NSString stringWithFormat:@""];
angle3.text = [NSString stringWithFormat:@""];
angle4.text = [NSString stringWithFormat:@""];
angle5.text = [NSString stringWithFormat:@""];
angle6.text = [NSString stringWithFormat:@""];
angle7.text = [NSString stringWithFormat:@""];
angle8.text = [NSString stringWithFormat:@""];
angle9.text = [NSString stringWithFormat:@""];
angle10.text = [NSString stringWithFormat:@""];
}
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
self.title = @"Angle of Elevation";
[super viewDidLoad];
[self resetMethod];
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
self.motionManager = nil;
self.accelerometerLabel = nil;
self.gyroscopeLabel = nil;
self.angle1 =nil;
self.angle2 =nil;
self.angle3 =nil;
self.angle4 =nil;
self.angle5 =nil;
self.angle6 =nil;
self.angle7 =nil;
self.angle8 =nil;
self.angle9 =nil;
self.angle10 =nil;
self.averageAngle=nil;
[super viewDidUnload];
}
- (void)dealloc {
[motionManager release];
[accelerometerLabel release];
[gyroscopeLabel release];
[startButton release];
[angle1 release];
[angle2 release];
[angle3 release];
[angle4 release];
[angle5 release];
[angle6 release];
[angle7 release];
[angle8 release];
[angle9 release];
[angle10 release];
[averageAngle release];
[buttonImage1 release];
[buttonImage2 release];
[super dealloc];
}
@end