Fork
Dependents: BG96_K6xF_pelion-example-frdm BG96_K6xF_pelion-example-frdm_Temp
Revision 0:2741e9e34e8a, committed 2016-07-22
- Comitter:
- Rhyme
- Date:
- Fri Jul 22 08:31:32 2016 +0000
- Child:
- 1:8461f7fe0a7f
- Commit message:
- First commit before publishing
Changed in this revision
| FXAS21002.cpp | Show annotated file Show diff for this revision Revisions of this file |
| FXAS21002.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/FXAS21002.cpp Fri Jul 22 08:31:32 2016 +0000
@@ -0,0 +1,162 @@
+#include "mbed.h"
+#include "FXAS21002.h"
+
+/* Register Address definitions */
+#define REG_STATUS 0x00
+#define REG_OUT_X_MSB 0x01
+#define REG_OUT_X_LSB 0x02
+#define REG_OUT_Y_MSB 0x03
+#define REG_OUT_Y_LSB 0x04
+#define REG_OUT_Z_MSB 0x05
+#define REG_OUT_Z_LSB 0x06
+#define REG_DR_STATUS 0x07
+#define REG_F_STATUS 0x08
+#define REG_F_SETUP 0x09
+#define REG_F_EVENT 0x0A
+#define REG_INT_SRC_FLAG 0x0B
+#define REG_WHO_AM_I 0x0C
+#define REG_CTRL_REG0 0x0D
+#define REG_RT_CFG 0x0E
+#define REG_RT_SRC 0x0F
+#define REG_RT_THS 0x10
+#define REG_RT_COUNT 0x11
+#define REG_TEMP 0x12
+#define REG_CTRL_REG1 0x13
+#define REG_CTRL_REG2 0x14
+#define REG_CTRL_REG3 0x15
+
+
+FXAS21002::FXAS21002(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr<<1) {
+ // activate the peripheral
+}
+
+FXAS21002::~FXAS21002() { }
+
+uint8_t FXAS21002::getStatus(void)
+{
+ uint8_t status ;
+ readRegs(REG_STATUS, &status, 1) ;
+ return( status ) ;
+}
+
+int16_t FXAS21002::getX(void)
+{
+ uint8_t data[2] ;
+ int16_t value ;
+ readRegs(REG_OUT_X_MSB, &data[0], 1) ;
+ readRegs(REG_OUT_X_LSB, &data[1], 1) ;
+ value = (data[0] << 8) | data[1] ;
+ return(value) ;
+}
+
+int16_t FXAS21002::getY(void)
+{
+ uint8_t data[2] ;
+ int16_t value ;
+ readRegs(REG_OUT_Y_MSB, &data[0], 1) ;
+ readRegs(REG_OUT_Y_LSB, &data[1], 1) ;
+ value = (data[0] << 8) | data[1] ;
+ return(value) ;
+}
+
+int16_t FXAS21002::getZ(void)
+{
+ uint8_t data[2] ;
+ int16_t value ;
+ readRegs(REG_OUT_Z_MSB, &data[0], 1) ;
+ readRegs(REG_OUT_Z_LSB, &data[1], 1) ;
+ value = (data[0] << 8) | data[1] ;
+ return(value) ;
+}
+
+void selftest(bool mode)
+{
+ uint8_t value ;
+ value = getCTRL1() ;
+ if (mode) {
+ value |= 0x10 ;
+ } else {
+ value ^= 0x10 ;
+ }
+ setCTRL1(value) ;
+}
+
+void FXAS21002::activate(bool mode)
+{
+ uint8_t value ;
+ value = getCTRL1() ;
+ if (mode) {
+ value |= 0x02 ;
+ } else {
+ value ^= 0x02 ;
+ }
+ setCTRL1(value) ;
+}
+
+void FXAS21002::ready(bool mode)
+{
+ uint8_t value ;
+ value = getCTRL1() ;
+ if (mode) {
+ value |= 0x01 ;
+ } else {
+ value ^= 0x01 ;
+ }
+ setCTRL1(value) ;
+}
+
+uint8_t FXAS21002::getCTRL1(void)
+{
+ uint8_t value ;
+ readRegs(REG_CTRL_REG1, &value, 1) ;
+ return(value) ;
+}
+
+void FXAS21002::setCTRL1(uint8_t value)
+{
+ uint8_t data[2] ;
+ data[0] = REG_CTRL_REG1 ;
+ data[1] = value ;
+ writeRegs(data, 2) ;
+}
+
+uint8_t FXAS21002::getCTRL2(void)
+{
+ uint8_t value ;
+ readRegs(REG_CTRL_REG2, &value, 1) ;
+ return(value) ;
+}
+
+void FXAS21002::setCTRL2(uint8_t value)
+{
+ uint8_t data[2] ;
+ data[0] = REG_CTRL_REG2 ;
+ data[1] = value ;
+ writeRegs(data, 2) ;
+}
+
+uint8_t FXAS21002::getCTRL3(void)
+{
+ uint8_t value ;
+ readRegs(REG_CTRL_REG3, &value, 1) ;
+ return(value) ;
+}
+
+void FXAS21002::setCTRL3(uint8_t value)
+{
+ uint8_t data[2] ;
+ data[0] = REG_CTRL_REG3 ;
+ data[1] = value ;
+ writeRegs(data, 2) ;
+}
+
+
+void FXAS21002::readRegs(int addr, uint8_t * data, int len) {
+ char t[1] = {addr};
+ m_i2c.write(m_addr, t, 1, true);
+ m_i2c.read(m_addr, (char *)data, len);
+}
+
+void FXAS21002::writeRegs(uint8_t * data, int len) {
+ m_i2c.write(m_addr, (char *)data, len);
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/FXAS21002.h Fri Jul 22 08:31:32 2016 +0000
@@ -0,0 +1,166 @@
+/**
+ * FXAS21002
+ * 3-Axis Digital Angular Rate Gyroscope
+ */
+#ifndef FXAS21002_H
+#define FXAS21002_H
+
+#include "mbed.h"
+
+/**
+*
+*
+* @code
+#include "mbed.h"
+#include "FXAS21002.h"
+#define FXAS21002_I2C_ADDRESS (0x20)
+
+#if defined (TARGET_KL25Z)
+#define PIN_SCL PTE1
+#define PIN_SDA PTE0
+#elif defined (TARGET_KL46Z)
+#define PIN_SCL PTE1
+#define PIN_SDA PTE0
+#elif defined (TARGET_K64F)
+#define PIN_SCL PTE24
+#define PIN_SDA PTE25
+#elif defined (TARGET_K22F)
+#define PIN_SCL PTE1
+#define PIN_SDA PTE0
+#elif defined (TARGET_KL05Z)
+#define PIN_SCL PTB3
+#define PIN_SDA PTB4
+#elif defined (TARGET_NUCLEO_F411RE)
+#define PIN_SCL PB_8
+#define PIN_SDA PB_9
+#else
+ #error TARGET NOT DEFINED
+#endif
+
+int main() {
+ uint16_t result = 0 ;
+ int16_t temperature = 0 ;
+ FXAS21002 FXAS21002(PIN_SDA, PIN_SCL, FXAS21002_I2C_ADDRESS) ;
+
+ while(1) {
+ result = FXAS21002.getValue(&temperature) ;
+ printf("Temp %d C\n", temperature) ;
+ wait(1) ;
+ }
+}
+* @endcode
+*/
+class FXAS21002
+{
+public:
+ /**
+ * FXAS21002 constructor
+ *
+ * @param sda SDA pin
+ * @param sdl SCL pin
+ * @param addr addr of the I2C peripheral
+ */
+ FXAS21002(PinName sda, PinName scl, int addr);
+
+ /**
+ * FXAS21002 destructor
+ */
+ ~FXAS21002();
+
+ /**
+ * status register
+ */
+ uint8_t getStatus(void) ;
+
+ /**
+ * getX returns the value of
+ * REG_OUT_X_MSB
+ * REG_OUT_X_LSB
+ * as a signed 16bit integer
+ */
+ int16_t getX(void) ;
+
+ /**
+ * getY returns the value of
+ * REG_OUT_Y_MSB
+ * REG_OUT_Y_LSB
+ * as a signed 16bit integer
+ */
+ int16_t getY(void) ;
+
+ /**
+ * getZ returns the value of
+ * REG_OUT_Z_MSB
+ * REG_OUT_Z_LSB
+ * as a signed 16bit integer
+ */
+ int16_t getZ(void) ;
+
+ /**
+ * activate/deactivate the sensor
+ *
+ * @param mode true: Active false: Standby
+ */
+ void activate(bool mode) ;
+
+ /**
+ * Self-Test enable
+ *
+ * @param mode true: Self-Test enabled, false: Self-Test disabled
+ */
+ void selftest(bool mode) ;
+
+ /**
+ * Standby/Ready mode selection
+ *
+ * @param mode true: Ready, false: Standby
+ */
+ void ready(bool mode) ;
+
+ /**
+ * get value of CTRL_REG1
+ */
+ uint8_t getCTRL1(void) ;
+
+ /**
+ * set value to CTRL_REG1
+ *
+ * @param value value for CTRL_REG1
+ */
+ void setCTRL1(uint8_t value) ;
+
+ /**
+ * get value of CTRL_REG2
+ */
+ uint8_t getCTRL2(void) ;
+
+ /**
+ * set value to CTRL_REG2
+ *
+ * @param value value for CTRL_REG2
+ */
+ void setCTRL2(uint8_t value) ;
+
+ /**
+ * get value of CTRL_REG3
+ */
+ uint8_t getCTRL3(void) ;
+
+ /**
+ * set value to CTRL_REG3
+ *
+ * @param value value for CTRL_REG3
+ */
+ void setCTRL3(uint8_t value) ;
+
+
+
+private:
+ I2C m_i2c;
+ int m_addr;
+ void readRegs(int addr, uint8_t * data, int len);
+ void writeRegs(uint8_t * data, int len);
+
+};
+
+#endif
\ No newline at end of file
Daniel Lee