Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h>
- #include <HMC5883L.h>
- HMC5883L compass;
- void setup()
- {
- Serial.begin(9600);
- // Initialize HMC5883L
- Serial.println("Initialize HMC5883L");
- while (!compass.begin())
- {
- Serial.println("Could not find a valid HMC5883L sensor, check wiring!");
- delay(500);
- }
- // Set measurement range
- // +/- 0.88 Ga: HMC5883L_RANGE_0_88GA
- // +/- 1.30 Ga: HMC5883L_RANGE_1_3GA (default)
- // +/- 1.90 Ga: HMC5883L_RANGE_1_9GA
- // +/- 2.50 Ga: HMC5883L_RANGE_2_5GA
- // +/- 4.00 Ga: HMC5883L_RANGE_4GA
- // +/- 4.70 Ga: HMC5883L_RANGE_4_7GA
- // +/- 5.60 Ga: HMC5883L_RANGE_5_6GA
- // +/- 8.10 Ga: HMC5883L_RANGE_8_1GA
- compass.setRange(HMC5883L_RANGE_1_3GA);
- // Set measurement mode
- // Idle mode: HMC5883L_IDLE
- // Single-Measurement: HMC5883L_SINGLE
- // Continuous-Measurement: HMC5883L_CONTINOUS (default)
- compass.setMeasurementMode(HMC5883L_CONTINOUS);
- // Set data rate
- // 0.75Hz: HMC5883L_DATARATE_0_75HZ
- // 1.50Hz: HMC5883L_DATARATE_1_5HZ
- // 3.00Hz: HMC5883L_DATARATE_3HZ
- // 7.50Hz: HMC5883L_DATARATE_7_50HZ
- // 15.00Hz: HMC5883L_DATARATE_15HZ (default)
- // 30.00Hz: HMC5883L_DATARATE_30HZ
- // 75.00Hz: HMC5883L_DATARATE_75HZ
- compass.setDataRate(HMC5883L_DATARATE_15HZ);
- // Set number of samples averaged
- // 1 sample: HMC5883L_SAMPLES_1 (default)
- // 2 samples: HMC5883L_SAMPLES_2
- // 4 samples: HMC5883L_SAMPLES_4
- // 8 samples: HMC5883L_SAMPLES_8
- compass.setSamples(HMC5883L_SAMPLES_1);
- // Check settings
- checkSettings();
- }
- void checkSettings()
- {
- Serial.print("Selected range: ");
- switch (compass.getRange())
- {
- case HMC5883L_RANGE_0_88GA: Serial.println("0.88 Ga"); break;
- case HMC5883L_RANGE_1_3GA: Serial.println("1.3 Ga"); break;
- case HMC5883L_RANGE_1_9GA: Serial.println("1.9 Ga"); break;
- case HMC5883L_RANGE_2_5GA: Serial.println("2.5 Ga"); break;
- case HMC5883L_RANGE_4GA: Serial.println("4 Ga"); break;
- case HMC5883L_RANGE_4_7GA: Serial.println("4.7 Ga"); break;
- case HMC5883L_RANGE_5_6GA: Serial.println("5.6 Ga"); break;
- case HMC5883L_RANGE_8_1GA: Serial.println("8.1 Ga"); break;
- default: Serial.println("Bad range!");
- }
- Serial.print("Selected Measurement Mode: ");
- switch (compass.getMeasurementMode())
- {
- case HMC5883L_IDLE: Serial.println("Idle mode"); break;
- case HMC5883L_SINGLE: Serial.println("Single-Measurement"); break;
- case HMC5883L_CONTINOUS: Serial.println("Continuous-Measurement"); break;
- default: Serial.println("Bad mode!");
- }
- Serial.print("Selected Data Rate: ");
- switch (compass.getDataRate())
- {
- case HMC5883L_DATARATE_0_75_HZ: Serial.println("0.75 Hz"); break;
- case HMC5883L_DATARATE_1_5HZ: Serial.println("1.5 Hz"); break;
- case HMC5883L_DATARATE_3HZ: Serial.println("3 Hz"); break;
- case HMC5883L_DATARATE_7_5HZ: Serial.println("7.5 Hz"); break;
- case HMC5883L_DATARATE_15HZ: Serial.println("15 Hz"); break;
- case HMC5883L_DATARATE_30HZ: Serial.println("30 Hz"); break;
- case HMC5883L_DATARATE_75HZ: Serial.println("75 Hz"); break;
- default: Serial.println("Bad data rate!");
- }
- Serial.print("Selected number of samples: ");
- switch (compass.getSamples())
- {
- case HMC5883L_SAMPLES_1: Serial.println("1"); break;
- case HMC5883L_SAMPLES_2: Serial.println("2"); break;
- case HMC5883L_SAMPLES_4: Serial.println("4"); break;
- case HMC5883L_SAMPLES_8: Serial.println("8"); break;
- default: Serial.println("Bad number of samples!");
- }
- }
- void loop()
- {
- Vector raw = compass.readRaw();
- Vector norm = compass.readNormalize();
- Serial.print(" Xraw = ");
- Serial.print(raw.XAxis);
- Serial.print(" Yraw = ");
- Serial.print(raw.YAxis);
- Serial.print(" Zraw = ");
- Serial.print(raw.ZAxis);
- Serial.print(" Xnorm = ");
- Serial.print(norm.XAxis);
- Serial.print(" Ynorm = ");
- Serial.print(norm.YAxis);
- Serial.print(" ZNorm = ");
- Serial.print(norm.ZAxis);
- Serial.println();
- delay(100);
- }
- while (!compass.begin())
- {
- Serial.println("Could not find a valid HMC5883L sensor, check wiring!");
- delay(500);
- }
- bool HMC5883L::begin()
- {
- Wire.begin();
- if ((fastRegister8(HMC5883L_REG_IDENT_A) != 0x48)
- || (fastRegister8(HMC5883L_REG_IDENT_B) != 0x34)
- || (fastRegister8(HMC5883L_REG_IDENT_C) != 0x33))
- {
- return false;
- }
- setRange(HMC5883L_RANGE_1_3GA);
- setMeasurementMode(HMC5883L_CONTINOUS);
- setDataRate(HMC5883L_DATARATE_15HZ);
- setSamples(HMC5883L_SAMPLES_1);
- mgPerDigit = 0.92f;
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement