Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

UserFunctions.cpp 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include "UserTypes.h"
  2. // User data functions. Modify these functions for your data items.
  3. // Start time for data
  4. static uint32_t startMicros;
  5. const uint8_t ADXL345_CS = 9;
  6. const uint8_t POWER_CTL = 0x2D; //Power Control Register
  7. const uint8_t DATA_FORMAT = 0x31;
  8. const uint8_t DATAX0 = 0x32; //X-Axis Data 0
  9. const uint8_t DATAX1 = 0x33; //X-Axis Data 1
  10. const uint8_t DATAY0 = 0x34; //Y-Axis Data 0
  11. const uint8_t DATAY1 = 0x35; //Y-Axis Data 1
  12. const uint8_t DATAZ0 = 0x36; //Z-Axis Data 0
  13. const uint8_t DATAZ1 = 0x37; //Z-Axis Data 1
  14. void writeADXL345Register(const uint8_t registerAddress, const uint8_t value) {
  15. digitalWrite(ADXL345_CS, LOW);
  16. SPI.transfer(registerAddress);
  17. SPI.transfer(value);
  18. digitalWrite(ADXL345_CS, HIGH);
  19. }
  20. void userSetup() {
  21. SPI.begin();
  22. pinMode(ADXL345_CS, OUTPUT);
  23. digitalWrite(ADXL345_CS, HIGH);
  24. //Put the ADXL345 into +/- 4G range by writing the value 0x01 to the DATA_FORMAT register.
  25. writeADXL345Register(DATA_FORMAT, 0x01);
  26. //Put the ADXL345 into Measurement Mode by writing 0x08 to the POWER_CTL register.
  27. writeADXL345Register(POWER_CTL, 0x08); //Measurement mode
  28. }
  29. // Acquire a data record.
  30. void acquireData(data_t* data) {
  31. // Max SPI clock frequency is 5 MHz with CPOL = 1 and CPHA = 1.
  32. SPI.beginTransaction(SPISettings(5000000, MSBFIRST, SPI_MODE3));
  33. data->time = micros();
  34. digitalWrite(ADXL345_CS, LOW);
  35. // Read multiple bytes so or 0XC0 with address.
  36. SPI.transfer(DATAX0 | 0XC0);
  37. data->accel[0] = SPI.transfer(0) | (SPI.transfer(0) << 8);
  38. data->accel[1] = SPI.transfer(0) | (SPI.transfer(0) << 8);
  39. data->accel[2] = SPI.transfer(0) | (SPI.transfer(0) << 8);
  40. digitalWrite(ADXL345_CS, HIGH);
  41. SPI.endTransaction();
  42. }
  43. // Print a data record.
  44. void printData(Print* pr, data_t* data) {
  45. if (startMicros == 0) {
  46. startMicros = data->time;
  47. }
  48. pr->print(data->time - startMicros);
  49. for (int i = 0; i < ACCEL_DIM; i++) {
  50. pr->write(',');
  51. pr->print(data->accel[i]);
  52. }
  53. pr->println();
  54. }
  55. // Print data header.
  56. void printHeader(Print* pr) {
  57. startMicros = 0;
  58. pr->println(F("micros,ax,ay,az"));
  59. }