Andy Little
/
hmc5883_test
Detect a HMC5883 magnetometer by reading the id registers for NUCLEO-L432KC
main.cpp@1:8cd11758eff3, 2018-08-30 (annotated)
- Committer:
- skyscraper
- Date:
- Thu Aug 30 20:07:17 2018 +0000
- Revision:
- 1:8cd11758eff3
- Parent:
- 0:10e9548cdb3d
change from string to detect hmc5883 message
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
skyscraper | 0:10e9548cdb3d | 1 | |
skyscraper | 0:10e9548cdb3d | 2 | #include "mbed.h" |
skyscraper | 1:8cd11758eff3 | 3 | #include <cstring> |
skyscraper | 0:10e9548cdb3d | 4 | #include <I2C.h> |
skyscraper | 0:10e9548cdb3d | 5 | #include <Serial.h> |
skyscraper | 0:10e9548cdb3d | 6 | |
skyscraper | 0:10e9548cdb3d | 7 | namespace { |
skyscraper | 0:10e9548cdb3d | 8 | DigitalOut led1(LED1); |
skyscraper | 0:10e9548cdb3d | 9 | |
skyscraper | 0:10e9548cdb3d | 10 | Serial pc(USBTX, USBRX); // tx, rx |
skyscraper | 0:10e9548cdb3d | 11 | |
skyscraper | 0:10e9548cdb3d | 12 | I2C i2c(PA_10,PA_9); // I2C1 |
skyscraper | 0:10e9548cdb3d | 13 | |
skyscraper | 0:10e9548cdb3d | 14 | const uint8_t i2c_addr = 0x3D; |
skyscraper | 0:10e9548cdb3d | 15 | // idreg |
skyscraper | 0:10e9548cdb3d | 16 | const char id_regA = 10U; |
skyscraper | 0:10e9548cdb3d | 17 | const char id_regB = 11U; |
skyscraper | 0:10e9548cdb3d | 18 | const char id_regC = 12U; |
skyscraper | 0:10e9548cdb3d | 19 | } |
skyscraper | 0:10e9548cdb3d | 20 | |
skyscraper | 0:10e9548cdb3d | 21 | int main() |
skyscraper | 0:10e9548cdb3d | 22 | { |
skyscraper | 0:10e9548cdb3d | 23 | //wait for mag to init |
skyscraper | 0:10e9548cdb3d | 24 | Thread::wait(500); |
skyscraper | 1:8cd11758eff3 | 25 | |
skyscraper | 0:10e9548cdb3d | 26 | // move pointer to loc |
skyscraper | 1:8cd11758eff3 | 27 | if ( i2c.write(i2c_addr,&id_regA,1) == 0){ |
skyscraper | 1:8cd11758eff3 | 28 | char id_input[4]; |
skyscraper | 1:8cd11758eff3 | 29 | i2c.read(i2c_addr,id_input,3); |
skyscraper | 1:8cd11758eff3 | 30 | id_input[3] = '\0'; |
skyscraper | 1:8cd11758eff3 | 31 | if (strcmp(id_input,"H43") == 0){ |
skyscraper | 1:8cd11758eff3 | 32 | pc.printf("Detected a HMC5883",id_input); |
skyscraper | 1:8cd11758eff3 | 33 | }else{ |
skyscraper | 1:8cd11758eff3 | 34 | pc.printf("config Not got a HMC5883",id_input); |
skyscraper | 1:8cd11758eff3 | 35 | } |
skyscraper | 1:8cd11758eff3 | 36 | }else{ |
skyscraper | 1:8cd11758eff3 | 37 | pc.printf("HMC5883 write failed\n"); |
skyscraper | 1:8cd11758eff3 | 38 | } |
skyscraper | 0:10e9548cdb3d | 39 | //check we are still running |
skyscraper | 0:10e9548cdb3d | 40 | for (;;){ |
skyscraper | 0:10e9548cdb3d | 41 | led1 = !led1; |
skyscraper | 0:10e9548cdb3d | 42 | Thread::wait(250); |
skyscraper | 0:10e9548cdb3d | 43 | } |
skyscraper | 0:10e9548cdb3d | 44 | } |