Accelerometer ADXL345 and Blik LED

Asked

Viewed 22 times

1

Hello developers for Arduino.

I am with a doubt already some time that I can not solve, I came here to get some hint for the solution of this my problem.

I’m using the Accelerometer ADXL345 to take direction X_out and Y_out.

The intention is to make my left Led enter the Flashing function when the value X_out < -0.3 and stay in looping until my Y_out axis is greater than 0.3 and the same when my X_out axis is > 0.3, make the left Led to trigger.

*Using If, it goes in and out of function, not keeping my Led flashing and thus coming out of function. *Using While, it enters the function but on the other hand I cannot return to redeem the value of Y_out.

Who has any suggestion to improve my function would be valid.

I started the project based on this Youtube link: https://www.youtube.com/watch?v=Bys8pCuCDB8

    /*
    Arduino and ADXL345 Accelerometer Tutorial
     by Dejan, https://howtomechatronics.com
*/

#include <Wire.h>  // Wire library - used for I2C communication


int ADXL345 = 0x53; // The ADXL345 sensor I2C address

float X_out, Y_out, Z_out;  // Outputs

void setup() {
  Serial.begin(9600); // Initiate serial communication for printing the results on the Serial monitor
  Wire.begin(); // Initiate the Wire library
  // Set ADXL345 in measuring mode
  Wire.beginTransmission(ADXL345); // Start communicating with the device 
  Wire.write(0x2D); // Access/ talk to POWER_CTL Register - 0x2D
  // Enable measurement
  Wire.write(8); // (8dec -> 0000 1000 binary) Bit D3 High for measuring enable 
  Wire.endTransmission();
  delay(100);


  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);

}

void loop() {
  // === Read acceleromter data === //
  Wire.beginTransmission(ADXL345);
  Wire.write(0x32); // Start with register 0x32 (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(ADXL345, 6, true); // Read 6 registers total, each axis value is stored in 2 registers
  X_out = ( Wire.read()| Wire.read() << 8); // X-axis value
  X_out = X_out/256; //For a range of +-2g, we need to divide the raw values by 256, according to the datasheet
  Y_out = ( Wire.read()| Wire.read() << 8); // Y-axis value
  Y_out = Y_out/256;
  Z_out = ( Wire.read()| Wire.read() << 8); // Z-axis value
  Z_out = Z_out/256;

  Serial.print("Xa= ");
  Serial.print(X_out);
  Serial.print("   Ya= ");
  Serial.print(Y_out);
  Serial.print("   Za= ");
  Serial.println(Z_out);

  digitalWrite(8,HIGH);



  /*COMMENT*/


  while (X_out > 0.3) {

    keepRightBlink();    
  } 



     while (X_out < -0.3) {  

          keepLeftBlink();

          if(Y_out > -0.3){
           return ;
            } 
     }


}

int keepRightBlink(){
      digitalWrite(7, HIGH);
      delay(100);
      digitalWrite(7, LOW);
      delay(100);

}

int keepLeftBlink(){

      digitalWrite(9, HIGH);
      delay(100);
      digitalWrite(9, LOW);
      delay(100);

}
No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.