SHT31-DIS Library

Dependents:   HYBRYD2018_IZU_ROCKET

Committer:
Sigma884
Date:
Wed Nov 14 09:13:00 2018 +0000
Revision:
4:9a5de0485008
Parent:
3:16d45bca7580
wait_ms???????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zebrin1422 2:e87793cb9185 1 #include"mbed.h"
zebrin1422 2:e87793cb9185 2 #include"SHT3x.h"
zebrin1422 2:e87793cb9185 3
zebrin1422 2:e87793cb9185 4 //Serial pc(USBTX, USBRX); //tx, rx
zebrin1422 2:e87793cb9185 5
zebrin1422 2:e87793cb9185 6 mySHT3x::mySHT3x(I2C &i2cBus, AD0 celect){
zebrin1422 2:e87793cb9185 7 i2c = &i2cBus;
zebrin1422 2:e87793cb9185 8 if(celect == AD0_HIGH) _addr = SLV_ADDR_HIGH;
zebrin1422 2:e87793cb9185 9 else _addr = SLV_ADDR_LOW;
zebrin1422 3:16d45bca7580 10 SLV_WRITE_SHT = _addr;
zebrin1422 3:16d45bca7580 11 SLV_READ_SHT = _addr | 1;
zebrin1422 2:e87793cb9185 12 i2c->frequency(400000);
zebrin1422 2:e87793cb9185 13 }
zebrin1422 2:e87793cb9185 14 /**********
zebrin1422 2:e87793cb9185 15 ヒーターをセットする
zebrin1422 2:e87793cb9185 16 i=0ならば、ヒーターOFF
zebrin1422 2:e87793cb9185 17 i=1ならば、ヒーターON
zebrin1422 2:e87793cb9185 18 セット直後は5msくらい待ってあげる
zebrin1422 2:e87793cb9185 19 **********/
zebrin1422 2:e87793cb9185 20
zebrin1422 2:e87793cb9185 21 void mySHT3x::heater_set(int i)
zebrin1422 2:e87793cb9185 22 {
zebrin1422 2:e87793cb9185 23 char cmd[2][2];
zebrin1422 2:e87793cb9185 24 cmd[0][0] = 0x30;cmd[0][1] = 0x66;
zebrin1422 2:e87793cb9185 25 cmd[1][0] = 0x30;cmd[1][1] = 0x6D;
zebrin1422 2:e87793cb9185 26
zebrin1422 3:16d45bca7580 27 i2c->write(SLV_WRITE_SHT, cmd[i], 3);
zebrin1422 2:e87793cb9185 28 }
zebrin1422 2:e87793cb9185 29 /**************
zebrin1422 2:e87793cb9185 30 温度、湿度を取得する
zebrin1422 2:e87793cb9185 31 このセンサーは温度、または湿度のデータを個別で送ることはできず
zebrin1422 2:e87793cb9185 32 同時に送るので、一応個別に返す関数を作ったが、
zebrin1422 2:e87793cb9185 33 なるべくこっちでまとめて値を取得した方がいいのかも
zebrin1422 2:e87793cb9185 34 **************/
zebrin1422 2:e87793cb9185 35 void mySHT3x::get_temp_hum(float *temp, float *hum)
zebrin1422 2:e87793cb9185 36 {
zebrin1422 2:e87793cb9185 37 char cmd[2] = {0x24,0x00};
zebrin1422 2:e87793cb9185 38 char buff[6];
zebrin1422 2:e87793cb9185 39 unsigned int val[4];
zebrin1422 2:e87793cb9185 40
zebrin1422 3:16d45bca7580 41 i2c->write(SLV_WRITE_SHT, cmd, 2);
zebrin1422 2:e87793cb9185 42 wait_ms(30);
zebrin1422 3:16d45bca7580 43 i2c->read(SLV_READ_SHT, buff, 6);
zebrin1422 2:e87793cb9185 44
zebrin1422 2:e87793cb9185 45 val[0] = (unsigned int)buff[0]<<8;
zebrin1422 2:e87793cb9185 46 val[1] = (unsigned int)buff[1];
zebrin1422 2:e87793cb9185 47 val[2] = (unsigned int)buff[3]<<8;
zebrin1422 2:e87793cb9185 48 val[3] = (unsigned int)buff[4];
zebrin1422 2:e87793cb9185 49
zebrin1422 2:e87793cb9185 50 *temp = (float)(val[0] | val[1]);
zebrin1422 2:e87793cb9185 51 *hum = (float)(val[2] | val[3]);
zebrin1422 2:e87793cb9185 52
zebrin1422 2:e87793cb9185 53 *temp = *temp*175.0/65535-45.0;
zebrin1422 2:e87793cb9185 54 *hum = *hum*100.0/65535;
zebrin1422 2:e87793cb9185 55 }
zebrin1422 2:e87793cb9185 56 /***********
zebrin1422 2:e87793cb9185 57 温度を取得
zebrin1422 2:e87793cb9185 58 湿度が絶対にいらない場合はこっちで
zebrin1422 2:e87793cb9185 59 ************/
zebrin1422 2:e87793cb9185 60 float mySHT3x::get_temp()
zebrin1422 2:e87793cb9185 61 {
zebrin1422 2:e87793cb9185 62 char cmd[2] = {0x24,0x00};
zebrin1422 2:e87793cb9185 63 char buff[6];
zebrin1422 2:e87793cb9185 64 unsigned int val[2];
zebrin1422 2:e87793cb9185 65 float temp;
zebrin1422 2:e87793cb9185 66
zebrin1422 3:16d45bca7580 67 i2c->write(SLV_WRITE_SHT, cmd, 2);
Sigma884 4:9a5de0485008 68 //wait_ms(30);
zebrin1422 3:16d45bca7580 69 i2c->read(SLV_READ_SHT, buff, 6);
zebrin1422 2:e87793cb9185 70
zebrin1422 2:e87793cb9185 71 val[0] = (unsigned int)buff[0]<<8;
zebrin1422 2:e87793cb9185 72 val[1] = (unsigned int)buff[1];
zebrin1422 2:e87793cb9185 73
zebrin1422 2:e87793cb9185 74 temp = (float)(val[0] | val[1]);
zebrin1422 2:e87793cb9185 75 temp = temp*175.0/65535-45.0;
zebrin1422 2:e87793cb9185 76
zebrin1422 2:e87793cb9185 77 return temp;
zebrin1422 2:e87793cb9185 78 }
zebrin1422 2:e87793cb9185 79 /***************
zebrin1422 2:e87793cb9185 80 湿度を取得
zebrin1422 2:e87793cb9185 81 温度が絶対にいらない場合はこちらで
zebrin1422 2:e87793cb9185 82 *****************/
zebrin1422 2:e87793cb9185 83 float mySHT3x::get_hum()
zebrin1422 2:e87793cb9185 84 {
zebrin1422 2:e87793cb9185 85 char cmd[2] = {0x24,0x00};
zebrin1422 2:e87793cb9185 86 char buff[6];
zebrin1422 2:e87793cb9185 87 unsigned int val[2];
zebrin1422 2:e87793cb9185 88 float hum;
zebrin1422 2:e87793cb9185 89
zebrin1422 3:16d45bca7580 90 i2c->write(SLV_WRITE_SHT, cmd, 2);
Sigma884 4:9a5de0485008 91 //wait_ms(30);
zebrin1422 3:16d45bca7580 92 i2c->read(SLV_READ_SHT, buff, 6);
zebrin1422 2:e87793cb9185 93
zebrin1422 2:e87793cb9185 94 val[0] = (unsigned int)buff[3]<<8;
zebrin1422 2:e87793cb9185 95 val[1] = (unsigned int)buff[4];
zebrin1422 2:e87793cb9185 96
zebrin1422 2:e87793cb9185 97 hum = (float)(val[0] | val[1]);
zebrin1422 2:e87793cb9185 98 hum = hum*100.0/65535;
zebrin1422 2:e87793cb9185 99
zebrin1422 2:e87793cb9185 100 return hum;
zebrin1422 2:e87793cb9185 101 }
zebrin1422 2:e87793cb9185 102 /*************
zebrin1422 2:e87793cb9185 103 センサーの現在の状態を取得
zebrin1422 2:e87793cb9185 104 何bit目が何を表しているのかは
zebrin1422 2:e87793cb9185 105 データシートを参照
zebrin1422 2:e87793cb9185 106 *************/
zebrin1422 2:e87793cb9185 107 int mySHT3x::get_state()
zebrin1422 2:e87793cb9185 108 {
zebrin1422 2:e87793cb9185 109 char cmd[2] = {0xF3, 0x2D};
zebrin1422 2:e87793cb9185 110 char buff[2];
zebrin1422 2:e87793cb9185 111 unsigned int val[2];
zebrin1422 2:e87793cb9185 112 int state;
zebrin1422 2:e87793cb9185 113
zebrin1422 3:16d45bca7580 114 i2c->write(SLV_WRITE_SHT, cmd, 2);
zebrin1422 3:16d45bca7580 115 i2c->read(SLV_READ_SHT, buff, 2);
zebrin1422 2:e87793cb9185 116
zebrin1422 2:e87793cb9185 117 val[0] = (unsigned int)buff[0]<<8;
zebrin1422 2:e87793cb9185 118 val[1] = (unsigned int)buff[1];
zebrin1422 2:e87793cb9185 119
zebrin1422 2:e87793cb9185 120 state = (int)(val[0] | val[1]);
zebrin1422 2:e87793cb9185 121
zebrin1422 2:e87793cb9185 122 return state;
zebrin1422 2:e87793cb9185 123 }
zebrin1422 2:e87793cb9185 124
zebrin1422 2:e87793cb9185 125