├── README.md ├── library.properties ├── examples └── basic_example │ └── basic_example.ino └── src ├── adxl345.h └── adxl345.cpp /README.md: -------------------------------------------------------------------------------- 1 | # ADXL345 2 | 3 | -------------------------------------------------------------------------------- /library.properties: -------------------------------------------------------------------------------- 1 | adsas 2 | -------------------------------------------------------------------------------- /examples/basic_example/basic_example.ino: -------------------------------------------------------------------------------- 1 | #include "ADXL345.h" 2 | 3 | 4 | 5 | int main(){ 6 | float rollValue, pitchValue; 7 | ADXL345 obj; 8 | obj.enableMeasurement(); 9 | while(true){ 10 | obj.RollandPitch(rollValue, pitchValue); 11 | usleep(1E6); 12 | } 13 | 14 | return 0; 15 | } -------------------------------------------------------------------------------- /src/adxl345.h: -------------------------------------------------------------------------------- 1 | // Distributed with a free-will license. 2 | // Use it any way you want, profit or free, provided it fits in the licenses of its associated works. 3 | // ADXL345 4 | // This code is designed to work with the ADXL345_I2CS I2C Mini Module available from ControlEverything.com. 5 | // https://www.controleverything.com/content/Accelorometer?sku=ADXL345_I2CS#tabs-0-product_tabset-23 6 | 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | 14 | using namespace std; 15 | 16 | #define _ADXL345 0x53 17 | 18 | class ADXL345 19 | { 20 | private: 21 | int file; 22 | float xAccl, yAccl, zAccl; 23 | 24 | public: 25 | ADXL345(); 26 | void enableMeasurement(); 27 | void setAxisOffset(char, char); 28 | void RollandPitch(float&, float&); 29 | 30 | ~ADXL345(); 31 | }; 32 | 33 | // 34 | -------------------------------------------------------------------------------- /src/adxl345.cpp: -------------------------------------------------------------------------------- 1 | #include "ADXL345.h" 2 | 3 | ADXL345::ADXL345() { 4 | // Create I2C bus 5 | 6 | char *bus = "/dev/i2c-1"; 7 | if ((file = open(bus, O_RDWR)) < 0) 8 | { 9 | printf("Failed to open the bus. \n"); 10 | exit(1); 11 | } 12 | // Get I2C device, ADXL345 I2C address is 0x53(83) 13 | ioctl(file, I2C_SLAVE, _ADXL345); 14 | 15 | } 16 | 17 | void ADXL345::enableMeasurement() { 18 | 19 | // Select Bandwidth rate register(0x2C) 20 | // Normal mode, Output data rate = 100 Hz(0x0A) 21 | char config[2]={0}; 22 | config[0] = 0x2C; 23 | config[1] = 0x0A; 24 | write(file, config, 2); 25 | // Select Power control register(0x2D) 26 | // Auto-sleep disable(0x08) 27 | config[0] = 0x2D; 28 | config[1] = 0x08; 29 | write(file, config, 2); 30 | // Select Data format register(0x31) 31 | // Self test disabled, 4-wire interface, Full resolution, range = +/-2g(0x08) 32 | config[0] = 0x31; 33 | config[1] = 0x08; 34 | write(file, config, 2); 35 | sleep(1); 36 | 37 | } 38 | 39 | void ADXL345::setAxisOffset(char reg, char offset) { 40 | write(file, ®, 1); 41 | write(file, &offset, 1); 42 | } 43 | 44 | void ADXL345::RollandPitch(float& roll, float& pitch) { 45 | 46 | // Read 6 bytes of data from register(0x32) 47 | // xAccl lsb, xAccl msb, yAccl lsb, yAccl msb, zAccl lsb, zAccl msb 48 | char reg[1] = {0x32}; 49 | write(file, reg, 1); 50 | char data[6] ={0}; 51 | if(read(file, data, 6) != 6) 52 | { 53 | printf("Erorr : Input/output Erorr \n"); 54 | exit(1); 55 | } 56 | else 57 | { 58 | // Convert the data to 10-bits 59 | xAccl = ((data[1] & 0x03) * 256 + (data[0] & 0xFF)); 60 | if(xAccl > 511) 61 | { 62 | xAccl -= 1024; 63 | } 64 | 65 | yAccl = ((data[3] & 0x03) * 256 + (data[2] & 0xFF)); 66 | if(yAccl > 511) 67 | { 68 | yAccl -= 1024; 69 | } 70 | 71 | zAccl = ((data[5] & 0x03) * 256 + (data[4] & 0xFF)); 72 | if(zAccl > 511) 73 | { 74 | zAccl -= 1024; 75 | } 76 | } 77 | // Output data to screen 78 | printf("Acceleration in X-Axis : %d \n", xAccl); 79 | printf("Acceleration in Y-Axis : %d \n", yAccl); 80 | printf("Acceleration in Z-Axis : %d \n", zAccl); 81 | 82 | } 83 | ADXL345::~ADXL345() { 84 | } 85 | --------------------------------------------------------------------------------