Yoshitaka Takeuchi
/
hmc5883l_test
asdf
main.cpp@0:e1b4cdf08086, 2013-12-04 (annotated)
- Committer:
- yosatak
- Date:
- Wed Dec 04 08:19:12 2013 +0000
- Revision:
- 0:e1b4cdf08086
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 | } |