First draft HMC5883 magnetometer sensor using physical quantities, outputting via serial port using std::cout on mbed os 5
main.cpp@11:de7c9ae7ef65, 2020-03-26 (annotated)
- Committer:
- skyscraper
- Date:
- Thu Mar 26 22:58:21 2020 +0000
- Revision:
- 11:de7c9ae7ef65
- Parent:
- 10:75c8ce89aeb7
Changed to use threads
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
skyscraper | 0:37dbfb036586 | 1 | |
skyscraper | 0:37dbfb036586 | 2 | #include "mbed.h" |
skyscraper | 8:c5dc1ce10722 | 3 | #include "magnetometer.h" |
skyscraper | 9:87a7169b4d5c | 4 | |
skyscraper | 10:75c8ce89aeb7 | 5 | void loop_forever(std::string const & str); |
skyscraper | 10:75c8ce89aeb7 | 6 | |
skyscraper | 11:de7c9ae7ef65 | 7 | void mag_service() |
skyscraper | 0:37dbfb036586 | 8 | { |
skyscraper | 11:de7c9ae7ef65 | 9 | std::cout << "magnetometer service\n"; |
skyscraper | 0:37dbfb036586 | 10 | |
skyscraper | 8:c5dc1ce10722 | 11 | if ( !mag_init()){ |
skyscraper | 8:c5dc1ce10722 | 12 | loop_forever("failed to init magnetometer\n"); |
skyscraper | 0:37dbfb036586 | 13 | } |
skyscraper | 2:9ffb2f18756b | 14 | |
skyscraper | 8:c5dc1ce10722 | 15 | uint64_t constexpr update_rate_ms = 20U; |
skyscraper | 11:de7c9ae7ef65 | 16 | |
skyscraper | 11:de7c9ae7ef65 | 17 | auto wake = Kernel::get_ms_count(); |
skyscraper | 9:87a7169b4d5c | 18 | |
skyscraper | 8:c5dc1ce10722 | 19 | for (;;){ |
skyscraper | 9:87a7169b4d5c | 20 | |
skyscraper | 8:c5dc1ce10722 | 21 | mag_start_measurement(); |
skyscraper | 10:75c8ce89aeb7 | 22 | |
skyscraper | 8:c5dc1ce10722 | 23 | do{ |
skyscraper | 8:c5dc1ce10722 | 24 | ThisThread::sleep_for(10U); |
skyscraper | 8:c5dc1ce10722 | 25 | } while ( ! mag_data_ready() ); |
skyscraper | 8:c5dc1ce10722 | 26 | |
skyscraper | 8:c5dc1ce10722 | 27 | quan::three_d::vect<quan::magnetic_flux_density::uT> v; |
skyscraper | 8:c5dc1ce10722 | 28 | if (mag_read(v)){ |
skyscraper | 11:de7c9ae7ef65 | 29 | std::cout << "val = " << v << '\n'; |
skyscraper | 8:c5dc1ce10722 | 30 | } |
skyscraper | 11:de7c9ae7ef65 | 31 | |
skyscraper | 11:de7c9ae7ef65 | 32 | wake += update_rate_ms; |
skyscraper | 11:de7c9ae7ef65 | 33 | ThisThread::sleep_until(wake); |
skyscraper | 8:c5dc1ce10722 | 34 | } |
skyscraper | 11:de7c9ae7ef65 | 35 | } |
skyscraper | 11:de7c9ae7ef65 | 36 | |
skyscraper | 11:de7c9ae7ef65 | 37 | void led_blink_service() |
skyscraper | 11:de7c9ae7ef65 | 38 | { |
skyscraper | 11:de7c9ae7ef65 | 39 | DigitalOut led(LED2,1); |
skyscraper | 11:de7c9ae7ef65 | 40 | |
skyscraper | 11:de7c9ae7ef65 | 41 | std::cout << "Blink service\n"; |
skyscraper | 11:de7c9ae7ef65 | 42 | |
skyscraper | 11:de7c9ae7ef65 | 43 | uint64_t constexpr update_rate_ms = 500U; |
skyscraper | 11:de7c9ae7ef65 | 44 | auto wake = Kernel::get_ms_count(); |
skyscraper | 11:de7c9ae7ef65 | 45 | for (;;){ |
skyscraper | 11:de7c9ae7ef65 | 46 | wake += update_rate_ms; |
skyscraper | 11:de7c9ae7ef65 | 47 | ThisThread::sleep_until(wake); |
skyscraper | 11:de7c9ae7ef65 | 48 | led = ( led == 0) ? 1: 0; |
skyscraper | 11:de7c9ae7ef65 | 49 | } |
skyscraper | 11:de7c9ae7ef65 | 50 | } |
skyscraper | 11:de7c9ae7ef65 | 51 | |
skyscraper | 11:de7c9ae7ef65 | 52 | int main() |
skyscraper | 11:de7c9ae7ef65 | 53 | { |
skyscraper | 11:de7c9ae7ef65 | 54 | Thread magThread; |
skyscraper | 11:de7c9ae7ef65 | 55 | magThread.start(mag_service); |
skyscraper | 11:de7c9ae7ef65 | 56 | |
skyscraper | 11:de7c9ae7ef65 | 57 | Thread blinkThread; |
skyscraper | 11:de7c9ae7ef65 | 58 | blinkThread.start(led_blink_service); |
skyscraper | 11:de7c9ae7ef65 | 59 | |
skyscraper | 11:de7c9ae7ef65 | 60 | for (;;){;} |
skyscraper | 11:de7c9ae7ef65 | 61 | |
skyscraper | 0:37dbfb036586 | 62 | } |