このライブラリーはテストに作ったものです。近いうちに他の関数を加えた形でアップデートするつもりです。 read_8(int reg)、read_16(int reg) で レジスターregの値を8bit、16bitで読み込み、そのまま返します。受け取り側の変数をint8_t、int16_t で定義すれば正負に分かれた値を得られます。 write_8(int reg,int data)、write_16(int reg,int data)で レジスターregに8bit、16bit 書き込み、成功したら0、失敗したら1を返します。確認はread_8、read_16を用いています。 conect() でデバイスが使用可能かを調べ、見つかれば0、なければ1を返します。 reg_reset() で全てのレジスタの値を0にします。成功したら0、失敗したらその時点で処理を停止し、失敗したレジスタを返します。 レジスタは公式のデータシートに書いてあるものと文字は同じです。 もしかしたらうまく行かない関数があるかもしれません。次のアプデのときに修正予定です。

Dependents:   Nucleo_L3GD20_MMA7361_Kalman

l3gd20.h

Committer:
hirokimineshita
Date:
2016-09-29
Revision:
3:76a16de2531d
Parent:
2:de6dc4af9b75
Child:
4:70341ccebd1e

File content as of revision 3:76a16de2531d:

#ifndef _L3GD20_H_20150124_1526_
#define _L3GD20_H_20150124_1526_

#include "binary.h"

#define WHO_AM_I         0x0F
#define CTRL_REG1        0x20
#define CTRL_REG2        0x21
#define CTRL_REG3        0x22
#define CTRL_REG4        0x23
#define CTRL_REG5        0x24
#define REFERENCE        0x25
#define OUT_TEMP         0x26
#define STATUS_REG       0x27
#define OUT_X_L          0x28
#define OUT_X_H          0x29
#define OUT_Y_L          0x2A
#define OUT_Y_H          0x2B
#define OUT_Z_L          0x2C
#define OUT_Z_H          0x2D
#define FIFO_CTRL_REG    0x2E
#define FIFO_SRC_REG     0x2F
#define INT1_CFG         0x30
#define INT1_SRC         0x31
#define INT1_TSH_XH      0x32
#define INT1_TSH_XL      0x33
#define INT1_TSH_YH      0x34
#define INT1_TSH_YL      0x35
#define INT1_TSH_ZH      0x36
#define INT1_TSH_ZL      0x37
#define INT1_DURATION    0x38
#define READ             0x80
#define WRITE            0x00
#define X                0
#define Y                2
#define Z                4

/** This progrum is to be easy to control L3GD20 sensor
 * 
 * site:http://akizukidenshi.com/catalog/g/gK-06779/
 */
class l3gd20{
private:
    SPI l3gdev;
    DigitalOut l3gcs;
    Serial pcdev;
    int scale;
public:
    /** constracta
     * 
     * use default parm, set to mosi,miso,sck,cs:PB_15-PB_14
     * SPI frequency:1000000
     * SPI mode:3
     */
    l3gd20();
    
    /** constracta
     * only set frequency parm, set to mosi,miso,sck,cs:PB_15-PB_14
     * SPI mode:3
     * @param fhz SPI frequency
     */
    l3gd20(int fhz);
    l3gd20(PinName cs,int fhz);
    l3gd20(PinName miso,PinName mosi,PinName sck,PinName cs,int fhz,int mode = 3);
    int reg_reset();
    int conect();
    uint8_t read_8(uint8_t reg);
    uint16_t read_16(uint8_t reg);
    int write_8(uint8_t reg,uint8_t data);
    void s_write_8(uint8_t reg,uint8_t data);
    int write_16(uint8_t reg,uint16_t data);
    int get_scale();
    int set_scale(int dps);
    int get_temp();
    int16_t get_rotate_by_bit(int axis);
    float get_rotate_by_rad(int axis);
    float get_rotate(int axis);
    float deg_to_rad(float deg);
};

#endif