# 3軸加速度センサADXL435を使う I2Cで通信 -Arduino UNOの 配線 [306. ADXL345(I2C) - Fab蔵 Docs](https://sites.google.com/a/gclue.jp/fab-zang-docs/ni-yinkiiot/adxl345-i2c) Arduino DUEの場合にはピンを変更 [BS21 Lab - Products - Kanji LCD Shield for Arduino - Arduino Due](http://www.bs21-lab.com/products/p002-KanjiLCD/ArduinoDue.html) - Arduino Uno A4/A5 及び R3 追加ピンソケット - Arduino Due 20/21番ピンソケット ### はまりポイント - Arduino DUE は int が2バイト(16bit) - Arduino UNO は int が1バイト(8bit) ```c #include #define DEVICE_ADDR (0x53) // スレーブデバイスのアドレス byte axis_buff[6]; void setup() { Serial.begin(9600); // シリアルの開始デバック用 Wire.begin(); // I2Cの開始 Serial.write("init"); // DATA_FORMAT // https://sites.google.com/a/gclue.jp/fab-zang-docs/ni-yinkiiot/adxl345-i2c //writeI2c(0x31, 0b00001011); writeI2c(0x31, 0b00000011); // POWER_TCL writeI2c(0x2d, 0b00001000); } void loop() { uint8_t length = 6; readI2c(0x32, length, axis_buff); //レジスターアドレス 0x32から6バイト読む int16_t x = (((int16_t)axis_buff[1]) << 8) | axis_buff[0]; int16_t y = (((int16_t)axis_buff[3]) << 8) | axis_buff[2]; int16_t z = (((int16_t)axis_buff[5]) << 8) | axis_buff[4]; Serial.print( x); Serial.print(","); Serial.print( y ); Serial.print(","); Serial.println( z ); // delay(100); } // I2Cへの書き込み void writeI2c(byte register_addr, byte value) { Wire.beginTransmission(DEVICE_ADDR); Wire.write(register_addr); Wire.write(value); Wire.endTransmission(); } // I2Cへの読み込み void readI2c(byte register_addr, int num, byte buffer[]) { Wire.beginTransmission(DEVICE_ADDR); Wire.write(register_addr); Wire.endTransmission(); Wire.beginTransmission(DEVICE_ADDR); Wire.requestFrom(DEVICE_ADDR, num); int i = 0; while(Wire.available()) { buffer[i] = Wire.read(); i++; } Wire.endTransmission(); } ```