LPS22HBのライブラリ

Dependents:   HYBRYD2018_IZU_ROCKET Hybrid_IZU201811_STMBBM_v4 Hybrid_IZU2019

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?

UserRevisionLine numberNew 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 }