- Timestamp:
- Apr 30, 2016, 11:29:25 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
rtos_arduino/trunk/arduino_lib/libraries/LuckyShield/src/lib/MAG3110.cpp
r175 r224 16 16 17 17 //Constructor 18 MAG3110::MAG3110() 19 { 20 21 } 22 23 18 // MAG3110::MAG3110() 19 // { 20 // } 24 21 25 22 // Configure magnetometer 26 23 void 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 24 30 25 Wire.beginTransmission(MAG_ADDR);// transmit to device 0x0E 31 Wire.write(0x1 0); // cntrl register132 Wire.write(0x 79); // Active Mode, 1.25 Hz datarate, 8x oversampling33 Wire.endTransmission(); 26 Wire.write(0x11); // cntrl register2 27 Wire.write(0x80); // send 0x80, enable auto resets 28 Wire.endTransmission(); // stop transmitting 34 29 35 30 delay(15); 36 31 37 //CTRL_REG2:38 //AutoMagRst|---|Raw|Mag_Rst|---|---|---|---|39 // 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |40 32 Wire.beginTransmission(MAG_ADDR);// transmit to device 0x0E 41 Wire.write(0x1 1); // cntrl register242 Wire.write( 0x80); // Auto resets before each measurement43 Wire.endTransmission(); 33 Wire.write(0x10); // cntrl register1 34 Wire.write(1); // send 0x01, active mode 35 Wire.endTransmission(); // stop transmitting 44 36 } 45 37 38 void MAG3110::read() 39 { 40 mag_x =read16Data(0x01,0x02); 41 mag_y =read16Data(0x03,0x04); 42 mag_z =read16Data(0x05,0x06); 43 } 44 // read X value 46 45 47 // read X value 48 int MAG3110::readx(void) 46 int MAG3110::read16Data(byte MSB, byte LSB) 49 47 { 50 48 int xl, xh; //define the MSB and LSB 51 49 52 50 Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E 53 Wire.write( 0x01); // x MSB reg51 Wire.write(MSB); // x MSB reg 54 52 Wire.endTransmission(); // stop transmitting 55 53 … … 65 63 66 64 Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E 67 Wire.write( 0x02); // x LSB reg65 Wire.write(LSB); // x LSB reg 68 66 Wire.endTransmission(); // stop transmitting 69 67 … … 76 74 } 77 75 78 int xout = (xl|(xh << 8)); //concatenate the MSB and LSB 79 return xout; 76 int out = (xl|(xh << 8)); //concatenate the MSB and LSB 77 if (out & 0b1000000000000000){ 78 //float yout1 = ((~yout & 0b0111111111111111)+ 1)*(-1) ; 79 return float ((~out & 0b0111111111111111)+ 1)*(-1) ; 80 } 81 return float (out); 80 82 } 81 83 82 //read Y value83 int MAG3110::ready(void)84 {85 int yl, yh; //define the MSB and LSB86 87 Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E88 Wire.write(0x03); // y MSB reg89 Wire.endTransmission(); // stop transmitting90 91 delayMicroseconds(2); //needs at least 1.3us free time between start and stop92 93 Wire.requestFrom(MAG_ADDR, 1); // request 1 byte94 while(Wire.available()) // slave may send less than requested95 {96 yh = Wire.read(); // receive the byte97 }98 99 delayMicroseconds(2); //needs at least 1.3us free time between start and stop100 101 Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E102 Wire.write(0x04); // y LSB reg103 Wire.endTransmission(); // stop transmitting104 105 delayMicroseconds(2); //needs at least 1.3us free time between start and stop106 107 Wire.requestFrom(MAG_ADDR, 1); // request 1 byte108 while(Wire.available()) // slave may send less than requested109 {110 yl = Wire.read(); // receive the byte111 }112 113 int yout = (yl|(yh << 8)); //concatenate the MSB and LSB114 return yout;115 }116 117 // read Z value118 int MAG3110::readz(void)119 {120 int zl, zh; //define the MSB and LSB121 122 Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E123 Wire.write(0x05); // z MSB reg124 Wire.endTransmission(); // stop transmitting125 126 delayMicroseconds(2); //needs at least 1.3us free time between start and stop127 128 Wire.requestFrom(MAG_ADDR, 1); // request 1 byte129 while(Wire.available()) // slave may send less than requested130 {131 zh = Wire.read(); // receive the byte132 }133 134 delayMicroseconds(2); //needs at least 1.3us free time between start and stop135 136 Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E137 Wire.write(0x06); // z LSB reg138 Wire.endTransmission(); // stop transmitting139 140 delayMicroseconds(2); //needs at least 1.3us free time between start and stop141 142 Wire.requestFrom(MAG_ADDR, 1); // request 1 byte143 while(Wire.available()) // slave may send less than requested144 {145 zl = Wire.read(); // receive the byte146 }147 148 int zout = (zl|(zh << 8)); //concatenate the MSB and LSB149 return zout;150 }151 84 152 85 MAG3110 mag3110;
Note:
See TracChangeset
for help on using the changeset viewer.