Advertisement
baratiistok3

h file

Dec 23rd, 2019
494
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.43 KB | None | 0 0
  1. /*
  2.  * FXOS8700CQ
  3.  * Author: Matt Warner <mlw2224@rit.edu>
  4.  *
  5.  * The FXOS8700CQ is an accelerometer I2C sensor which is 3.3V tolerant.
  6.  */
  7. #ifndef FXOS8700CQ_H_
  8. #define FXOS8700CQ_H_
  9.  
  10. #include <Arduino.h> // for byte data type
  11.  
  12. // register addresses
  13. #define FXOS8700CQ_STATUS           0x00
  14. #define FXOS8700CQ_DR_STATUS        0x00
  15. #define FXOS8700CQ_F_STATUS         0x00
  16. #define FXOS8700CQ_OUT_X_MSB        0x01    
  17. #define FXOS8700CQ_OUT_X_LSB        0x02
  18. #define FXOS8700CQ_OUT_Y_MSB        0x03
  19. #define FXOS8700CQ_OUT_Y_LSB        0x04
  20. #define FXOS8700CQ_OUT_Z_MSB        0x05
  21. #define FXOS8700CQ_OUT_Z_LSB        0x06
  22. #define FXOS8700CQ_F_SETUP          0x09
  23. #define FXOS8700CQ_TRIG_CFG         0x0A
  24. #define FXOS8700CQ_SYSMOD           0x0B
  25. #define FXOS8700CQ_INT_SOURCE       0x0C
  26. #define FXOS8700CQ_WHO_AM_I         0x0D  
  27. #define FXOS8700CQ_XYZ_DATA_CFG     0x0E
  28. #define FXOS8700CQ_HP_FILTER_CUTOFF 0x0F
  29. #define FXOS8700CQ_PL_STATUS        0x10
  30. #define FXOS8700CQ_PL_CFG           0x11
  31. #define FXOS8700CQ_PL_COUNT         0x12
  32. #define FXOS8700CQ_PL_BF_ZCOMP      0x13
  33. #define FXOS8700CQ_P_L_THS_REG      0x14
  34. #define FXOS8700CQ_A_FFMT_CFG       0x15
  35. #define FXOS8700CQ_A_FFMT_SRC       0x16
  36. #define FXOS8700CQ_A_FFMT_THS       0x17
  37. #define FXOS8700CQ_A_FFMT_COUNT     0x18
  38. #define FXOS8700CQ_TRANSIENT_CFG    0x1D
  39. #define FXOS8700CQ_TRANSIENT_SRC    0x1E
  40. #define FXOS8700CQ_TRANSIENT_THS    0x1F
  41. #define FXOS8700CQ_TRANSIENT_COUNT  0x20
  42. #define FXOS8700CQ_PULSE_CFG        0x21
  43. #define FXOS8700CQ_PULSE_SRC        0x22
  44. #define FXOS8700CQ_PULSE_THSX       0x23
  45. #define FXOS8700CQ_PULSE_THSY       0x24
  46. #define FXOS8700CQ_PULSE_THSZ       0x25
  47. #define FXOS8700CQ_PULSE_TMLT       0x26
  48. #define FXOS8700CQ_PULSE_LTCY       0x27
  49. #define FXOS8700CQ_PULSE_WIND       0x28
  50. #define FXOS8700CQ_ASLP_COUNT       0x29
  51. #define FXOS8700CQ_CTRL_REG1        0x2A
  52. #define FXOS8700CQ_CTRL_REG2        0x2B
  53. #define FXOS8700CQ_CTRL_REG3        0x2C
  54. #define FXOS8700CQ_CTRL_REG4        0x2D
  55. #define FXOS8700CQ_CTRL_REG5        0x2E
  56. #define FXOS8700CQ_OFF_X            0x2F
  57. #define FXOS8700CQ_OFF_Y            0x30
  58. #define FXOS8700CQ_OFF_Z            0x31
  59. #define FXOS8700CQ_M_DR_STATUS      0x32
  60. #define FXOS8700CQ_M_OUT_X_MSB      0x33    
  61. #define FXOS8700CQ_M_OUT_X_LSB      0x34
  62. #define FXOS8700CQ_M_OUT_Y_MSB      0x35
  63. #define FXOS8700CQ_M_OUT_Y_LSB      0x36
  64. #define FXOS8700CQ_M_OUT_Z_MSB      0x37
  65. #define FXOS8700CQ_M_OUT_Z_LSB      0x38
  66. #define FXOS8700CQ_CMP_OUT_X_MSB    0x39    
  67. #define FXOS8700CQ_CMP_OUT_X_LSB    0x3A
  68. #define FXOS8700CQ_CMP_OUT_Y_MSB    0x3B
  69. #define FXOS8700CQ_CMP_OUT_Y_LSB    0x3C
  70. #define FXOS8700CQ_CMP_OUT_Z_MSB    0x3D
  71. #define FXOS8700CQ_CMP_OUT_Z_LSB    0x3E
  72. #define FXOS8700CQ_M_OFF_X_MSB      0x3F    
  73. #define FXOS8700CQ_M_OFF_X_LSB      0x40
  74. #define FXOS8700CQ_M_OFF_Y_MSB      0x41
  75. #define FXOS8700CQ_M_OFF_Y_LSB      0x42
  76. #define FXOS8700CQ_M_OFF_Z_MSB      0x43
  77. #define FXOS8700CQ_M_OFF_Z_LSB      0x44
  78. #define FXOS8700CQ_MAX_X_MSB        0x45  
  79. #define FXOS8700CQ_MAX_X_LSB        0x46
  80. #define FXOS8700CQ_MAX_Y_MSB        0x47
  81. #define FXOS8700CQ_MAX_Y_LSB        0x48
  82. #define FXOS8700CQ_MAX_Z_MSB        0x49
  83. #define FXOS8700CQ_MAX_Z_LSB        0x4A
  84. #define FXOS8700CQ_MIN_X_MSB        0x4B  
  85. #define FXOS8700CQ_MIN_X_LSB        0x4C
  86. #define FXOS8700CQ_MIN_Y_MSB        0x4D
  87. #define FXOS8700CQ_MIN_Y_LSB        0x4E
  88. #define FXOS8700CQ_MIN_Z_MSB        0x4F
  89. #define FXOS8700CQ_MIN_Z_LSB        0x50
  90. #define FXOS8700CQ_TEMP             0x51
  91. #define FXOS8700CQ_M_THS_CFG        0x52
  92. #define FXOS8700CQ_M_THS_SRC        0x53
  93. #define FXOS8700CQ_M_THS_X_MSB      0x54  
  94. #define FXOS8700CQ_M_THS_X_LSB      0x55
  95. #define FXOS8700CQ_M_THS_Y_MSB      0x56
  96. #define FXOS8700CQ_M_THS_Y_LSB      0x57
  97. #define FXOS8700CQ_M_THS_Z_MSB      0x58
  98. #define FXOS8700CQ_M_THS_Z_LSB      0x59
  99. #define FXOS8700CQ_M_THS_COUNT      0x5A
  100. #define FXOS8700CQ_M_CTRL_REG1      0x5B
  101. #define FXOS8700CQ_M_CTRL_REG2      0x5C
  102. #define FXOS8700CQ_M_CTRL_REG3      0x5D
  103. #define FXOS8700CQ_M_INT_SRC        0x5E
  104. #define FXOS8700CQ_A_VECM_CFG       0x5F
  105. #define FXOS8700CQ_A_VECM_THS_MSB   0x60
  106. #define FXOS8700CQ_A_VECM_THS_LSB   0x61
  107. #define FXOS8700CQ_A_VECM_CNT       0x62
  108. #define FXOS8700CQ_A_VECM_INITX_MSB 0x63  
  109. #define FXOS8700CQ_A_VECM_INITX_LSB 0x64
  110. #define FXOS8700CQ_A_VECM_INITY_MSB 0x65
  111. #define FXOS8700CQ_A_VECM_INITY_LSB 0x66
  112. #define FXOS8700CQ_A_VECM_INITZ_MSB 0x67
  113. #define FXOS8700CQ_A_VECM_INITZ_LSB 0x68
  114. #define FXOS8700CQ_M_VECM_CFG       0x69
  115. #define FXOS8700CQ_M_VECM_THS_MSB   0x6A
  116. #define FXOS8700CQ_M_VECM_THS_LSB   0x6B
  117. #define FXOS8700CQ_M_VECM_CNT       0x6C
  118. #define FXOS8700CQ_M_VECM_INITX_MSB 0x6D  
  119. #define FXOS8700CQ_M_VECM_INITX_LSB 0x6E
  120. #define FXOS8700CQ_M_VECM_INITY_MSB 0x6F
  121. #define FXOS8700CQ_M_VECM_INITY_LSB 0x70
  122. #define FXOS8700CQ_M_VECM_INITZ_MSB 0x71
  123. #define FXOS8700CQ_M_VECM_INITZ_LSB 0x72
  124. #define FXOS8700CQ_A_FFMT_THS_X_MSB 0x73
  125. #define FXOS8700CQ_A_FFMT_THS_X_LSB 0x74
  126. #define FXOS8700CQ_A_FFMT_THS_Y_MSB 0x75
  127. #define FXOS8700CQ_A_FFMT_THS_Y_LSB 0x76
  128. #define FXOS8700CQ_A_FFMT_THS_Z_MSB 0x77
  129. #define FXOS8700CQ_A_FFMT_THS_Z_LSB 0x78
  130.  
  131. // Set initial input parameters
  132. enum accelFSR {
  133.     AFS_2g = 0,
  134.     AFS_4g,
  135.     AFS_8g
  136. };
  137.  
  138. enum accelODR {
  139.     AODR_800HZ = 0, // 200 Hz
  140.     AODR_400HZ,
  141.     AODR_200HZ,
  142.     AODR_100HZ,
  143.     AODR_50HZ,
  144.     AODR_12_5HZ, // 12.5 Hz, etc.
  145.     AODR_6_25HZ,
  146.     AODR_1_56HZ
  147. };
  148.  
  149. enum magOSR {
  150.     MOSR_0 = 0,  // oversample ratio 2 at 50 and 200 Hz ODR
  151.     MOSR_1,
  152.     MOSR_2,
  153.     MOSR_3,
  154.     MOSR_4,
  155.     MOSR_5,  
  156.     MOSR_6,
  157.     MOSR_7      // oversample ratio 8 at 200 Hz ODR, 32 at 50 HZ ODR
  158. };
  159.  
  160.  
  161. class FXOS8700CQ
  162. {
  163.     public:
  164.     typedef struct
  165.     {
  166.         int16_t x;
  167.         int16_t y;
  168.         int16_t z;
  169.     } SRAWDATA;
  170.  
  171.     // Sensor data
  172.     SRAWDATA accelData; // RAW acceleration sensor data
  173.     SRAWDATA magData; // RAW magnometer sensor data
  174.     int8_t tempData; // RAW temperature data
  175.  
  176.     // Sensor configuration
  177.     uint8_t accelFSR;
  178.     uint8_t accelODR;
  179.     uint8_t magOSR;
  180.  
  181.     FXOS8700CQ(byte addr);
  182.  
  183.     // Register functions
  184.     void writeReg(byte reg, byte value);
  185.     byte readReg(byte reg);
  186.     void readRegs(byte startReg, uint8_t count, byte dest[]);
  187.  
  188.     // FXOS8700CQ functions
  189.     // Initialization & Termination
  190.     void init(void);
  191.     void standby(void);
  192.     void active(void);
  193.  
  194.     // Query sensor data
  195.     void readAccelData(void);
  196.     void readMagData(void);
  197.     void readTempData(void);
  198.  
  199.     // Resolution
  200.     float getAres(void);
  201.     float getMres(void);
  202.  
  203.     private:
  204.     // Sensor address
  205.     byte address;
  206. };
  207.  
  208. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement