![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
my new gear...
Diff: sensor/gy521.hpp
- Revision:
- 3:a9b4b2565a23
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sensor/gy521.hpp Sun Mar 27 04:51:16 2022 +0000 @@ -0,0 +1,58 @@ +#ifndef GY521_H +#define GY521_H +#include "mbed.h" + +/*GY521を使う。 + *I2Cオブジェクトを渡す + *GY521(I2C &i2c,int bit = 2,int calibration = 1000,double user_reg = 1.0); + *example + *L432KC : SDA = PB_7 , SCL = PB_6 + *F446RE : SDA = PB_3 , SCL = PB_10 + *ループ内で毎回 + *<obj>.update() + *を呼び出してください。 + */ +//I2C i2c(SDA,SCL); +//GY521 gyro(i2c); + +enum GY521RegisterMap { + WHO_AM_I = 0x75, + PWR_MGMT_1 = 0x6B, + LPF = 0x1A, + FS_SEL = 0x1B, + AFS_SEL = 0x1C, + ACCEL_XOUT_H = 0x3B, + ACCEL_YOUT_H = 0x3D, + ACCEL_ZOUT_H = 0x3F, + //TEMPERATURE = 0x41, + //GYRO_XOUT_H = 0x43, + //GYRO_YOUT_H = 0x45, + GYRO_ZOUT_H = 0x47 +}; + +class GY521{ +public: + GY521(I2C &i2c,int bit = 2,int calibration = 1000,double user_reg = 1.0); + double yaw; + //double temp; + void update(); + void reset(int user); + void start(double start = 0){ + yaw = start; + } + double checkStatus(int mode); +private: + I2C &i2c_; + Timer timer_; + int16_t gyroRead2(enum GY521RegisterMap reg); + double gyro_z_aver_; + double gyro_z_now_; + double gyro_z_prev_; + double gyro_LSB_; + double diff_yaw_; + int bit_; + int calibration_; + bool flag_; +}; + +#endif /* GY521_H */ \ No newline at end of file