この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン | |||
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()) |