syouichi imamori / Mbed OS MulticopterQuadX

Dependencies:   IAP

Committer:
komaida424
Date:
Thu Feb 13 16:07:07 2014 +0000
Revision:
3:27407c4984cf
Parent:
2:59ac9df97701
Child:
4:4060309b9cc0
revsion.1.30

Who changed what in which revision?

UserRevisionLine numberNew contents of line
komaida424 0:cca1c4e84da4 1 #include "mbed.h"
komaida424 0:cca1c4e84da4 2 #include "I2cPeripherals.h"
komaida424 2:59ac9df97701 3 //Serial pc(USBTX, USBRX);
komaida424 0:cca1c4e84da4 4 I2cPeripherals::I2cPeripherals(PinName sda, PinName scl): _i2c(sda,scl)
komaida424 2:59ac9df97701 5 {
komaida424 2:59ac9df97701 6
komaida424 3:27407c4984cf 7 _i2c.frequency(200000);
komaida424 2:59ac9df97701 8 // LCD_contrast = 60;
komaida424 2:59ac9df97701 9 wait(0.5);
komaida424 2:59ac9df97701 10 LCD_addr = 0;
komaida424 2:59ac9df97701 11 Gyro_addr = 0;
komaida424 2:59ac9df97701 12 Accel_addr = 0;
komaida424 2:59ac9df97701 13 barometor_addr = 0;
komaida424 2:59ac9df97701 14 find();
komaida424 2:59ac9df97701 15 start();
komaida424 2:59ac9df97701 16
komaida424 0:cca1c4e84da4 17 }
komaida424 0:cca1c4e84da4 18
komaida424 2:59ac9df97701 19 void I2cPeripherals::start(int contrast)
komaida424 0:cca1c4e84da4 20 {
komaida424 2:59ac9df97701 21 char tx[2];
komaida424 2:59ac9df97701 22 // find(); // I2C interface sensor detect
komaida424 2:59ac9df97701 23 #ifdef ST7032
komaida424 2:59ac9df97701 24 LCD_addr = 0x7c;
komaida424 2:59ac9df97701 25 LCD_data = 0x40;
komaida424 2:59ac9df97701 26 tx[0] = 0x00;
komaida424 2:59ac9df97701 27 tx[1] = 0x38;
komaida424 2:59ac9df97701 28 if ( _i2c.write(LCD_addr,tx,2) == 0 ) {
komaida424 2:59ac9df97701 29 tx[1] = 0x39;
komaida424 2:59ac9df97701 30 _i2c.write(LCD_addr,tx,2);
komaida424 2:59ac9df97701 31 tx[1] = 0x14; //1F
komaida424 2:59ac9df97701 32 _i2c.write(LCD_addr,tx,2);
komaida424 2:59ac9df97701 33 tx[1] = 0x70 | (contrast & 0x0F);
komaida424 2:59ac9df97701 34 _i2c.write(LCD_addr,tx,2);
komaida424 2:59ac9df97701 35 tx[1] = 0x5C | ((contrast >> 4) & 0x03);
komaida424 2:59ac9df97701 36 _i2c.write(LCD_addr,tx,2);
komaida424 2:59ac9df97701 37 tx[1] = 0x6A;
komaida424 2:59ac9df97701 38 _i2c.write(LCD_addr,tx,2);
komaida424 2:59ac9df97701 39 wait(0.3);
komaida424 2:59ac9df97701 40 tx[1] = 0x0C;
komaida424 2:59ac9df97701 41 _i2c.write(LCD_addr,tx,2); // display on
komaida424 2:59ac9df97701 42 tx[1] = 0x06;
komaida424 2:59ac9df97701 43 _i2c.write(LCD_addr,tx,2);
komaida424 2:59ac9df97701 44 // tx[0] = 0x40;
komaida424 2:59ac9df97701 45 // tx[1] = '*';
komaida424 2:59ac9df97701 46 // _i2c.write(LCD_addr,tx,2); // Display clear
komaida424 2:59ac9df97701 47 return;
komaida424 2:59ac9df97701 48 }
komaida424 2:59ac9df97701 49 #endif
komaida424 2:59ac9df97701 50 #ifdef ACM1602
komaida424 2:59ac9df97701 51 LCD_addr = 0xA0;
komaida424 2:59ac9df97701 52 LCD_data = 0x80;
komaida424 2:59ac9df97701 53 tx[0] = 0x00;
komaida424 2:59ac9df97701 54 tx[1] = 0x01;
komaida424 2:59ac9df97701 55 if ( _i2c.write(LCD_addr,tx,2) == 0 ) {
komaida424 2:59ac9df97701 56 wait(0.005);
komaida424 2:59ac9df97701 57 tx[1] = 0x38;
komaida424 2:59ac9df97701 58 _i2c.write(LCD_addr,tx,2);
komaida424 2:59ac9df97701 59 wait(0.005);
komaida424 2:59ac9df97701 60 tx[1] = 0x0F;
komaida424 2:59ac9df97701 61 _i2c.write(LCD_addr,tx,2);
komaida424 2:59ac9df97701 62 wait(0.005);
komaida424 2:59ac9df97701 63 tx[1] = 0x06;
komaida424 2:59ac9df97701 64 _i2c.write(LCD_addr,tx,2);
komaida424 2:59ac9df97701 65 wait(0.005);
komaida424 2:59ac9df97701 66 return;
komaida424 2:59ac9df97701 67 }
komaida424 2:59ac9df97701 68 #endif
komaida424 2:59ac9df97701 69 LCD_addr = 0;
komaida424 0:cca1c4e84da4 70 }
komaida424 0:cca1c4e84da4 71
komaida424 2:59ac9df97701 72 void I2cPeripherals::find()
komaida424 0:cca1c4e84da4 73 {
komaida424 0:cca1c4e84da4 74 char tx[2];
komaida424 2:59ac9df97701 75 char rx[1];
komaida424 2:59ac9df97701 76 SensorInf sens[10] = { 0xD0,0x68,0x00, //ITG3200
komaida424 2:59ac9df97701 77 0xD2,0x68,0x00,
komaida424 2:59ac9df97701 78 0xD0,0x68,0x75, //MPU6050
komaida424 2:59ac9df97701 79 0xD2,0x68,0x75,
komaida424 2:59ac9df97701 80 0xD4,0xD4,0x0F, //L3GD20
komaida424 2:59ac9df97701 81 0xD6,0xD4,0x0F,
komaida424 2:59ac9df97701 82 0xA6,0xE5,0x00, //ADXL345
komaida424 2:59ac9df97701 83 0x3A,0xE5,0x00,
komaida424 2:59ac9df97701 84 0xB8,0xBB,0x0F, //LPS331
komaida424 2:59ac9df97701 85 0xBA,0xBB,0x0F
komaida424 2:59ac9df97701 86 };
komaida424 0:cca1c4e84da4 87
komaida424 2:59ac9df97701 88 for ( int num = 0; num < 10; num++ ) {
komaida424 2:59ac9df97701 89 tx[0]= sens[num].whoaddr;
komaida424 2:59ac9df97701 90 if ( _i2c.write(sens[num].addr,tx,1,true) != 0 ) continue;
komaida424 2:59ac9df97701 91 _i2c.read (sens[num].addr,rx,1);
komaida424 2:59ac9df97701 92 if ( (rx[0]&0x7E) != (sens[num].who&0x7E) ) continue;
komaida424 0:cca1c4e84da4 93
komaida424 2:59ac9df97701 94 switch ( num ) {
komaida424 2:59ac9df97701 95 #ifdef ITG3200
komaida424 2:59ac9df97701 96 case 0: //ITG3200
komaida424 2:59ac9df97701 97 case 1:
komaida424 2:59ac9df97701 98 Gyro_addr = sens[num].addr;
komaida424 2:59ac9df97701 99 Gyro_data = 0x1D;
komaida424 2:59ac9df97701 100 tx[0] = 0x16;
komaida424 2:59ac9df97701 101 tx[1] = 0x18; // 0x1D
komaida424 2:59ac9df97701 102 _i2c.write(sens[num].addr,tx,2);
komaida424 2:59ac9df97701 103 tx[0] = 0x3E;
komaida424 2:59ac9df97701 104 tx[1] = 0x01;
komaida424 2:59ac9df97701 105 _i2c.write(sens[num].addr,tx,2);
komaida424 2:59ac9df97701 106 wait_ms(10);
komaida424 2:59ac9df97701 107 break;
komaida424 2:59ac9df97701 108 #endif
komaida424 2:59ac9df97701 109 #ifdef MPU6050
komaida424 2:59ac9df97701 110 case 2: //MPU6050
komaida424 2:59ac9df97701 111 case 3:
komaida424 2:59ac9df97701 112 Gyro_addr = sens[num].addr;
komaida424 2:59ac9df97701 113 Gyro_data = 0x43;
komaida424 2:59ac9df97701 114 Accel_addr = sens[num].addr;
komaida424 2:59ac9df97701 115 Accel_data = 0x3B;
komaida424 2:59ac9df97701 116 tx[0] = 0x6B;
komaida424 2:59ac9df97701 117 tx[1] = 0x00; // PWR on
komaida424 2:59ac9df97701 118 _i2c.write(sens[num].addr,tx,2);
komaida424 2:59ac9df97701 119 tx[0] = 0x1A; // DLPF(Digitel low pass filter)
komaida424 2:59ac9df97701 120 tx[1] = 0x02; // set 0 to 7
komaida424 2:59ac9df97701 121 _i2c.write(sens[num].addr,tx,2);
komaida424 2:59ac9df97701 122 wait(0.01);
komaida424 2:59ac9df97701 123 tx[0] = 0x1B;
komaida424 2:59ac9df97701 124 tx[1] = 0x18; // +-2000deg
komaida424 2:59ac9df97701 125 _i2c.write(sens[num].addr,tx,2);
komaida424 2:59ac9df97701 126 wait(0.01);
komaida424 2:59ac9df97701 127 tx[0] = 0x1C;
komaida424 3:27407c4984cf 128 tx[1] = 0x18; // 00:2g,08:4g,10:8g,18:+-16g
komaida424 2:59ac9df97701 129 _i2c.write(sens[num].addr,tx,2);
komaida424 2:59ac9df97701 130 wait_ms(10);
komaida424 2:59ac9df97701 131 break;
komaida424 2:59ac9df97701 132 #endif
komaida424 2:59ac9df97701 133 #ifdef L3GD20
komaida424 2:59ac9df97701 134 case 4: //L3GD20
komaida424 2:59ac9df97701 135 case 5:
komaida424 2:59ac9df97701 136 Gyro_addr = sens[num].addr;
komaida424 2:59ac9df97701 137 Gyro_data = 0x28;
komaida424 2:59ac9df97701 138 tx[0] = 0x20;
komaida424 2:59ac9df97701 139 tx[1] = 0xBF; //rate 400Hz 0x8F-0xBF
komaida424 2:59ac9df97701 140 _i2c.write(sens[num].addr,tx,2);
komaida424 2:59ac9df97701 141 tx[0] = 0x21;
komaida424 2:59ac9df97701 142 tx[1] = 0x09;
komaida424 2:59ac9df97701 143 _i2c.write(sens[num].addr,tx,2);
komaida424 2:59ac9df97701 144 tx[0] = 0x23;
komaida424 2:59ac9df97701 145 tx[1] = 0xF0;
komaida424 2:59ac9df97701 146 _i2c.write(sens[num].addr,tx,2);
komaida424 2:59ac9df97701 147 tx[0] = 0x24;
komaida424 2:59ac9df97701 148 tx[1] = 0x10;
komaida424 2:59ac9df97701 149 _i2c.write(sens[num].addr,tx,2);
komaida424 2:59ac9df97701 150 break;
komaida424 2:59ac9df97701 151 #endif
komaida424 2:59ac9df97701 152 #ifdef ADXL345
komaida424 2:59ac9df97701 153 case 6: //ADXL345
komaida424 2:59ac9df97701 154 case 7:
komaida424 2:59ac9df97701 155 Accel_addr = sens[num].addr;
komaida424 2:59ac9df97701 156 Accel_data = 0x32;
komaida424 2:59ac9df97701 157 tx[0] = 0x2D;
komaida424 2:59ac9df97701 158 tx[1] = 0x00;
komaida424 2:59ac9df97701 159 _i2c.write(sens[num].addr,tx,2);
komaida424 2:59ac9df97701 160 tx[0] = 0x31;
komaida424 2:59ac9df97701 161 tx[1] = 0x0B; //full range 08:2g 09:4g 0A:8g 0B:16g
komaida424 2:59ac9df97701 162 _i2c.write(sens[num].addr,tx,2);
komaida424 2:59ac9df97701 163 tx[0] = 0x2C;
komaida424 2:59ac9df97701 164 tx[1] = 0x09; //out rate 0xC:400Hz 0xD:800Hz
komaida424 2:59ac9df97701 165 _i2c.write(sens[num].addr,tx,2);
komaida424 2:59ac9df97701 166 tx[0] = 0x2D;
komaida424 2:59ac9df97701 167 tx[1] = 0x08;
komaida424 2:59ac9df97701 168 _i2c.write(sens[num].addr,tx,2);
komaida424 2:59ac9df97701 169 break;
komaida424 2:59ac9df97701 170 #endif
komaida424 2:59ac9df97701 171 #ifdef LPS331AP
komaida424 2:59ac9df97701 172 case 8: //barometor
komaida424 2:59ac9df97701 173 case 9:
komaida424 2:59ac9df97701 174 barometor_addr = sens[num].addr;
komaida424 2:59ac9df97701 175 barometor_data = 0x2B;
komaida424 2:59ac9df97701 176 tx[0] = 0x10; //RES_CNF
komaida424 2:59ac9df97701 177 tx[1] = 0x7A;
komaida424 2:59ac9df97701 178 _i2c.write(sens[num].addr,tx,2);
komaida424 2:59ac9df97701 179 tx[0] = 0x20; // CTL_REG1
komaida424 2:59ac9df97701 180 tx[1] = 0xB0; // power on
komaida424 2:59ac9df97701 181 _i2c.write(sens[num].addr,tx,2);
komaida424 2:59ac9df97701 182 // tx[0]= 0x21; // CTL_REG2
komaida424 2:59ac9df97701 183 // tx[1]= 0x01; // one shot start
komaida424 2:59ac9df97701 184 // _i2c.write(sens[num].addr,tx,2);
komaida424 2:59ac9df97701 185 wait(1);
komaida424 2:59ac9df97701 186 break;
komaida424 2:59ac9df97701 187 #endif
komaida424 2:59ac9df97701 188 }
komaida424 2:59ac9df97701 189 }
komaida424 0:cca1c4e84da4 190 }
komaida424 0:cca1c4e84da4 191
komaida424 2:59ac9df97701 192 int I2cPeripherals::_putc(int value)
komaida424 2:59ac9df97701 193 {
komaida424 2:59ac9df97701 194 if ( LCD_addr == 0 ) return value;
komaida424 0:cca1c4e84da4 195 _i2c.start();
komaida424 0:cca1c4e84da4 196 _i2c.write(LCD_addr);
komaida424 0:cca1c4e84da4 197 _i2c.write(LCD_data);
komaida424 0:cca1c4e84da4 198 _i2c.write(value);
komaida424 0:cca1c4e84da4 199 _i2c.stop();
komaida424 0:cca1c4e84da4 200 return value;
komaida424 0:cca1c4e84da4 201 }
komaida424 0:cca1c4e84da4 202
komaida424 2:59ac9df97701 203 int I2cPeripherals::_getc()
komaida424 2:59ac9df97701 204 {
komaida424 0:cca1c4e84da4 205 return -1;
komaida424 0:cca1c4e84da4 206 }
komaida424 0:cca1c4e84da4 207
komaida424 2:59ac9df97701 208 void I2cPeripherals::write_reg(char I2cAddr,char reg_addr,char* data,int len)
komaida424 2:59ac9df97701 209 {
komaida424 2:59ac9df97701 210 char tx[17];
komaida424 2:59ac9df97701 211 if ( len >16 ) len = 16;
komaida424 2:59ac9df97701 212 tx[0] = reg_addr;
komaida424 2:59ac9df97701 213 if ( len > 1 ) tx[0] |= 0x80;
komaida424 2:59ac9df97701 214 for (int i=0; i<len; i++) tx[i+1] = data[i];
komaida424 2:59ac9df97701 215 _i2c.write(I2cAddr,tx,len+1);
komaida424 2:59ac9df97701 216 }
komaida424 2:59ac9df97701 217
komaida424 2:59ac9df97701 218 void I2cPeripherals::read_reg(char I2cAddr,char reg_addr,char* data,int len)
komaida424 2:59ac9df97701 219 {
komaida424 2:59ac9df97701 220 char tx[1];
komaida424 2:59ac9df97701 221 tx[0] = reg_addr | 0x80;
komaida424 2:59ac9df97701 222 _i2c.write(I2cAddr,tx,1,true);
komaida424 2:59ac9df97701 223 _i2c.read(I2cAddr,data,len);
komaida424 2:59ac9df97701 224 }
komaida424 2:59ac9df97701 225
komaida424 0:cca1c4e84da4 226 void I2cPeripherals::cls()
komaida424 0:cca1c4e84da4 227 {
komaida424 2:59ac9df97701 228 if ( LCD_addr == 0 ) return;
komaida424 0:cca1c4e84da4 229 char tx[2] = { 0x00, 0x01 };
komaida424 0:cca1c4e84da4 230 _i2c.write(LCD_addr,tx,2);
komaida424 0:cca1c4e84da4 231 }
komaida424 0:cca1c4e84da4 232
komaida424 0:cca1c4e84da4 233 void I2cPeripherals::locate(int clm,int row)
komaida424 0:cca1c4e84da4 234 {
komaida424 0:cca1c4e84da4 235 char tx[2];
komaida424 2:59ac9df97701 236
komaida424 2:59ac9df97701 237 if ( LCD_addr == 0 ) return;
komaida424 0:cca1c4e84da4 238 tx[0] = 0x00;
komaida424 0:cca1c4e84da4 239 tx[1] = 0x80 + (row * 0x40) + clm;
komaida424 0:cca1c4e84da4 240 _i2c.write(LCD_addr,tx,2);
komaida424 2:59ac9df97701 241
komaida424 0:cca1c4e84da4 242 }
komaida424 0:cca1c4e84da4 243
komaida424 2:59ac9df97701 244 int I2cPeripherals::angular(float *x,float *y,float *z)
komaida424 2:59ac9df97701 245 {
komaida424 0:cca1c4e84da4 246 char rx[6];
komaida424 0:cca1c4e84da4 247 char tx[1];
komaida424 2:59ac9df97701 248 float i = 0;
komaida424 0:cca1c4e84da4 249 tx[0] = Gyro_data | 0x80;
komaida424 0:cca1c4e84da4 250 if ( _i2c.write(Gyro_addr,tx,1,true) != 0 ) {
komaida424 2:59ac9df97701 251 *x=*y=*z=0;
komaida424 2:59ac9df97701 252 return Gyro_addr;
komaida424 2:59ac9df97701 253 }
komaida424 2:59ac9df97701 254 switch ( Gyro_addr ) {
komaida424 2:59ac9df97701 255 case 0xD0:
komaida424 2:59ac9df97701 256 case 0xD2:
komaida424 2:59ac9df97701 257 i = 0.06098;
komaida424 2:59ac9df97701 258 break;
komaida424 2:59ac9df97701 259 case 0xD4:
komaida424 2:59ac9df97701 260 case 0xD6:
komaida424 2:59ac9df97701 261 i = 0.06957;
komaida424 0:cca1c4e84da4 262 }
komaida424 0:cca1c4e84da4 263 _i2c.read(Gyro_addr,rx,6);
komaida424 2:59ac9df97701 264 *x = ( short(rx[0] << 8 | (uint8_t)rx[1]) ) * i;
komaida424 2:59ac9df97701 265 *y = ( short(rx[2] << 8 | (uint8_t)rx[3]) ) * i;
komaida424 2:59ac9df97701 266 *z = ( short(rx[4] << 8 | (uint8_t)rx[5]) ) * i;
komaida424 0:cca1c4e84da4 267 return true;
komaida424 0:cca1c4e84da4 268 }
komaida424 2:59ac9df97701 269
komaida424 2:59ac9df97701 270 int I2cPeripherals::Acceleration(float *x,float *y,float *z)
komaida424 0:cca1c4e84da4 271 {
komaida424 2:59ac9df97701 272 //AXDL345 Data Read
komaida424 0:cca1c4e84da4 273 char rx[6];
komaida424 0:cca1c4e84da4 274 char tx[1];
komaida424 3:27407c4984cf 275 float lsb;
komaida424 0:cca1c4e84da4 276 tx[0] = Accel_data | 0x80;
komaida424 0:cca1c4e84da4 277 if ( _i2c.write(Accel_addr,tx,1,true) != 0 ) {
komaida424 2:59ac9df97701 278 *x=*y=0;
komaida424 2:59ac9df97701 279 *z=9.8;
komaida424 0:cca1c4e84da4 280 return false;
komaida424 0:cca1c4e84da4 281 }
komaida424 0:cca1c4e84da4 282 _i2c.read(Accel_addr,rx,6);
komaida424 2:59ac9df97701 283 switch ( Accel_addr ) {
komaida424 2:59ac9df97701 284 case 0xD0:
komaida424 2:59ac9df97701 285 case 0xD2:
komaida424 2:59ac9df97701 286 #ifdef MPU6050
komaida424 3:27407c4984cf 287 lsb = 0.000488; //16g
komaida424 3:27407c4984cf 288 // lsb = 0.000122; //4g
komaida424 3:27407c4984cf 289 *y = ( -(short(rx[0] << 8 | (uint8_t)rx[1])) ) * lsb;
komaida424 3:27407c4984cf 290 *x = ( short(rx[2] << 8 | (uint8_t)rx[3]) ) * lsb;
komaida424 3:27407c4984cf 291 *z = ( short(rx[4] << 8 | (uint8_t)rx[5]) ) * lsb;
komaida424 2:59ac9df97701 292 #endif
komaida424 2:59ac9df97701 293 break;
komaida424 2:59ac9df97701 294 case 0xA6:
komaida424 2:59ac9df97701 295 case 0x3A:
komaida424 2:59ac9df97701 296 #ifdef ADXL345
komaida424 2:59ac9df97701 297 *y = ( -(short(rx[1] << 8 | (uint8_t)rx[0])) ) * 0.04;
komaida424 2:59ac9df97701 298 *x = ( short(rx[3] << 8 | (uint8_t)rx[2]) ) * 0.04;
komaida424 2:59ac9df97701 299 *z = ( short(rx[5] << 8 | (uint8_t)rx[4]) ) * 0.04;
komaida424 3:27407c4984cf 300 break;
komaida424 2:59ac9df97701 301 #endif
komaida424 2:59ac9df97701 302 }
komaida424 0:cca1c4e84da4 303 return true;
komaida424 0:cca1c4e84da4 304 }
komaida424 2:59ac9df97701 305
komaida424 0:cca1c4e84da4 306 int I2cPeripherals::pressure()
komaida424 0:cca1c4e84da4 307 {
komaida424 0:cca1c4e84da4 308 char tx[2];
komaida424 0:cca1c4e84da4 309 char rx[3];
komaida424 2:59ac9df97701 310 int press = 0;
komaida424 2:59ac9df97701 311
komaida424 2:59ac9df97701 312 tx[0]= 0x28 | 0x80;
komaida424 0:cca1c4e84da4 313 if ( _i2c.write(barometor_addr,tx,1,true) != 0 )
komaida424 0:cca1c4e84da4 314 return 0;
komaida424 2:59ac9df97701 315 _i2c.read (barometor_addr,rx,3);
komaida424 0:cca1c4e84da4 316 press =int( rx[2]<<16 | rx[1]<<8 | rx[0] );
komaida424 0:cca1c4e84da4 317 return press;
komaida424 0:cca1c4e84da4 318 }
komaida424 0:cca1c4e84da4 319
komaida424 0:cca1c4e84da4 320 int I2cPeripherals::temperature()
komaida424 0:cca1c4e84da4 321 {
komaida424 0:cca1c4e84da4 322 char tx[1];
komaida424 0:cca1c4e84da4 323 char rx[2];
komaida424 0:cca1c4e84da4 324 int temp;
komaida424 2:59ac9df97701 325
komaida424 0:cca1c4e84da4 326 tx[0]= 0x2B | 0x80;
komaida424 0:cca1c4e84da4 327 if ( _i2c.write(barometor_addr,tx,1,true) != 0 )
komaida424 0:cca1c4e84da4 328 return 0;
komaida424 2:59ac9df97701 329 _i2c.read (barometor_addr,rx,2);
komaida424 2:59ac9df97701 330
komaida424 0:cca1c4e84da4 331 temp = short(rx[1]<<8 | rx[0]);
komaida424 0:cca1c4e84da4 332 return temp;
komaida424 2:59ac9df97701 333 }
komaida424 2:59ac9df97701 334
komaida424 2:59ac9df97701 335 void I2cPeripherals::i2c_write(int i2caddr,char* tx,int len)
komaida424 2:59ac9df97701 336 {
komaida424 2:59ac9df97701 337 char rx[1];
komaida424 2:59ac9df97701 338 rx[0] = 0;
komaida424 2:59ac9df97701 339 while( 1 ) {
komaida424 2:59ac9df97701 340 _i2c.write(i2caddr,tx,len);
komaida424 2:59ac9df97701 341 _i2c.write(i2caddr,tx,1,true);
komaida424 2:59ac9df97701 342 _i2c.read (i2caddr,rx,1);
komaida424 2:59ac9df97701 343 if ( tx[1] == rx[0] ) return;
komaida424 2:59ac9df97701 344 }
komaida424 2:59ac9df97701 345 }
komaida424 2:59ac9df97701 346
komaida424 2:59ac9df97701 347 int I2cPeripherals::GetAddr(int type)
komaida424 2:59ac9df97701 348 {
komaida424 2:59ac9df97701 349 switch ( type ) {
komaida424 2:59ac9df97701 350 case GYRO_ADDR:
komaida424 2:59ac9df97701 351 return Gyro_addr;
komaida424 2:59ac9df97701 352 case ACCEL_ADDR:
komaida424 2:59ac9df97701 353 return Accel_addr;
komaida424 2:59ac9df97701 354 case LCD_ADDR:
komaida424 2:59ac9df97701 355 return LCD_addr;
komaida424 2:59ac9df97701 356 case BARO_ADDR:
komaida424 2:59ac9df97701 357 return barometor_addr;
komaida424 2:59ac9df97701 358 }
komaida424 2:59ac9df97701 359 return 0;
komaida424 2:59ac9df97701 360 }
komaida424 2:59ac9df97701 361 ;
komaida424 0:cca1c4e84da4 362
komaida424 0:cca1c4e84da4 363
komaida424 2:59ac9df97701 364
komaida424 2:59ac9df97701 365
komaida424 2:59ac9df97701 366