Below is the code for ADXL 345 interfacing with arduino.
#include <Wire.h>
#define DEVICE (0x53)
#define POWER_CTL (0x2D)
#define reg_X0 (0x32)
#define reg_X1 (0x33)
#define reg_Y0 (0x34)
#define reg_Y1 (0x35)
#define reg_Z0 (0x36)
#define reg_Z1 (0x37)
int X0,X1,Xoutput;
int Y0,Y1,Youtput;
int Z0,Z1,Zoutput;
float Xa, Ya, Za;
void setup()
{
Wire.begin();
Serial.begin(9600);
delay(1000);
Wire.beginTransmission(DEVICE);
Wire.write(POWER_CTL);
Wire.write(8);
Wire.endTransmission();
}
void loop()
{
Wire.beginTransmission(DEVICE);
Wire.write(reg_X0);
Wire.write(reg_X1);
Wire.endTransmission();
Wire.requestFrom(DEVICE,2); // 2 BYTES
if(Wire.available()<=2)
{
X0 = Wire.read();
X1 = Wire.read();
X1=X1<<8;
Xoutput =X0+X1;
Xa=Xoutput/256.0; // g value --4 bytes
}
Wire.beginTransmission(DEVICE);
Wire.write(reg_Y0);
Wire.write(reg_Y1);
Wire.endTransmission();
Wire.requestFrom(DEVICE,2);
if(Wire.available()<=2)
{
Y0 = Wire.read();
Y1 = Wire.read();
Y1=Y1<<8;
Youtput =Y0+Y1;
Ya=Youtput/256.0; //g value---4 bytes
}
Wire.beginTransmission(DEVICE);
Wire.write(reg_Z0);
Wire.write(reg_Z1);
Wire.endTransmission();
Wire.requestFrom(DEVICE,2);
if(Wire.available()<=2)
{
Z0 = Wire.read();
Z1 = Wire.read();
Z1=Z1<<8;
Zoutput =Z0+Z1;
Za=Zoutput/256.0; //g value----4 bytes
}
/*
Serial.println(X0);
Serial.println(X1);
Serial.println(Y0);
Serial.println(Y1);
Serial.println(Z0);
Serial.println(Z1);
*/
Serial.println("X = ");
Serial.println(Xa);
Serial.println(sizeof(Xa)); //returns total number of bytes = 4
Serial.println("Dx = ");
Serial.println(Dx);
Serial.println("Y = ");
Serial.println(Ya);
Serial.println(sizeof(Ya)); //returns total number of bytes = 4
Serial.println("Dy = ");
Serial.println(Dy);
Serial.println("Z = ");
Serial.println(Za);
Serial.println(sizeof(Za)); //returns total number of bytes = 4
Serial.println("Dz = ");
Serial.println(Dz);
delay(3000);
}
I want to save each axis (X,Y,Z) g value into Arduino EEPROM. So I have to store 12 bytes of data.
But each axis data is of 4 bytes and each EEPROM address can store 1 byte of data.
I am unable to understand how to write a loop code for EEPROM so that subsequent addresses can stores all axis data and keep on storing same as movement happens.
Is it something like this --
void loop()
{
for (addr=0; addr<=EEPROM.length(); addr++)
{
EEPROM.write(addr, Xa);
EEPROM.write(addr+1, Ya);
EEPROM.write(addr+2, Za);
}
}
but Xa, Ya and Za are of 4 bytes and addr is of 1 byte. It sounds silly but I don't have much knowledge of programming. Anybody could just provide an idea on how to proceed.