秋月販売のL3GD20使用8pinDIPジャイロセンサーモジュールのライブラリです。    FIFOを使って等間隔データの読み込みができます。    構造体のポインタをreadメソッドに渡すと値が入ります。    <今後の予定> ・レジスタへのアクセスの整理整頓    ・データレート/HighLowのフィルター/分解能の設定メソッド    ・mbedピン変化割り込みによるデータ取得(おそらく関数ポインタを割り込み処理のメソッドに渡してもらう)    ・読み取りデータにフィルターをかける。    ・データ取得の高速化   

L3GD20.h

Committer:
lelect
Date:
2014-04-03
Revision:
0:a07d3c1c7d2d

File content as of revision 0:a07d3c1c7d2d:

#ifndef MBED_SPI
#define MBED_SPI
#include "mbed.h"
#include "L3GD20_Resister.h"
typedef struct {
    int16_t X;
    int16_t Y;
    int16_t Z;
    float x;
    float y;
    float z;
} anglerrates;
class L3GD20
{
public:
    L3GD20(PinName miso, PinName mosi, PinName scl, PinName cs/*, PinName interrupt1=NC, PinName interrupt2=NC*/);
    typedef enum {
        null=0x00
        ,WhoAmI=0x0F
        ,CtrlReg1=0x20
        ,CtrlReg2=0x21
        ,CtrlReg3=0x22
        ,CtrlReg4=0x23
        ,CtrlReg5=0x24
        ,Reference=0x25
        ,OutTemp=0x26
        ,StatusReg=0x27
        ,OutXL=0x28
        ,OutXH=0x29
        ,OutYL=0x2A
        ,OutYH=0x2B
        ,OutZL=0x2C
        ,OutZH=0x2D
        ,FIFOCtrlReg=0x2E
        ,FIFOSrcReg=0x2F
        ,INT1Cfg=0x30
        ,INT1Src=0x31
        ,INT1ThsXH=0x32
        ,INT1ThsXL=0x33
        ,INT1ThsYH=0x34
        ,INT1ThsYL=0x35
        ,INT1ThsZH=0x36
        ,INT1ThsZL=0x37
        ,INT1Duration=0x38
        ,READ=0x80
    } RESISTER;
    typedef enum {
        Y=0x1
        ,X=0x1<<1
        ,Z=0x1<<2
        ,XY=X|Y
        ,XZ=X|Z
        ,YZ=Y|Z
        ,XYZ=X|Y|Z
    } DIRECTION;


    void start(DIRECTION enable);
    void stop();
    void sleep();
    void read(anglerrates* val,DIRECTION direction);
    int readTemperature();
    typedef enum {
        BYPASSmode=0x0
        ,FIFOmode
        ,STREAMmode
        ,STREAMtoFIFOmode
        ,BYPASStoSTREAMmode
    } FIFO_mode;
    typedef enum {
        none=0
        ,empty
        ,watermark
        ,overrun
    } FIFOstatus;
    struct tagFIFO {
        FIFOstatus status;
        int level;
    } FIFO;
    void enableFIFO(FIFO_mode mode,FIFOstatus interrupt,const int threshold);
    void updateFIFO(void);
    struct config {
        //read and write resister
        union CTRL_REG1 CTRL_REG1;
        union CTRL_REG2 CTRL_REG2;
        union CTRL_REG3 CTRL_REG3;
        union CTRL_REG4 CTRL_REG4;
        union CTRL_REG5 CTRL_REG5;
        union REF_DATACAP REF_DATACAP;
        union OUT_TEMP OUT_TEMP;
        union STATUS_REG STATUS_REG;
        union FIFO_CTRL_REG FIFO_CTRL_REG;
        union INT1_CFG INT1_CFG;
        union INT1_TSH_XH INT1_TSH_XH;
        union INT1_TSH_XL INT1_TSH_XL;
        union INT1_TSH_YH INT1_TSH_YH;
        union INT1_TSH_YL INT1_TSH_YL;
        union INT1_TSH_ZH INT1_TSH_ZH;
        union INT1_TSH_ZL INT1_TSH_ZL;
        union INT1_DURATION INT1_DURATION;
    } _config;
    struct status {
        //read only resister
        int OUT_TEMP;
        int STATUS_REG;
        union FIFO_SRC_REG FIFO_SRC_REG;
        int INT1_SRC;
    } _status;
    void configReadOut(void);
    void statusReadOut(void);
protected:
    void write(RESISTER reg,int val);
    void read(RESISTER reg,int* val);
    /*
        void datarate(uint8_t rate,uint8_t bandwidth);
        void setDataFormat();
        void filter(uint8_t mode,uint8_t frequency);
        void channelSource(uint8_t channnel,uint8_t dataSelection,uint8_t interruptSelection);
        void FIFO(uint8_t mode,uint8_t watermark);
        void interrupt(uint8_t source,uint8_t threthold,uint8_t duration,uint8_t Wait);
    */
    SPI _spi;
    DigitalOut _cs;
};

#endif