From 502b6ee0f73e55828086177a89f954253e7290cf Mon Sep 17 00:00:00 2001 From: DrZiplok Date: Sun, 17 Oct 2010 21:07:25 +0000 Subject: [PATCH] Teach the compass init code how to detect whether there is a compass present at all. This lets systems where it's optional decide whether to try to use it or not... git-svn-id: https://arducopter.googlecode.com/svn/trunk@684 f9c3cf11-9bcb-44bc-f272-b75c42450872 --- libraries/APM_Compass/APM_Compass.cpp | 7 +++++-- libraries/APM_Compass/APM_Compass.h | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/libraries/APM_Compass/APM_Compass.cpp b/libraries/APM_Compass/APM_Compass.cpp index c04fd13997..71d72f5936 100644 --- a/libraries/APM_Compass/APM_Compass.cpp +++ b/libraries/APM_Compass/APM_Compass.cpp @@ -1,3 +1,4 @@ +// -*- tab-width: 4; Mode: C++; c-basic-offset: 3; indent-tabs-mode: t -*- /* APM_Compass.cpp - Arduino Library for HMC5843 I2C Magnetometer Code by Jordi Muņoz and Jose Julio. DIYDrones.com @@ -78,7 +79,7 @@ APM_Compass_Class::APM_Compass_Class() : orientation(0), declination(0.0) } // Public Methods ////////////////////////////////////////////////////////////// -void APM_Compass_Class::Init(void) +bool APM_Compass_Class::Init(void) { unsigned long currentTime = millis(); // record current time int numAttempts = 0; @@ -102,7 +103,8 @@ void APM_Compass_Class::Init(void) Wire.beginTransmission(CompassAddress); Wire.send(ConfigRegA); Wire.send(PositiveBiasConfig); - Wire.endTransmission(); + if (0 != Wire.endTransmission()) + continue; // compass not responding on the bus delay(50); // set gains @@ -146,6 +148,7 @@ void APM_Compass_Class::Init(void) Wire.endTransmission(); // End transmission delay(50); } + return(success); } // Read Sensor data diff --git a/libraries/APM_Compass/APM_Compass.h b/libraries/APM_Compass/APM_Compass.h index f5d0ef3cf3..b6b11fde79 100644 --- a/libraries/APM_Compass/APM_Compass.h +++ b/libraries/APM_Compass/APM_Compass.h @@ -35,7 +35,7 @@ class APM_Compass_Class unsigned long lastUpdate; APM_Compass_Class(); // Constructor - void Init(); + bool Init(); void Read(); void Calculate(float roll, float pitch); void SetOrientation(int newOrientation);