diff --git a/examples/HMC5883L/HMC5883L.py b/examples/HMC5883L/HMC5883L.py new file mode 100644 index 0000000..cee058e --- /dev/null +++ b/examples/HMC5883L/HMC5883L.py @@ -0,0 +1,183 @@ +''' +HMC5883L 3 Axis Digital Compass +datascheet: https://cdn-shop.adafruit.com/datasheets/HMC5883L_3-Axis_Digital_Compass_IC.pdf +autor: Karol Bieniaszewski +c: 2017 +The MIT License (MIT) +Copyright (c) 2017 Karol Bieniaszewski, liviuslivius at op dot pl +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +''' + +from machine import I2C +from array import array +import math +import gc +import time + +HMC5883L_sampling_mode_continous = bytes([0x00]) +HMC5883L_sampling_mode_single = bytes([0x01]) +HMC5883L_sampling_mode_idle = bytes([0x02]) + +HMC5883L_samples_1 = 0 +HMC5883L_samples_2 = 32 +HMC5883L_samples_4 = 64 +HMC5883L_samples_8 = 96 + +HMC5883L_rate_00_75 = 0 +HMC5883L_rate_01_50 = 4 +HMC5883L_rate_03_00 = 8 +HMC5883L_rate_07_50 = 12 +HMC5883L_rate_15_00 = 16 +HMC5883L_rate_75_00 = 20 + +HMC5883L_measurement_mode_bias_disabled = 0 +HMC5883L_measurement_mode_bias_positive = 1 +HMC5883L_measurement_mode_bias_negative = 2 + +HMC5883L_gauss_gain = { + "0.88": [0, 0.73], + "1.3": [32, 0.92], + "1.9": [64, 1.22], + "2.5": [96, 1.52], + "4.0": [128, 2.27], + "4.7": [160, 2.56], + "5.6": [192, 3.03], + "8.1": [224, 4.35] + } + +def complement2toInt(value, len): + if (value & (1 << len - 1)): + value = value - (1< 2 * math.pi: + headingRad -= 2 * math.pi + + self.headingDeg = headingRad * 180 / math.pi + + def __str__(self): + ''' + first call: + self.readAxes() + self.heading() + ''' + return "X: " + str(self.x) + ", Y: " + str(self.y) + ", Z: " + str(self.z) + " - Heading: " + str(self.headingDeg) + ", Declination: " + str((self.declDegrees,self.declMinutes)) + "\n" diff --git a/examples/HMC5883L/testCompass.py b/examples/HMC5883L/testCompass.py new file mode 100644 index 0000000..f42ecd7 --- /dev/null +++ b/examples/HMC5883L/testCompass.py @@ -0,0 +1,11 @@ +# execfile('testCompass.py') +import HMC5883L +import gc +import time +m = HMC5883L.HMC5883L() +while True: + m.readAxes() + m.heading() + print(m) + time.sleep_ms(1000) + gc.collect()