この文書の現在のバージョンと選択したバージョンの差分を表示します。
| 両方とも前のリビジョン 前のリビジョン | |||
| arduino_-_加速度センサ [2017/11/23 06:42] fifi | arduino_-_加速度センサ [2017/11/23 22:30] (現在) fifi | ||
|---|---|---|---|
| ライン 13: | ライン 13: | ||
| - Arduino Uno A4/A5 及び R3 追加ピンソケット | - Arduino Uno A4/A5 及び R3 追加ピンソケット | ||
| - Arduino Due 20/21番ピンソケット | - Arduino Due 20/21番ピンソケット | ||
| + | |||
| + | ### はまりポイント | ||
| + | |||
| + | - Arduino DUE は int が2バイト(16bit) | ||
| + | - Arduino UNO は int が1バイト(8bit) | ||
| ```c | ```c | ||
| #include <Wire.h> | #include <Wire.h> | ||
| + | |||
| #define DEVICE_ADDR (0x53) // スレーブデバイスのアドレス | #define DEVICE_ADDR (0x53) // スレーブデバイスのアドレス | ||
| byte axis_buff[6]; | byte axis_buff[6]; | ||
| + | |||
| void setup() | void setup() | ||
| { | { | ||
| Serial.begin(9600); // シリアルの開始デバック用 | Serial.begin(9600); // シリアルの開始デバック用 | ||
| Wire.begin();  // I2Cの開始 | Wire.begin();  // I2Cの開始 | ||
| - |  | + | |
| Serial.write("init"); | Serial.write("init"); | ||
| - |  | + | |
| // DATA_FORMAT | // DATA_FORMAT | ||
| - | writeI2c(0x31, 0x00); | + | // https://sites.google.com/a/gclue.jp/fab-zang-docs/ni-yinkiiot/adxl345-i2c | 
| + | //writeI2c(0x31, 0b00001011); | ||
| + | writeI2c(0x31, 0b00000011); | ||
| // POWER_TCL | // POWER_TCL | ||
| - | writeI2c(0x2d, 0x08); | + | writeI2c(0x2d, 0b00001000); | 
| } | } | ||
| + | |||
| void loop() | void loop() | ||
| { | { | ||
| uint8_t length = 6; | uint8_t length = 6; | ||
| readI2c(0x32, length, axis_buff); //レジスターアドレス 0x32から6バイト読む | readI2c(0x32, length, axis_buff); //レジスターアドレス 0x32から6バイト読む | ||
| - | int x = (((int)axis_buff[1]) << 8) | axis_buff[0];  | + |  | 
| - | int y = (((int)axis_buff[3]) << 8) | axis_buff[2]; | + | int16_t x = (((int16_t)axis_buff[1]) << 8) | axis_buff[0];  | 
| - | int z = (((int)axis_buff[5]) << 8) | axis_buff[4]; | + | 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 * 32.0 / 8192.0); | + | |
| + | Serial.print( x); | ||
| Serial.print(","); | Serial.print(","); | ||
| - | Serial.print( y * 32.0 / 8192.0 ); | + | Serial.print( y ); | 
| Serial.print(","); | Serial.print(","); | ||
| - | Serial.println( z * 32.0 / 8192.0 ); | + | Serial.println( z ); | 
| - | + | ||
| - | delay(100); | + | // delay(100); | 
| } | } | ||
| + | |||
| // I2Cへの書き込み | // I2Cへの書き込み | ||
| void writeI2c(byte register_addr, byte value) { | void writeI2c(byte register_addr, byte value) { | ||
| ライン 57: | ライン 65: | ||
| Wire.endTransmission();   | Wire.endTransmission();   | ||
| } | } | ||
| + | |||
| // I2Cへの読み込み | // I2Cへの読み込み | ||
| void readI2c(byte register_addr, int num, byte buffer[]) { | void readI2c(byte register_addr, int num, byte buffer[]) { | ||
| ライン 63: | ライン 71: | ||
| Wire.write(register_addr);  | Wire.write(register_addr);  | ||
| Wire.endTransmission();  | Wire.endTransmission();  | ||
| + | |||
| Wire.beginTransmission(DEVICE_ADDR);  | Wire.beginTransmission(DEVICE_ADDR);  | ||
| Wire.requestFrom(DEVICE_ADDR, num); | Wire.requestFrom(DEVICE_ADDR, num); | ||
| + | |||
| int i = 0; | int i = 0; | ||
| while(Wire.available())   | while(Wire.available())   | ||