Here's my code:
#undef int()
#include <stdio.h>
#include <Wire.h>
#define X_Axis_Address 0x28
#define Y_Axis_Address 0x2A
#define Z_Axis_Address 0x2C
#define MaxPacketLength 30
unsigned int long StartTime;
unsigned int long ElapsedTime;
byte sync = 0;
char Packet[MaxPacketLength];
int x_val = 0;
int y_val = 0;
int z_val = 0;
void setup( void )
{
Wire.begin();
Serial.begin(9600);
Wire.beginTransmission(0x1D);
Wire.send(0x20);
Wire.send(0x87);
Wire.endTransmission();
}
void loop()
{
int start = TCNT1;
static int stop = 0;
x_val = Accel( X_Axis_Address );
y_val = Accel( Y_Axis_Address );
z_val = Accel( Z_Axis_Address );
sprintf( Packet,
"%d,%d,%d,%d",
x_val,
y_val,
z_val,
stop - start );
CheckSum( Packet );
stop = TCNT1;
}
void CheckSum( char Packet[] )
{
byte sum = 0;
for( int i = 0; i < strlen(Packet); i++ ) sum += Packet[i];
sum = ~sum + 1;
Serial.print( Packet );
Serial.print( "*" );
Serial.println( sum, HEX );
}
int Accel( byte address )
{
byte val_l, val_h;
int val;
Wire.beginTransmission(0x1D);
Wire.send( address + 1 );
Wire.endTransmission();
Wire.requestFrom(0x1D,1);
if(Wire.available())
val_h = Wire.receive();
Wire.beginTransmission(0x1D);
Wire.send( address );
Wire.endTransmission();
Wire.requestFrom(0x1D, 1);
while(Wire.available())
val_l = Wire.receive();
val = val_h;
val <<= 8;
val += val_l;
return val;
}
I need to know the period in between reads of the accelerometer. And as accurate as possible.