First draft HMC5883 magnetometer sensor using physical quantities, outputting via serial port using std::cout on mbed os 5
magnetometer.h@8:c5dc1ce10722, 2020-03-26 (annotated)
- 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?
User | Revision | Line number | New 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 |