FiFiWiki2

FiFiWikiの第2版

ユーザ用ツール

サイト用ツール


arduino_-_加速度センサ

3軸加速度センサADXL435を使う

I2Cで通信

-Arduino UNOの 配線 306. ADXL345(I2C) - Fab蔵 Docs

Arduino DUEの場合にはピンを変更

BS21 Lab - Products - Kanji LCD Shield for Arduino - Arduino Due

  1. Arduino Uno A4/A5 及び R3 追加ピンソケット
  2. Arduino Due 20/21番ピンソケット

はまりポイント

  • Arduino DUE は int が2バイト(16bit)
  • Arduino UNO は int が1バイト(8bit)
snippet.c
#include <Wire.h>
 
#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();         
}
arduino_-_加速度センサ.txt · 最終更新: 2017/11/23 22:30 by fifi