#include // Include the Wire library for I2C communication #include // Include Adafruit Sensor library #include // Include Adafruit ADXL345 library // Assign a unique ID to this sensor Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345); // Function to display sensor details void displaySensorDetails(void) { sensor_t sensor; accel.getSensor(&sensor); Serial.println("------------------------------------"); Serial.print("Sensor: "); Serial.println(sensor.name); Serial.print("Driver Ver: "); Serial.println(sensor.version); Serial.print("Unique ID: "); Serial.println(sensor.sensor_id); Serial.print("Max Value: "); Serial.print(sensor.max_value); Serial.println(" m/s^2"); Serial.print("Min Value: "); Serial.print(sensor.min_value); Serial.println(" m/s^2"); Serial.print("Resolution: "); Serial.print(sensor.resolution); Serial.println(" m/s^2"); Serial.println("------------------------------------"); Serial.println(""); delay(500); } // Function to display the data rate of the accelerometer void displayDataRate(void) { Serial.print("Data Rate: "); // Print the current data rate switch(accel.getDataRate()) { case ADXL345_DATARATE_3200_HZ: Serial.print("3200 "); break; case ADXL345_DATARATE_1600_HZ: Serial.print("1600 "); break; case ADXL345_DATARATE_800_HZ: Serial.print("800 "); break; case ADXL345_DATARATE_400_HZ: Serial.print("400 "); break; case ADXL345_DATARATE_200_HZ: Serial.print("200 "); break; case ADXL345_DATARATE_100_HZ: Serial.print("100 "); break; case ADXL345_DATARATE_50_HZ: Serial.print("50 "); break; case ADXL345_DATARATE_25_HZ: Serial.print("25 "); break; case ADXL345_DATARATE_12_5_HZ: Serial.print("12.5 "); break; case ADXL345_DATARATE_6_25HZ: Serial.print("6.25 "); break; case ADXL345_DATARATE_3_13_HZ: Serial.print("3.13 "); break; case ADXL345_DATARATE_1_56_HZ: Serial.print("1.56 "); break; case ADXL345_DATARATE_0_78_HZ: Serial.print("0.78 "); break; case ADXL345_DATARATE_0_39_HZ: Serial.print("0.39 "); break; case ADXL345_DATARATE_0_20_HZ: Serial.print("0.20 "); break; case ADXL345_DATARATE_0_10_HZ: Serial.print("0.10 "); break; default: Serial.print("???? "); break; } Serial.println(" Hz"); } // Function to display the range of the accelerometer void displayRange(void) { Serial.print("Range: +/- "); // Print the current range switch(accel.getRange()) { case ADXL345_RANGE_16_G: Serial.print("16 "); break; case ADXL345_RANGE_8_G: Serial.print("8 "); break; case ADXL345_RANGE_4_G: Serial.print("4 "); break; case ADXL345_RANGE_2_G: Serial.print("2 "); break; default: Serial.print("?? "); break; } Serial.println(" g"); } // Setup function runs once when the microcontroller starts void setup(void) { #ifndef ESP8266 while (!Serial); // Wait for serial port to connect (for Leonardo/Micro/Zero) #endif Serial.begin(9600); // Initialize serial communication at 9600 baud rate Serial.println("Accelerometer Test"); Serial.println(""); // Initialize the sensor if(!accel.begin()) { // If there's a problem detecting the ADXL345, check the connections Serial.println("Ooops, no ADXL345 detected ... Check your wiring!"); while(1); } // Set the range to whatever is appropriate for your project accel.setRange(ADXL345_RANGE_16_G); // accel.setRange(ADXL345_RANGE_8_G); // accel.setRange(ADXL345_RANGE_4_G); // accel.setRange(ADXL345_RANGE_2_G); // Display some basic information on this sensor displaySensorDetails(); // Display additional settings (outside the scope of sensor_t) displayDataRate(); displayRange(); Serial.println(""); } // Loop function runs continuously after setup void loop(void) { // Get a new sensor event sensors_event_t event; accel.getEvent(&event); // Display the results (acceleration is measured in m/s^2) Serial.print("X: "); Serial.print(event.acceleration.x); Serial.print(" "); Serial.print("Y: "); Serial.print(event.acceleration.y); Serial.print(" "); Serial.print("Z: "); Serial.print(event.acceleration.z); Serial.print(" ");Serial.println("m/s^2 "); delay(500); // Wait for 500 milliseconds before the next loop iteration }