source: rtos_arduino/trunk/arduino_lib/libraries/LuckyShield/src/lib/MAG3110.cpp@ 175

Last change on this file since 175 was 175, checked in by ertl-honda, 8 years ago

ライブラリを Arduino IDE 1.7.9 にupdate

File size: 4.3 KB
Line 
1/*
2mag3110.cpp
3libary for using the I2C mag3110 magnetometer
4
5(c) Written by Jeroen Cappaert for NanoSatisfi, August 2012
6
7 - 21 Mar. 2016
8 Library modified to work with Arduino Lucky Shield
9 by andrea[at]arduino[dot]org
10
11*/
12
13#include <Arduino.h>
14#include "MAG3110.h"
15#include <Wire.h>
16
17//Constructor
18MAG3110::MAG3110()
19{
20
21}
22
23
24
25// Configure magnetometer
26void MAG3110::begin(void) {
27 //CTRL_REG1
28 //DR2|DR1|DR0|OS1|OS0|FastRead|Trigger|ActiveMode|
29 // 0 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |=dec121
30 Wire.beginTransmission(MAG_ADDR);// transmit to device 0x0E
31 Wire.write(0x10); // cntrl register1
32 Wire.write(0x79); // Active Mode, 1.25 Hz datarate, 8x oversampling
33 Wire.endTransmission(); // stop transmitting
34
35 delay(15);
36
37 //CTRL_REG2:
38 //AutoMagRst|---|Raw|Mag_Rst|---|---|---|---|
39 // 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
40 Wire.beginTransmission(MAG_ADDR);// transmit to device 0x0E
41 Wire.write(0x11); // cntrl register2
42 Wire.write(0x80); // Auto resets before each measurement
43 Wire.endTransmission(); // stop transmitting
44}
45
46
47// read X value
48int MAG3110::readx(void)
49{
50 int xl, xh; //define the MSB and LSB
51
52 Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E
53 Wire.write(0x01); // x MSB reg
54 Wire.endTransmission(); // stop transmitting
55
56 delayMicroseconds(2); //needs at least 1.3us free time between start and stop
57
58 Wire.requestFrom(MAG_ADDR, 1); // request 1 byte
59 while(Wire.available()) // slave may send less than requested
60 {
61 xh = Wire.read(); // receive the byte
62 }
63
64 delayMicroseconds(2); //needs at least 1.3us free time between start and stop
65
66 Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E
67 Wire.write(0x02); // x LSB reg
68 Wire.endTransmission(); // stop transmitting
69
70 delayMicroseconds(2); //needs at least 1.3us free time between start and stop
71
72 Wire.requestFrom(MAG_ADDR, 1); // request 1 byte
73 while(Wire.available()) // slave may send less than requested
74 {
75 xl = Wire.read(); // receive the byte
76 }
77
78 int xout = (xl|(xh << 8)); //concatenate the MSB and LSB
79 return xout;
80}
81
82//read Y value
83int MAG3110::ready(void)
84{
85 int yl, yh; //define the MSB and LSB
86
87 Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E
88 Wire.write(0x03); // y MSB reg
89 Wire.endTransmission(); // stop transmitting
90
91 delayMicroseconds(2); //needs at least 1.3us free time between start and stop
92
93 Wire.requestFrom(MAG_ADDR, 1); // request 1 byte
94 while(Wire.available()) // slave may send less than requested
95 {
96 yh = Wire.read(); // receive the byte
97 }
98
99 delayMicroseconds(2); //needs at least 1.3us free time between start and stop
100
101 Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E
102 Wire.write(0x04); // y LSB reg
103 Wire.endTransmission(); // stop transmitting
104
105 delayMicroseconds(2); //needs at least 1.3us free time between start and stop
106
107 Wire.requestFrom(MAG_ADDR, 1); // request 1 byte
108 while(Wire.available()) // slave may send less than requested
109 {
110 yl = Wire.read(); // receive the byte
111 }
112
113 int yout = (yl|(yh << 8)); //concatenate the MSB and LSB
114 return yout;
115}
116
117// read Z value
118int MAG3110::readz(void)
119{
120 int zl, zh; //define the MSB and LSB
121
122 Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E
123 Wire.write(0x05); // z MSB reg
124 Wire.endTransmission(); // stop transmitting
125
126 delayMicroseconds(2); //needs at least 1.3us free time between start and stop
127
128 Wire.requestFrom(MAG_ADDR, 1); // request 1 byte
129 while(Wire.available()) // slave may send less than requested
130 {
131 zh = Wire.read(); // receive the byte
132 }
133
134 delayMicroseconds(2); //needs at least 1.3us free time between start and stop
135
136 Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E
137 Wire.write(0x06); // z LSB reg
138 Wire.endTransmission(); // stop transmitting
139
140 delayMicroseconds(2); //needs at least 1.3us free time between start and stop
141
142 Wire.requestFrom(MAG_ADDR, 1); // request 1 byte
143 while(Wire.available()) // slave may send less than requested
144 {
145 zl = Wire.read(); // receive the byte
146 }
147
148 int zout = (zl|(zh << 8)); //concatenate the MSB and LSB
149 return zout;
150}
151
152MAG3110 mag3110;
153
Note: See TracBrowser for help on using the repository browser.