-
-
Notifications
You must be signed in to change notification settings - Fork 733
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #761 from Ralim/feat_add_MSA301
Add MS301 support
- Loading branch information
Showing
6 changed files
with
157 additions
and
36 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
/* | ||
* MSA301.cpp | ||
* | ||
* Created on: 3 Jan 2021 | ||
* Author: Ralim | ||
*/ | ||
|
||
#include <MSA301.h> | ||
#include "MSA301_defines.h" | ||
#define MSA301_I2C_ADDRESS 0x4C | ||
bool MSA301::detect() { | ||
return FRToSI2C::probe(MSA301_I2C_ADDRESS); | ||
} | ||
|
||
static const FRToSI2C::I2C_REG i2c_registers[] = { // | ||
// | ||
{ MSA301_REG_ODR, 0b00001000, 1 }, //X/Y/Z enabled @ 250Hz | ||
{ MSA301_REG_POWERMODE, 0b0001001, 1 }, // Normal mode | ||
{ MSA301_REG_RESRANGE, 0b00000001, 0 }, // 14bit resolution @ 4G range | ||
{ MSA301_REG_ORIENT_HY, 0b01000000, 0 }, // 4*62.5mg hyst, no blocking, symmetrical | ||
{ MSA301_REG_INTSET0, 1 << 6, 0 }, // Turn on orientation detection (by enabling its interrupt) | ||
|
||
}; | ||
|
||
bool MSA301::initalize() { | ||
return FRToSI2C::writeRegistersBulk(MSA301_I2C_ADDRESS, i2c_registers, sizeof(i2c_registers) / sizeof(i2c_registers[0])); | ||
} | ||
|
||
Orientation MSA301::getOrientation() { | ||
uint8_t temp = 0; | ||
FRToSI2C::Mem_Read(MSA301_I2C_ADDRESS, MSA301_REG_ORIENT_STATUS, &temp, 1); | ||
switch (temp) { | ||
case 112: | ||
return Orientation::ORIENTATION_LEFT_HAND; | ||
case 96: | ||
return Orientation::ORIENTATION_RIGHT_HAND; | ||
default: | ||
return Orientation::ORIENTATION_FLAT; | ||
} | ||
} | ||
|
||
void MSA301::getAxisReadings(int16_t &x, int16_t &y, int16_t &z) { | ||
uint8_t temp[6]; | ||
//Bulk read all 6 regs | ||
FRToSI2C::Mem_Read(MSA301_I2C_ADDRESS, MSA301_REG_OUT_X_L, temp, 6); | ||
x = int16_t(((int16_t) temp[1]) << 8 | temp[0]) >> 2; | ||
y = int16_t(((int16_t) temp[3]) << 8 | temp[2]) >> 2; | ||
z = int16_t(((int16_t) temp[5]) << 8 | temp[4]) >> 2; | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
/* | ||
* MSA301.h | ||
* | ||
* Created on: 3 Jan 2021 | ||
* Author: Ralim | ||
*/ | ||
|
||
#ifndef DRIVERS_MSA301_H_ | ||
#define DRIVERS_MSA301_H_ | ||
#include "I2C_Wrapper.hpp" | ||
#include "BSP.h" | ||
|
||
class MSA301 { | ||
public: | ||
//Returns true if this accelerometer is detected | ||
static bool detect(); | ||
//Init any internal state | ||
static bool initalize(); | ||
// Reads the I2C register and returns the orientation | ||
static Orientation getOrientation(); | ||
//Return the x/y/z axis readings as signed int16's | ||
static void getAxisReadings(int16_t &x, int16_t &y, int16_t &z); | ||
|
||
private: | ||
}; | ||
|
||
#endif /* DRIVERS_MSA301_H_ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
/* | ||
* MSA301_defines.h | ||
* | ||
* Created on: 3 Jan 2021 | ||
* Author: Ralim | ||
*/ | ||
|
||
#ifndef DRIVERS_MSA301_DEFINES_H_ | ||
#define DRIVERS_MSA301_DEFINES_H_ | ||
//Definitions from Adafruit <3 | ||
|
||
#define MSA301_REG_PARTID 0x01 ///< Register that contains the part ID | ||
#define MSA301_REG_OUT_X_L 0x02 ///< Register address for X axis lower byte | ||
#define MSA301_REG_OUT_X_H 0x03 ///< Register address for X axis higher byte | ||
#define MSA301_REG_OUT_Y_L 0x04 ///< Register address for Y axis lower byte | ||
#define MSA301_REG_OUT_Y_H 0x05 ///< Register address for Y axis higher byte | ||
#define MSA301_REG_OUT_Z_L 0x06 ///< Register address for Z axis lower byte | ||
#define MSA301_REG_OUT_Z_H 0x07 ///< Register address for Z axis higher byte | ||
#define MSA301_REG_MOTIONINT 0x09 ///< Register address for motion interrupt | ||
#define MSA301_REG_DATAINT 0x0A ///< Register address for data interrupt | ||
#define MSA301_REG_CLICKSTATUS 0x0B ///< Register address for click/doubleclick status | ||
#define MSA301_REG_RESRANGE 0x0F ///< Register address for resolution range | ||
#define MSA301_REG_ODR 0x10 ///< Register address for data rate setting | ||
#define MSA301_REG_POWERMODE 0x11 ///< Register address for power mode setting | ||
#define MSA301_REG_INTSET0 0x16 ///< Register address for interrupt setting #0 | ||
#define MSA301_REG_INTSET1 0x17 ///< Register address for interrupt setting #1 | ||
#define MSA301_REG_INTMAP0 0x19 ///< Register address for interrupt map #0 | ||
#define MSA301_REG_INTMAP1 0x1A ///< Register address for interrupt map #1 | ||
#define MSA301_REG_TAPDUR 0x2A ///< Register address for tap duration | ||
#define MSA301_REG_TAPTH 0x2B ///< Register address for tap threshold | ||
#define MSA301_REG_ORIENT_HY 0x2C ///< Register address for orientation Hysteresis | ||
#define MSA301_REG_ORIENT_STATUS 0x0C ///< Register address for orientation hysteresis | ||
|
||
#endif /* DRIVERS_MSA301_DEFINES_H_ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters