Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.45 KB | None | 0 0
  1. #include <Wire.h>
  2. #include <HMC5883L.h>
  3.  
  4. HMC5883L compass;
  5.  
  6. void setup()
  7. {
  8. Serial.begin(9600);
  9.  
  10. // Initialize HMC5883L
  11. Serial.println("Initialize HMC5883L");
  12. while (!compass.begin())
  13. {
  14. Serial.println("Could not find a valid HMC5883L sensor, check wiring!");
  15. delay(500);
  16. }
  17.  
  18. // Set measurement range
  19. // +/- 0.88 Ga: HMC5883L_RANGE_0_88GA
  20. // +/- 1.30 Ga: HMC5883L_RANGE_1_3GA (default)
  21. // +/- 1.90 Ga: HMC5883L_RANGE_1_9GA
  22. // +/- 2.50 Ga: HMC5883L_RANGE_2_5GA
  23. // +/- 4.00 Ga: HMC5883L_RANGE_4GA
  24. // +/- 4.70 Ga: HMC5883L_RANGE_4_7GA
  25. // +/- 5.60 Ga: HMC5883L_RANGE_5_6GA
  26. // +/- 8.10 Ga: HMC5883L_RANGE_8_1GA
  27. compass.setRange(HMC5883L_RANGE_1_3GA);
  28.  
  29. // Set measurement mode
  30. // Idle mode: HMC5883L_IDLE
  31. // Single-Measurement: HMC5883L_SINGLE
  32. // Continuous-Measurement: HMC5883L_CONTINOUS (default)
  33. compass.setMeasurementMode(HMC5883L_CONTINOUS);
  34.  
  35. // Set data rate
  36. // 0.75Hz: HMC5883L_DATARATE_0_75HZ
  37. // 1.50Hz: HMC5883L_DATARATE_1_5HZ
  38. // 3.00Hz: HMC5883L_DATARATE_3HZ
  39. // 7.50Hz: HMC5883L_DATARATE_7_50HZ
  40. // 15.00Hz: HMC5883L_DATARATE_15HZ (default)
  41. // 30.00Hz: HMC5883L_DATARATE_30HZ
  42. // 75.00Hz: HMC5883L_DATARATE_75HZ
  43. compass.setDataRate(HMC5883L_DATARATE_15HZ);
  44.  
  45. // Set number of samples averaged
  46. // 1 sample: HMC5883L_SAMPLES_1 (default)
  47. // 2 samples: HMC5883L_SAMPLES_2
  48. // 4 samples: HMC5883L_SAMPLES_4
  49. // 8 samples: HMC5883L_SAMPLES_8
  50. compass.setSamples(HMC5883L_SAMPLES_1);
  51.  
  52. // Check settings
  53. checkSettings();
  54. }
  55.  
  56. void checkSettings()
  57. {
  58. Serial.print("Selected range: ");
  59.  
  60. switch (compass.getRange())
  61. {
  62. case HMC5883L_RANGE_0_88GA: Serial.println("0.88 Ga"); break;
  63. case HMC5883L_RANGE_1_3GA: Serial.println("1.3 Ga"); break;
  64. case HMC5883L_RANGE_1_9GA: Serial.println("1.9 Ga"); break;
  65. case HMC5883L_RANGE_2_5GA: Serial.println("2.5 Ga"); break;
  66. case HMC5883L_RANGE_4GA: Serial.println("4 Ga"); break;
  67. case HMC5883L_RANGE_4_7GA: Serial.println("4.7 Ga"); break;
  68. case HMC5883L_RANGE_5_6GA: Serial.println("5.6 Ga"); break;
  69. case HMC5883L_RANGE_8_1GA: Serial.println("8.1 Ga"); break;
  70. default: Serial.println("Bad range!");
  71. }
  72.  
  73. Serial.print("Selected Measurement Mode: ");
  74. switch (compass.getMeasurementMode())
  75. {
  76. case HMC5883L_IDLE: Serial.println("Idle mode"); break;
  77. case HMC5883L_SINGLE: Serial.println("Single-Measurement"); break;
  78. case HMC5883L_CONTINOUS: Serial.println("Continuous-Measurement"); break;
  79. default: Serial.println("Bad mode!");
  80. }
  81.  
  82. Serial.print("Selected Data Rate: ");
  83. switch (compass.getDataRate())
  84. {
  85. case HMC5883L_DATARATE_0_75_HZ: Serial.println("0.75 Hz"); break;
  86. case HMC5883L_DATARATE_1_5HZ: Serial.println("1.5 Hz"); break;
  87. case HMC5883L_DATARATE_3HZ: Serial.println("3 Hz"); break;
  88. case HMC5883L_DATARATE_7_5HZ: Serial.println("7.5 Hz"); break;
  89. case HMC5883L_DATARATE_15HZ: Serial.println("15 Hz"); break;
  90. case HMC5883L_DATARATE_30HZ: Serial.println("30 Hz"); break;
  91. case HMC5883L_DATARATE_75HZ: Serial.println("75 Hz"); break;
  92. default: Serial.println("Bad data rate!");
  93. }
  94.  
  95. Serial.print("Selected number of samples: ");
  96. switch (compass.getSamples())
  97. {
  98. case HMC5883L_SAMPLES_1: Serial.println("1"); break;
  99. case HMC5883L_SAMPLES_2: Serial.println("2"); break;
  100. case HMC5883L_SAMPLES_4: Serial.println("4"); break;
  101. case HMC5883L_SAMPLES_8: Serial.println("8"); break;
  102. default: Serial.println("Bad number of samples!");
  103. }
  104.  
  105. }
  106.  
  107. void loop()
  108. {
  109. Vector raw = compass.readRaw();
  110. Vector norm = compass.readNormalize();
  111.  
  112. Serial.print(" Xraw = ");
  113. Serial.print(raw.XAxis);
  114. Serial.print(" Yraw = ");
  115. Serial.print(raw.YAxis);
  116. Serial.print(" Zraw = ");
  117. Serial.print(raw.ZAxis);
  118. Serial.print(" Xnorm = ");
  119. Serial.print(norm.XAxis);
  120. Serial.print(" Ynorm = ");
  121. Serial.print(norm.YAxis);
  122. Serial.print(" ZNorm = ");
  123. Serial.print(norm.ZAxis);
  124. Serial.println();
  125.  
  126. delay(100);
  127. }
  128.  
  129. while (!compass.begin())
  130. {
  131. Serial.println("Could not find a valid HMC5883L sensor, check wiring!");
  132. delay(500);
  133. }
  134.  
  135. bool HMC5883L::begin()
  136. {
  137. Wire.begin();
  138.  
  139. if ((fastRegister8(HMC5883L_REG_IDENT_A) != 0x48)
  140. || (fastRegister8(HMC5883L_REG_IDENT_B) != 0x34)
  141. || (fastRegister8(HMC5883L_REG_IDENT_C) != 0x33))
  142. {
  143. return false;
  144. }
  145.  
  146. setRange(HMC5883L_RANGE_1_3GA);
  147. setMeasurementMode(HMC5883L_CONTINOUS);
  148. setDataRate(HMC5883L_DATARATE_15HZ);
  149. setSamples(HMC5883L_SAMPLES_1);
  150.  
  151. mgPerDigit = 0.92f;
  152.  
  153. return true;
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement