Доброго времени суток. Нужна помощь. К плате ардуино подключено два adxl345 , смог вывести на экран перемещения по осям. Значения выводятся большие и то потворяются,как 2 акселометра я не менял в пололожении. Как их откалибровать чтоб,меньше получались? Код (C++): #include <Wire.h> int i = 0; void setup() { Serial.begin(9600); Wire.begin(); // запишем адрес регистра DEVID Wire.beginTransmission(0x53); Wire.write(byte(0x00)); Wire.endTransmission(); // прочитаем регистр DEVID: Wire.requestFrom(0x53, 1); while (Wire.available()) { byte c = Wire.read(); Serial.print("ID = "); Serial.println(c, HEX); } // переведём акселерометр в режим измерений Wire.beginTransmission(0x53); Wire.write(byte(0x2D)); Wire.write(byte(0x08)); Wire.endTransmission(); Wire.beginTransmission(0x1D); Wire.write(byte(0x00)); Wire.endTransmission(); // прочитаем регистр DEVID: Wire.requestFrom(0x1D, 1); while (Wire.available()) { byte c = Wire.read(); Serial.print("ID = "); Serial.println(c, HEX); } // переведём акселерометр в режим измерений Wire.beginTransmission(0x1D); Wire.write(byte(0x2D)); Wire.write(byte(0x08)); Wire.endTransmission(); } void loop() { // запишем адрес начала данных по осям X, Y и Z: Wire.beginTransmission(0x53); Wire.write(byte(0x32)); Wire.endTransmission(); // прочитаем 6 байтов значений XYZ: i = 0; byte xyz1[6]; Wire.requestFrom(0x53, 6); while (Wire.available()) { byte c = Wire.read(); xyz1[i] = c; i++; } Wire.beginTransmission(0x1D); Wire.write(byte(0x32)); Wire.endTransmission(); // прочитаем 6 байтов значений XYZ: i = 0; byte xyz2[6]; Wire.requestFrom(0x1D, 6); while (Wire.available()) { byte c = Wire.read(); xyz2[i] = c; i++; } // посчитаем и отобразим значения X, Y, Z: int x1 = word(xyz1[1], xyz1[0]); int y1 = word(xyz1[3], xyz1[2]); int z1 = word(xyz1[5], xyz1[4]); // посчитаем и отобразим значения X, Y, Z: int x2 = word(xyz2[1], xyz2[0]); int y2 = word(xyz2[3], xyz2[2]); int z2 = word(xyz2[5], xyz2[4]); Serial.print(x1); Serial.print("\t"); Serial.print(y1); Serial.print("\t"); Serial.print(z1); Serial.print("\t"); Serial.print(x2); Serial.print("\t"); Serial.print(y2); Serial.print("\t"); Serial.print(z2); delay(30000); }
А как подключены то? Там на одной надо пин SDO/ALT ADDRESS к питанию, а на другой к земле, что бы у них разные адреса были.
А ардуина обычная 5и вольтовая? Тогда с ADXL345 надо уровни согласовывать. А еще нужны блокировочные конденсаторы по питанию каждой МС и резисторы для подтяжки I2C линий