#include #define CLK 2 #define DAT 3 #define WAIT 25 #define sendCommand(X) sendChar(X) #define DEVICEADDRESS 0x1E char str[17]; void setup() { Wire.begin(); Wire.beginTransmission(DEVICEADDRESS); Wire.write(0x00); // コンフィグレーションレジスタAアドレス // コンフィグレーションレジスタA設定 Wire.write(0x70); // Average8 OutputRate15Hz NormalMeasurement // コンフィグレーションレジスタB設定 Wire.write(0x20); // Gain1090 // モードレジスタ Wire.write(0x00); // ContinuousMode Wire.endTransmission(); pinMode(CLK, OUTPUT); pinMode(DAT, OUTPUT); digitalWrite(CLK, HIGH); digitalWrite(DAT, HIGH); delay(200); // LCD初期化待ち } void loop() { uint8_t data[6]; int x, y, z; // データ取得 for(int i=3; i<9; i++) { Wire.beginTransmission(DEVICEADDRESS); Wire.write(i); // データレジスタアドレス Wire.endTransmission(); // データ取得 Wire.requestFrom(DEVICEADDRESS, 1); while(Wire.available() == 0); data[i - 3] = Wire.read(); } x = (int)(data[0] << 8) + data[1]; y = (int)(data[2] << 8) + data[3]; z = (int)(data[4] << 8) + data[5]; sprintf(str, "%d %d %d", x, y, z); sendCommand(0x90); sendStr(str); delay(1000); /* float rad = atan2(y, x); float degree = rad * 180 / M_PI; if(degree < 0) { degree = 360 + degree; } dtostrf(degree, 16, 3, str); sendCommand(0x90); sendStr(str); delay(1000); */ } void sendStr(uint8_t* str) { uint8_t* p; p = str; while(*p != 0) { sendChar(*(p++)); } } void sendChar(uint8_t chr) { for(int n = 0; n < 8; n++) { digitalWrite(DAT, (chr >> n) & 1); delayMicroseconds(WAIT); digitalWrite(CLK, LOW); delayMicroseconds(WAIT); digitalWrite(CLK, HIGH); } }