Hello I had been having a hard time figuring out how to get reliable readings from ADXL335 trying to compare the minimum & maximum readings with raw data. I based the code from the book Arduino Quick Start Guide to get the minimum and maximum readings but whenever I tilt the sensor lets say to the X(+/-) axis it would sometimes fall to the Y(+/-) axis even though how hard I tilt the sensor it seems that it is locking to Y when in fact I was tilting to the X axis. Below is my code.
//Analog read pins
const unsigned int X_AXIS_PIN = 2;
const unsigned int Y_AXIS_PIN = 1;
const unsigned int Z_AXIS_PIN = 0;
const unsigned int ADXL_LED = 13;
const unsigned int NUM_AXES = 3;
const unsigned int PINS[NUM_AXES] = { X_AXIS_PIN, Y_AXIS_PIN, Z_AXIS_PIN };
const unsigned int DELAY = 200;
const unsigned int BAUD_RATE = 9600;
//The minimum and maximum values that came from
//the accelerometer
int min_x, min_y, min_z;
int max_x, max_y, max_z;
void setup() {
Serial.begin(BAUD_RATE);
pinMode(ADXL_LED, OUTPUT);
digitalWrite(ADXL_LED, LOW);
//Set minimum and maximum threshold
min_x = min_y = min_z = 1000;
max_x = max_y = max_z = -1000;
}
void loop() {
delay(1);
//Read values from pins
int x = analogRead(PINS[0]);
int y = analogRead(PINS[1]);
int z = analogRead(PINS[2]);
//Grab the minimum and maximum readings
min_x = min(x, min_x);
max_x = max(x, max_x);
min_y = min(y, min_y);
max_y = max(y, max_y);
min_z = min(z, min_z);
max_z = max(z, max_z);
// Check if X axis equals to minimum
if( x == min_x && x < max_x && y != min_y && y != max_y ) {
Serial.print("RIGHT ");
Serial.print(x);
Serial.print(" = ");
Serial.print(min_x);
Serial.print("\t");
Serial.print("LEFT ");
Serial.print(x);
Serial.print(" = ");
Serial.print(max_x);
Serial.print("\t");
Serial.print("UP ");
Serial.print(y);
Serial.print(" = ");
Serial.print(min_y);
Serial.print("\t");
Serial.print("DOWN ");
Serial.print(y);
Serial.print(" = ");
Serial.println(max_y);
x = y = 0;
digitalWrite(ADXL_LED, HIGH);
delay(DELAY);
digitalWrite(ADXL_LED, LOW);
}
// Check if X axis equals to maximum
if( x == max_x && x > min_x && y != min_y && y != max_y ) {
Serial.print("RIGHT ");
Serial.print(x);
Serial.print(" = ");
Serial.print(min_x);
Serial.print("\t");
Serial.print("LEFT ");
Serial.print(x);
Serial.print(" = ");
Serial.print(max_x);
Serial.print("\t");
Serial.print("UP ");
Serial.print(y);
Serial.print(" = ");
Serial.print(min_y);
Serial.print("\t");
Serial.print("DOWN ");
Serial.print(y);
Serial.print(" = ");
Serial.println(max_y);
x = y = 0;
digitalWrite(ADXL_LED, HIGH);
delay(DELAY);
digitalWrite(ADXL_LED, LOW);
}
// Check if Y axis equals to minimum
if( y == min_y && y < max_y && x != min_x && x != max_x ) {
Serial.print("RIGHT ");
Serial.print(x);
Serial.print(" = ");
Serial.print(min_x);
Serial.print("\t");
Serial.print("LEFT ");
Serial.print(x);
Serial.print(" = ");
Serial.print(max_x);
Serial.print("\t");
Serial.print("UP ");
Serial.print(y);
Serial.print(" = ");
Serial.print(min_y);
Serial.print("\t");
Serial.print("DOWN ");
Serial.print(y);
Serial.print(" = ");
Serial.println(max_y);
x = y = 0;
digitalWrite(ADXL_LED, HIGH);
delay(DELAY);
digitalWrite(ADXL_LED, LOW);
}
// Check if Y axis equals to maximum
if( y == max_y && y > min_y && x != min_x && x != max_x ) {
Serial.print("RIGHT ");
Serial.print(x);
Serial.print(" = ");
Serial.print(min_x);
Serial.print("\t");
Serial.print("LEFT ");
Serial.print(x);
Serial.print(" = ");
Serial.print(max_x);
Serial.print("\t");
Serial.print("UP ");
Serial.print(y);
Serial.print(" = ");
Serial.print(min_y);
Serial.print("\t");
Serial.print("DOWN ");
Serial.print(y);
Serial.print(" = ");
Serial.println(max_y);
x = y = 0;
digitalWrite(ADXL_LED, HIGH);
delay(DELAY);
digitalWrite(ADXL_LED, LOW);
}
}
The output would be something like this..
X- 509 = 265 X+ 509 = 509 Y+ 341 = 216 Y- 341 = 604
X- 510 = 265 X+ 510 = 510 Y+ 319 = 216 Y- 319 = 604
X- 511 = 265 X+ 511 = 511 Y+ 341 = 216 Y- 341 = 604
X- 264 = 264 X+ 264 = 511 Y+ 359 = 216 Y- 359 = 604
X- 262 = 262 X+ 262 = 511 Y+ 347 = 216 Y- 347 = 604
X- 259 = 259 X+ 259 = 511 Y+ 323 = 216 Y- 323 = 604
X- 251 = 251 X+ 251 = 511 Y+ 449 = 216 Y- 449 = 604
X- 239 = 239 X+ 239 = 511 Y+ 473 = 216 Y- 473 = 604 --> here I was tilting to X+ and was expecting to be equals to 511 but reading shows X- equals to minimum 239
Any comments and suggestions greatly appreciated.. Thanks in advance