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);
}