First draft HMC5883 magnetometer sensor using physical quantities, outputting via serial port using std::cout on mbed os 5

Committer:
skyscraper
Date:
Thu Mar 26 21:13:44 2020 +0000
Revision:
8:c5dc1ce10722
Parent:
hmc5883.h@3:2834be4e10ef
Child:
9:87a7169b4d5c
Try to make magnetometer more generic. Next to do a mag service and put in own thread

Who changed what in which revision?

UserRevisionLine numberNew contents of line
skyscraper 8:c5dc1ce10722 1 #ifndef SKYSCRAPER_MBED_MAGNETOMETER_H_INCLUDED
skyscraper 8:c5dc1ce10722 2 #define SKYSCRAPER_MBED_MAGNETOMETER_H_INCLUDED
skyscraper 2:9ffb2f18756b 3
skyscraper 8:c5dc1ce10722 4 #include <quan/out/time.hpp>
skyscraper 2:9ffb2f18756b 5 #include <quan/out/magnetic_flux_density.hpp>
skyscraper 2:9ffb2f18756b 6 #include <quan/three_d/out/vect.hpp>
skyscraper 2:9ffb2f18756b 7
skyscraper 8:c5dc1ce10722 8 QUAN_QUANTITY_LITERAL(magnetic_flux_density,gauss);
skyscraper 8:c5dc1ce10722 9 QUAN_QUANTITY_LITERAL(magnetic_flux_density,milli_gauss);
skyscraper 8:c5dc1ce10722 10 QUAN_QUANTITY_LITERAL(magnetic_flux_density,uT);
skyscraper 8:c5dc1ce10722 11
skyscraper 8:c5dc1ce10722 12 bool mag_init();
skyscraper 8:c5dc1ce10722 13 bool mag_start_measurement();
skyscraper 8:c5dc1ce10722 14 bool mag_data_ready();
skyscraper 8:c5dc1ce10722 15 bool mag_read(quan::three_d::vect<quan::magnetic_flux_density::uT> & v);
skyscraper 8:c5dc1ce10722 16
skyscraper 8:c5dc1ce10722 17 #if 0
skyscraper 2:9ffb2f18756b 18 //true if the hmc5883 is detected
skyscraper 2:9ffb2f18756b 19 bool mag_detected();
skyscraper 2:9ffb2f18756b 20
skyscraper 2:9ffb2f18756b 21 // only 1,2,4,8 available
skyscraper 2:9ffb2f18756b 22 // else returns false and does nothing
skyscraper 2:9ffb2f18756b 23 bool mag_set_samples_average(int n_samples);
skyscraper 2:9ffb2f18756b 24
skyscraper 2:9ffb2f18756b 25 // set data rate specified as a rational
skyscraper 2:9ffb2f18756b 26 //data rate 0.75 <3,4>, 1.5 <3,2>, 3 <3>,7.5 <15,2>, 15 <15>(Default)
skyscraper 2:9ffb2f18756b 27 // , 30 <30>, 75 <75>
skyscraper 2:9ffb2f18756b 28 //N.B. wont link if other values specified
skyscraper 2:9ffb2f18756b 29 template <int N, int D=1>
skyscraper 2:9ffb2f18756b 30 bool mag_set_data_rate();
skyscraper 2:9ffb2f18756b 31
skyscraper 2:9ffb2f18756b 32 // set +- range
skyscraper 2:9ffb2f18756b 33 // sets the nearest greater equal +-range to abs(range_in)
skyscraper 2:9ffb2f18756b 34 // N.B so wont necessarily set exact range input
skyscraper 2:9ffb2f18756b 35 // TODO: get_range
skyscraper 2:9ffb2f18756b 36 // returns false if range is too big
skyscraper 2:9ffb2f18756b 37 bool mag_set_range(quan::magnetic_flux_density::uT const & range_in);
skyscraper 2:9ffb2f18756b 38
skyscraper 2:9ffb2f18756b 39 quan::magnetic_flux_density::uT mag_get_range();
skyscraper 2:9ffb2f18756b 40
skyscraper 2:9ffb2f18756b 41 // probably remove and decide how to do this behind the scenes
skyscraper 2:9ffb2f18756b 42 // in concert with mag_set_data_rate
skyscraper 2:9ffb2f18756b 43 bool mag_set_continuous_measurement_mode();
skyscraper 3:2834be4e10ef 44
skyscraper 3:2834be4e10ef 45 // could rename to start single_measurement?
skyscraper 2:9ffb2f18756b 46 bool mag_set_single_measurement_mode();
skyscraper 2:9ffb2f18756b 47
skyscraper 2:9ffb2f18756b 48 bool mag_do_single_measurement(
skyscraper 2:9ffb2f18756b 49 quan::three_d::vect<quan::magnetic_flux_density::uT>& result
skyscraper 2:9ffb2f18756b 50 );
skyscraper 2:9ffb2f18756b 51
skyscraper 2:9ffb2f18756b 52 // TODO prefer mag enable / disable() ?
skyscraper 2:9ffb2f18756b 53 bool mag_set_idle_mode();
skyscraper 2:9ffb2f18756b 54
skyscraper 2:9ffb2f18756b 55 // TODO callback?
skyscraper 2:9ffb2f18756b 56 bool mag_data_ready();
skyscraper 2:9ffb2f18756b 57
skyscraper 2:9ffb2f18756b 58 // TODO ignore this make private
skyscraper 2:9ffb2f18756b 59 bool mag_data_locked();
skyscraper 2:9ffb2f18756b 60
skyscraper 2:9ffb2f18756b 61 bool mag_read(quan::three_d::vect<quan::magnetic_flux_density::uT> & v);
skyscraper 3:2834be4e10ef 62
skyscraper 3:2834be4e10ef 63 #endif
skyscraper 8:c5dc1ce10722 64 #endif
skyscraper 3:2834be4e10ef 65