Code stuck on mag.getEvent(&event); in HMC5833L Compass

Code stuck on mag.getEvent(&event); in HMC5833L Compass

  • magnetometer

    Votes: 0 0.0%
  • Arduino Uno

    Votes: 0 0.0%

  • Total voters
    0

Thread Starter

Ashaal Aalam

Joined Nov 6, 2017
1
Last week I created some code in which i can ran GPSneo6 and a magnetometer HMC5883L together. Which at the time worked brilliantly. Yesterday i have attempted to run the code again, with the same connections. No modifications to the code. The GPSneo6 works as expected, the magnetometer not so much. After using serial commands as breakpoints, i am able to see that it gets to the line:
mag.getEvent(&event);

Then I uploaded the example code, to see if the magnetometer will even run correctly. The example code returned the basic stats on the breakout board but once again stopped at that line. Out of curiosity, i removed the magnetometer and ran the program. It displayed exactly the same. Its not picking up that the HMC5883L is even disconnected.

C:
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_HMC5883_U.h>
/* Assign a unique ID to this sensor at the same time */
Adafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(12345);

void displaySensorDetails(void)
{
  sensor_t sensor;
  mag.getSensor(&sensor);
  Serial.println("------------------------------------");
  Serial.print  ("Sensor:       "); Serial.println(sensor.name);
  Serial.print  ("Driver Ver:   "); Serial.println(sensor.version);
  Serial.print  ("Unique ID:    "); Serial.println(sensor.sensor_id);
  Serial.print  ("Max Value:    "); Serial.print(sensor.max_value); Serial.println(" uT");
  Serial.print  ("Min Value:    "); Serial.print(sensor.min_value); Serial.println(" uT");
  Serial.print  ("Resolution:   "); Serial.print(sensor.resolution); Serial.println(" uT"); 
  Serial.println("------------------------------------");
  Serial.println("");
  delay(500);
}

void setup(void)
{
  Serial.begin(9600);
  Serial.println("HMC5883 Magnetometer Test"); Serial.println("");

  /* Initialise the sensor */
  if(!mag.begin())
  {
    /* There was a problem detecting the HMC5883 ... check your connections */
    Serial.println("Ooops, no HMC5883 detected ... Check your wiring!");
    while(1);
  }

  /* Display some basic information on this sensor */
  displaySensorDetails();
}

void loop(void)
{
  /* Get a new sensor event */
sensors_event_t event;
mag.getEvent(&event);

/* Display the results (magnetic vector values are in micro-Tesla (uT)) */
Serial.print("X: "); Serial.print(event.magnetic.x); Serial.print("  ");
Serial.print("Y: "); Serial.print(event.magnetic.y); Serial.print("  ");
Serial.print("Z: "); Serial.print(event.magnetic.z); Serial.print("  ");Serial.println("uT");

// Hold the module so that Z is pointing 'up' and you can measure the heading with x&y
// Calculate heading when the magnetometer is level, then correct for signs of axis.
float heading = atan2(event.magnetic.y, event.magnetic.x);

// Once you have your heading, you must then add your 'Declination Angle', which is the 'Error' of the magnetic field in your location.
// Find yours here: [URL]http://www.magnetic-declination.com/[/URL]
// Mine is: -13* 2' W, which is ~13 Degrees, or (which we need) 0.22 radians
// If you cannot find your Declination, comment out these two lines, your compass will be slightly off.
float declinationAngle = 0.22;
heading += declinationAngle;

// Correct for when signs are reversed.
if(heading < 0)
   heading += 2*PI;

// Check for wrap due to addition of declination.
if(heading > 2*PI)
   heading -= 2*PI;

// Convert radians to degrees for readability.
float headingDegrees = heading * 180/M_PI;

Serial.print("Heading (degrees): "); Serial.println(headingDegrees);

delay(500);
}
Mod edit: code tags
 

Attachments

Last edited by a moderator:
Top