Ignore:
Timestamp:
Apr 30, 2016, 11:29:25 PM (8 years ago)
Author:
ertl-honda
Message:

1.7.10のファイルに更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • rtos_arduino/trunk/arduino_lib/libraries/LuckyShield/src/lib/MAG3110.cpp

    r175 r224  
    1616
    1717//Constructor
    18 MAG3110::MAG3110()
    19 {
    20  
    21 }
    22 
    23 
     18// MAG3110::MAG3110()
     19// {
     20// }
    2421
    2522// Configure magnetometer
    2623void 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
    3025  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
     26  Wire.write(0x11);              // cntrl register2
     27  Wire.write(0x80);              // send 0x80, enable auto resets
     28  Wire.endTransmission();       // stop transmitting
    3429 
    3530  delay(15);
    3631 
    37   //CTRL_REG2:
    38   //AutoMagRst|---|Raw|Mag_Rst|---|---|---|---|
    39   //    1     | 0 | 0 |   0   | 0 | 0 | 0 | 0 |
    4032  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
     33  Wire.write(0x10);              // cntrl register1
     34  Wire.write(1);                 // send 0x01, active mode
     35  Wire.endTransmission();       // stop transmitting
    4436}
    4537
     38void 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
    4645
    47 // read X value
    48 int MAG3110::readx(void)
     46int MAG3110::read16Data(byte MSB, byte LSB)
    4947{
    5048  int xl, xh;  //define the MSB and LSB
    5149 
    5250  Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E
    53   Wire.write(0x01);              // x MSB reg
     51  Wire.write(MSB);              // x MSB reg
    5452  Wire.endTransmission();       // stop transmitting
    5553 
     
    6563 
    6664  Wire.beginTransmission(MAG_ADDR); // transmit to device 0x0E
    67   Wire.write(0x02);              // x LSB reg
     65  Wire.write(LSB);              // x LSB reg
    6866  Wire.endTransmission();       // stop transmitting
    6967 
     
    7674  }
    7775 
    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);
    8082}
    8183
    82 //read Y value
    83 int 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
    118 int 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 }
    15184
    15285MAG3110 mag3110;
Note: See TracChangeset for help on using the changeset viewer.