Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of hmc5883l_test by
main.cpp@0:e1b4cdf08086, 2013-12-04 (annotated)
- Committer:
- yosatak
- Date:
- Wed Dec 04 08:19:12 2013 +0000
- Revision:
- 0:e1b4cdf08086
- Child:
- 1:f4dcabafa985
aaa
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| yosatak | 0:e1b4cdf08086 | 1 | #include "mbed.h" |
| yosatak | 0:e1b4cdf08086 | 2 | #define wt 0.1 |
| yosatak | 0:e1b4cdf08086 | 3 | |
| yosatak | 0:e1b4cdf08086 | 4 | I2C i2c(p9, p10); // sda, scl |
| yosatak | 0:e1b4cdf08086 | 5 | Serial pc(USBTX, USBRX); |
| yosatak | 0:e1b4cdf08086 | 6 | |
| yosatak | 0:e1b4cdf08086 | 7 | |
| yosatak | 0:e1b4cdf08086 | 8 | #define addr 0x3c |
| yosatak | 0:e1b4cdf08086 | 9 | char cmd[2]; |
| yosatak | 0:e1b4cdf08086 | 10 | |
| yosatak | 0:e1b4cdf08086 | 11 | |
| yosatak | 0:e1b4cdf08086 | 12 | |
| yosatak | 0:e1b4cdf08086 | 13 | void init_compass(){ |
| yosatak | 0:e1b4cdf08086 | 14 | |
| yosatak | 0:e1b4cdf08086 | 15 | cmd[0] = 0x02; |
| yosatak | 0:e1b4cdf08086 | 16 | cmd[1] = 0x00; |
| yosatak | 0:e1b4cdf08086 | 17 | i2c.write(addr, cmd, 2); |
| yosatak | 0:e1b4cdf08086 | 18 | } |
| yosatak | 0:e1b4cdf08086 | 19 | |
| yosatak | 0:e1b4cdf08086 | 20 | long int x_get() { |
| yosatak | 0:e1b4cdf08086 | 21 | char data[1]; |
| yosatak | 0:e1b4cdf08086 | 22 | //char cmd[2]; |
| yosatak | 0:e1b4cdf08086 | 23 | int data_buff[2]; |
| yosatak | 0:e1b4cdf08086 | 24 | short int buff; |
| yosatak | 0:e1b4cdf08086 | 25 | |
| yosatak | 0:e1b4cdf08086 | 26 | |
| yosatak | 0:e1b4cdf08086 | 27 | cmd[0] = 0x03; |
| yosatak | 0:e1b4cdf08086 | 28 | i2c.write(addr, cmd, 1); |
| yosatak | 0:e1b4cdf08086 | 29 | wait(wt); |
| yosatak | 0:e1b4cdf08086 | 30 | i2c.read(addr, data,1); |
| yosatak | 0:e1b4cdf08086 | 31 | data_buff[0] = data[0]; |
| yosatak | 0:e1b4cdf08086 | 32 | wait(wt); |
| yosatak | 0:e1b4cdf08086 | 33 | |
| yosatak | 0:e1b4cdf08086 | 34 | cmd[0] = 0x04; |
| yosatak | 0:e1b4cdf08086 | 35 | i2c.write(addr, cmd, 1); |
| yosatak | 0:e1b4cdf08086 | 36 | wait(wt); |
| yosatak | 0:e1b4cdf08086 | 37 | i2c.read(addr, data, 1); |
| yosatak | 0:e1b4cdf08086 | 38 | data_buff[1] = data[0]; |
| yosatak | 0:e1b4cdf08086 | 39 | |
| yosatak | 0:e1b4cdf08086 | 40 | buff = data_buff[0] << 8; |
| yosatak | 0:e1b4cdf08086 | 41 | buff = data_buff[1] | buff; |
| yosatak | 0:e1b4cdf08086 | 42 | /* if (buff & 0x00 == 0xff00){ |
| yosatak | 0:e1b4cdf08086 | 43 | buff = buff - 0x80; |
| yosatak | 0:e1b4cdf08086 | 44 | buff = buff * -1; |
| yosatak | 0:e1b4cdf08086 | 45 | }*/ |
| yosatak | 0:e1b4cdf08086 | 46 | return buff; |
| yosatak | 0:e1b4cdf08086 | 47 | } |
| yosatak | 0:e1b4cdf08086 | 48 | |
| yosatak | 0:e1b4cdf08086 | 49 | long int z_get() { |
| yosatak | 0:e1b4cdf08086 | 50 | char data[1]; |
| yosatak | 0:e1b4cdf08086 | 51 | int data_buff[2]; |
| yosatak | 0:e1b4cdf08086 | 52 | short int buff; |
| yosatak | 0:e1b4cdf08086 | 53 | |
| yosatak | 0:e1b4cdf08086 | 54 | |
| yosatak | 0:e1b4cdf08086 | 55 | cmd[0] = 0x05; |
| yosatak | 0:e1b4cdf08086 | 56 | i2c.write(addr, cmd, 1); |
| yosatak | 0:e1b4cdf08086 | 57 | wait(wt); |
| yosatak | 0:e1b4cdf08086 | 58 | i2c.read(addr, data,1); |
| yosatak | 0:e1b4cdf08086 | 59 | data_buff[0] = data[0]; |
| yosatak | 0:e1b4cdf08086 | 60 | wait(wt); |
| yosatak | 0:e1b4cdf08086 | 61 | |
| yosatak | 0:e1b4cdf08086 | 62 | cmd[0] = 0x06; |
| yosatak | 0:e1b4cdf08086 | 63 | i2c.write(addr, cmd, 1); |
| yosatak | 0:e1b4cdf08086 | 64 | wait(wt); |
| yosatak | 0:e1b4cdf08086 | 65 | i2c.read(addr, data, 1); |
| yosatak | 0:e1b4cdf08086 | 66 | data_buff[1] = data[0]; |
| yosatak | 0:e1b4cdf08086 | 67 | |
| yosatak | 0:e1b4cdf08086 | 68 | buff = data_buff[0] << 8; |
| yosatak | 0:e1b4cdf08086 | 69 | buff = data_buff[1] | buff; |
| yosatak | 0:e1b4cdf08086 | 70 | |
| yosatak | 0:e1b4cdf08086 | 71 | return buff; |
| yosatak | 0:e1b4cdf08086 | 72 | } |
| yosatak | 0:e1b4cdf08086 | 73 | |
| yosatak | 0:e1b4cdf08086 | 74 | long int y_get() { |
| yosatak | 0:e1b4cdf08086 | 75 | char data[1]; |
| yosatak | 0:e1b4cdf08086 | 76 | char data_buff[2]; |
| yosatak | 0:e1b4cdf08086 | 77 | short int buff; |
| yosatak | 0:e1b4cdf08086 | 78 | |
| yosatak | 0:e1b4cdf08086 | 79 | |
| yosatak | 0:e1b4cdf08086 | 80 | cmd[0] = 0x07; |
| yosatak | 0:e1b4cdf08086 | 81 | i2c.write(addr, cmd, 1); |
| yosatak | 0:e1b4cdf08086 | 82 | wait(wt); |
| yosatak | 0:e1b4cdf08086 | 83 | i2c.read(addr, data,1); |
| yosatak | 0:e1b4cdf08086 | 84 | data_buff[0] = data[0]; |
| yosatak | 0:e1b4cdf08086 | 85 | wait(wt); |
| yosatak | 0:e1b4cdf08086 | 86 | |
| yosatak | 0:e1b4cdf08086 | 87 | cmd[0] = 0x08; |
| yosatak | 0:e1b4cdf08086 | 88 | i2c.write(addr, cmd, 1); |
| yosatak | 0:e1b4cdf08086 | 89 | wait(wt); |
| yosatak | 0:e1b4cdf08086 | 90 | i2c.read(addr, data, 1); |
| yosatak | 0:e1b4cdf08086 | 91 | data_buff[1] = data[0]; |
| yosatak | 0:e1b4cdf08086 | 92 | |
| yosatak | 0:e1b4cdf08086 | 93 | buff = data_buff[0] << 8; |
| yosatak | 0:e1b4cdf08086 | 94 | buff = data_buff[1] | buff; |
| yosatak | 0:e1b4cdf08086 | 95 | |
| yosatak | 0:e1b4cdf08086 | 96 | return buff; |
| yosatak | 0:e1b4cdf08086 | 97 | } |
| yosatak | 0:e1b4cdf08086 | 98 | |
| yosatak | 0:e1b4cdf08086 | 99 | int main() { |
| yosatak | 0:e1b4cdf08086 | 100 | init_compass(); |
| yosatak | 0:e1b4cdf08086 | 101 | while(1) { |
| yosatak | 0:e1b4cdf08086 | 102 | pc.printf("%d/ %d/ %d\r\n", x_get(), y_get(), z_get()); |
| yosatak | 0:e1b4cdf08086 | 103 | wait(0); |
| yosatak | 0:e1b4cdf08086 | 104 | } |
| yosatak | 0:e1b4cdf08086 | 105 | } |
