LPS22HBのライブラリ
Dependents: HYBRYD2018_IZU_ROCKET Hybrid_IZU201811_STMBBM_v4 Hybrid_IZU2019
pqLPS22HB_lib.cpp@0:52880f880b81, 2017-06-26 (annotated)
- Committer:
- Sigma884
- Date:
- Mon Jun 26 08:16:14 2017 +0000
- Revision:
- 0:52880f880b81
- Child:
- 1:42cd33e0f174
LPS22HB??????
; ver1???????????????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Sigma884 | 0:52880f880b81 | 1 | #include "pqLPS22HB_lib.h" |
Sigma884 | 0:52880f880b81 | 2 | #include "mbed.h" |
Sigma884 | 0:52880f880b81 | 3 | |
Sigma884 | 0:52880f880b81 | 4 | /********** |
Sigma884 | 0:52880f880b81 | 5 | コンストラクタ |
Sigma884 | 0:52880f880b81 | 6 | ・AD0がHIGHかLOWかを選択 |
Sigma884 | 0:52880f880b81 | 7 | ・使用するI2Cを選択 |
Sigma884 | 0:52880f880b81 | 8 | **********/ |
Sigma884 | 0:52880f880b81 | 9 | pqLPS22HB_lib :: pqLPS22HB_lib(AD0 ad0, I2C &userI2C){ |
Sigma884 | 0:52880f880b81 | 10 | slave = ad0; |
Sigma884 | 0:52880f880b81 | 11 | i2c = &userI2C; |
Sigma884 | 0:52880f880b81 | 12 | } |
Sigma884 | 0:52880f880b81 | 13 | |
Sigma884 | 0:52880f880b81 | 14 | /********** |
Sigma884 | 0:52880f880b81 | 15 | センサー起動(void) |
Sigma884 | 0:52880f880b81 | 16 | ・データ更新レートを選択(1, 10, 25, 50, 75) |
Sigma884 | 0:52880f880b81 | 17 | **********/ |
Sigma884 | 0:52880f880b81 | 18 | void pqLPS22HB_lib :: begin(int drate){ |
Sigma884 | 0:52880f880b81 | 19 | cmd_ctrl_reg1[0] = CTRL_REG1; |
Sigma884 | 0:52880f880b81 | 20 | switch(drate){ |
Sigma884 | 0:52880f880b81 | 21 | case 1: |
Sigma884 | 0:52880f880b81 | 22 | cmd_ctrl_reg1[1] = 0x10; |
Sigma884 | 0:52880f880b81 | 23 | break; |
Sigma884 | 0:52880f880b81 | 24 | |
Sigma884 | 0:52880f880b81 | 25 | case 10: |
Sigma884 | 0:52880f880b81 | 26 | cmd_ctrl_reg1[1] = 0x20; |
Sigma884 | 0:52880f880b81 | 27 | break; |
Sigma884 | 0:52880f880b81 | 28 | |
Sigma884 | 0:52880f880b81 | 29 | case 25: |
Sigma884 | 0:52880f880b81 | 30 | cmd_ctrl_reg1[1] = 0x30; |
Sigma884 | 0:52880f880b81 | 31 | break; |
Sigma884 | 0:52880f880b81 | 32 | |
Sigma884 | 0:52880f880b81 | 33 | case 50: |
Sigma884 | 0:52880f880b81 | 34 | cmd_ctrl_reg1[1] = 0x40; |
Sigma884 | 0:52880f880b81 | 35 | break; |
Sigma884 | 0:52880f880b81 | 36 | |
Sigma884 | 0:52880f880b81 | 37 | case 75: |
Sigma884 | 0:52880f880b81 | 38 | cmd_ctrl_reg1[1] = 0x50; |
Sigma884 | 0:52880f880b81 | 39 | break; |
Sigma884 | 0:52880f880b81 | 40 | |
Sigma884 | 0:52880f880b81 | 41 | default: |
Sigma884 | 0:52880f880b81 | 42 | cmd_ctrl_reg1[1] = 0x00; |
Sigma884 | 0:52880f880b81 | 43 | } |
Sigma884 | 0:52880f880b81 | 44 | |
Sigma884 | 0:52880f880b81 | 45 | i2c -> frequency(400000); |
Sigma884 | 0:52880f880b81 | 46 | i2c -> write(slave, cmd_ctrl_reg1, 2, true); |
Sigma884 | 0:52880f880b81 | 47 | wait(0.5f); |
Sigma884 | 0:52880f880b81 | 48 | } |
Sigma884 | 0:52880f880b81 | 49 | |
Sigma884 | 0:52880f880b81 | 50 | /********** |
Sigma884 | 0:52880f880b81 | 51 | FIFO設定(void)(未実装) |
Sigma884 | 0:52880f880b81 | 52 | ・モードを選択(したい) |
Sigma884 | 0:52880f880b81 | 53 | ・FIFO ウォーターマークレベルを選択(したい) |
Sigma884 | 0:52880f880b81 | 54 | **********/ |
Sigma884 | 0:52880f880b81 | 55 | void pqLPS22HB_lib :: setFIFO(){ //?? |
Sigma884 | 0:52880f880b81 | 56 | cmd_ctrl_reg2[0] = CTRL_REG2; |
Sigma884 | 0:52880f880b81 | 57 | cmd_ctrl_reg2[1] = 0x40; |
Sigma884 | 0:52880f880b81 | 58 | cmd_fifo_ctrl[0] = FIFO_CTRL; |
Sigma884 | 0:52880f880b81 | 59 | cmd_fifo_ctrl[1] = 0x5F; |
Sigma884 | 0:52880f880b81 | 60 | i2c -> write(slave, cmd_ctrl_reg2, 2, true); |
Sigma884 | 0:52880f880b81 | 61 | i2c -> write(slave, cmd_fifo_ctrl, 2, true); |
Sigma884 | 0:52880f880b81 | 62 | } |
Sigma884 | 0:52880f880b81 | 63 | |
Sigma884 | 0:52880f880b81 | 64 | /********** |
Sigma884 | 0:52880f880b81 | 65 | Who Am I(int) |
Sigma884 | 0:52880f880b81 | 66 | 接続できているかを判定 |
Sigma884 | 0:52880f880b81 | 67 | 接続OK:0 |
Sigma884 | 0:52880f880b81 | 68 | 接続NG:-1 |
Sigma884 | 0:52880f880b81 | 69 | **********/ |
Sigma884 | 0:52880f880b81 | 70 | int pqLPS22HB_lib :: whoAmI(){ |
Sigma884 | 0:52880f880b81 | 71 | cmd_who_am_i[0] = WHO_AM_I; |
Sigma884 | 0:52880f880b81 | 72 | i2c -> write(slave, cmd_who_am_i, 1, true); |
Sigma884 | 0:52880f880b81 | 73 | i2c -> read(slave | 1, &cmd_who_am_i[0], 1, true); |
Sigma884 | 0:52880f880b81 | 74 | |
Sigma884 | 0:52880f880b81 | 75 | if(cmd_who_am_i[0] == 0xB1){ |
Sigma884 | 0:52880f880b81 | 76 | return 0; |
Sigma884 | 0:52880f880b81 | 77 | } |
Sigma884 | 0:52880f880b81 | 78 | else{ |
Sigma884 | 0:52880f880b81 | 79 | return -1; |
Sigma884 | 0:52880f880b81 | 80 | } |
Sigma884 | 0:52880f880b81 | 81 | } |
Sigma884 | 0:52880f880b81 | 82 | |
Sigma884 | 0:52880f880b81 | 83 | /********** |
Sigma884 | 0:52880f880b81 | 84 | 気圧を取得(float) |
Sigma884 | 0:52880f880b81 | 85 | **********/ |
Sigma884 | 0:52880f880b81 | 86 | float pqLPS22HB_lib :: getPres(){ |
Sigma884 | 0:52880f880b81 | 87 | cmd_p[0] = P_XL; |
Sigma884 | 0:52880f880b81 | 88 | cmd_p[1] = P_L; |
Sigma884 | 0:52880f880b81 | 89 | cmd_p[2] = P_H; |
Sigma884 | 0:52880f880b81 | 90 | |
Sigma884 | 0:52880f880b81 | 91 | for(int c1 = 0; c1 < 3; c1 ++){ |
Sigma884 | 0:52880f880b81 | 92 | i2c -> write(slave, &cmd_p[c1], 1, true); |
Sigma884 | 0:52880f880b81 | 93 | i2c -> read(slave | 1, &cmd_p[c1], 1, true); |
Sigma884 | 0:52880f880b81 | 94 | data_p[c1] = (int)cmd_p[c1]; |
Sigma884 | 0:52880f880b81 | 95 | } |
Sigma884 | 0:52880f880b81 | 96 | |
Sigma884 | 0:52880f880b81 | 97 | return (float)(data_p[0] | data_p[1] << 8 | data_p[2] << 16) / 4096.0f; |
Sigma884 | 0:52880f880b81 | 98 | } |
Sigma884 | 0:52880f880b81 | 99 | |
Sigma884 | 0:52880f880b81 | 100 | /********** |
Sigma884 | 0:52880f880b81 | 101 | 温度を取得(float) |
Sigma884 | 0:52880f880b81 | 102 | **********/ |
Sigma884 | 0:52880f880b81 | 103 | float pqLPS22HB_lib :: getTemp(){ |
Sigma884 | 0:52880f880b81 | 104 | cmd_t[0] = T_L; |
Sigma884 | 0:52880f880b81 | 105 | cmd_t[1] = T_H; |
Sigma884 | 0:52880f880b81 | 106 | |
Sigma884 | 0:52880f880b81 | 107 | for(int c1 = 0; c1 < 2; c1 ++){ |
Sigma884 | 0:52880f880b81 | 108 | i2c -> write(slave, &cmd_t[c1], 1, true); |
Sigma884 | 0:52880f880b81 | 109 | i2c -> read(slave | 1, &cmd_t[c1], 1, true); |
Sigma884 | 0:52880f880b81 | 110 | data_t[c1] = (int)cmd_t[c1]; |
Sigma884 | 0:52880f880b81 | 111 | } |
Sigma884 | 0:52880f880b81 | 112 | |
Sigma884 | 0:52880f880b81 | 113 | if(data_t[1] >= 128){ |
Sigma884 | 0:52880f880b81 | 114 | return 20.0 - (float)(65536 - (data_t[0] | data_t[1] << 8)) / 480.0f; |
Sigma884 | 0:52880f880b81 | 115 | } |
Sigma884 | 0:52880f880b81 | 116 | else{ |
Sigma884 | 0:52880f880b81 | 117 | return 20.0 + (float)(data_t[0] | data_t[1] << 8) / 480.0f; |
Sigma884 | 0:52880f880b81 | 118 | } |
Sigma884 | 0:52880f880b81 | 119 | } |