You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.2 KiB
C++
71 lines
2.2 KiB
C++
#include "UserTypes.h"
|
|
// User data functions. Modify these functions for your data items.
|
|
|
|
// Start time for data
|
|
static uint32_t startMicros;
|
|
|
|
const uint8_t ADXL345_CS = 9;
|
|
|
|
const uint8_t POWER_CTL = 0x2D; //Power Control Register
|
|
const uint8_t DATA_FORMAT = 0x31;
|
|
const uint8_t DATAX0 = 0x32; //X-Axis Data 0
|
|
const uint8_t DATAX1 = 0x33; //X-Axis Data 1
|
|
const uint8_t DATAY0 = 0x34; //Y-Axis Data 0
|
|
const uint8_t DATAY1 = 0x35; //Y-Axis Data 1
|
|
const uint8_t DATAZ0 = 0x36; //Z-Axis Data 0
|
|
const uint8_t DATAZ1 = 0x37; //Z-Axis Data 1
|
|
|
|
void writeADXL345Register(const uint8_t registerAddress, const uint8_t value) {
|
|
// Max SPI clock frequency is 5 MHz with CPOL = 1 and CPHA = 1.
|
|
SPI.beginTransaction(SPISettings(5000000, MSBFIRST, SPI_MODE3));
|
|
digitalWrite(ADXL345_CS, LOW);
|
|
SPI.transfer(registerAddress);
|
|
SPI.transfer(value);
|
|
digitalWrite(ADXL345_CS, HIGH);
|
|
SPI.endTransaction();
|
|
}
|
|
|
|
void userSetup() {
|
|
SPI.begin();
|
|
pinMode(ADXL345_CS, OUTPUT);
|
|
digitalWrite(ADXL345_CS, HIGH);
|
|
//Put the ADXL345 into +/- 4G range by writing the value 0x01 to the DATA_FORMAT register.
|
|
writeADXL345Register(DATA_FORMAT, 0x01);
|
|
//Put the ADXL345 into Measurement Mode by writing 0x08 to the POWER_CTL register.
|
|
writeADXL345Register(POWER_CTL, 0x08); //Measurement mode
|
|
}
|
|
|
|
// Acquire a data record.
|
|
void acquireData(data_t* data) {
|
|
// Max SPI clock frequency is 5 MHz with CPOL = 1 and CPHA = 1.
|
|
SPI.beginTransaction(SPISettings(5000000, MSBFIRST, SPI_MODE3));
|
|
data->time = micros();
|
|
digitalWrite(ADXL345_CS, LOW);
|
|
// Read multiple bytes so or 0XC0 with address.
|
|
SPI.transfer(DATAX0 | 0XC0);
|
|
data->accel[0] = SPI.transfer(0) | (SPI.transfer(0) << 8);
|
|
data->accel[1] = SPI.transfer(0) | (SPI.transfer(0) << 8);
|
|
data->accel[2] = SPI.transfer(0) | (SPI.transfer(0) << 8);
|
|
digitalWrite(ADXL345_CS, HIGH);
|
|
SPI.endTransaction();
|
|
}
|
|
|
|
// Print a data record.
|
|
void printData(Print* pr, data_t* data) {
|
|
if (startMicros == 0) {
|
|
startMicros = data->time;
|
|
}
|
|
pr->print(data->time - startMicros);
|
|
for (int i = 0; i < ACCEL_DIM; i++) {
|
|
pr->write(',');
|
|
pr->print(data->accel[i]);
|
|
}
|
|
pr->println();
|
|
}
|
|
|
|
// Print data header.
|
|
void printHeader(Print* pr) {
|
|
startMicros = 0;
|
|
pr->println(F("micros,ax,ay,az"));
|
|
}
|