HDC1050 Library
HDC1050.cpp@3:f5ac17ccfcaf, 2017-07-15 (annotated)
- Committer:
- zebrin1422
- Date:
- Sat Jul 15 07:47:17 2017 +0000
- Revision:
- 3:f5ac17ccfcaf
- Parent:
- 2:d881c736c8fb
HDC1050 Library
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
zebrin1422 | 0:771ed287f6a8 | 1 | #include"mbed.h" |
zebrin1422 | 0:771ed287f6a8 | 2 | #include"HDC1050.h" |
zebrin1422 | 0:771ed287f6a8 | 3 | |
zebrin1422 | 0:771ed287f6a8 | 4 | //Serial pc(USBTX, USBRX); //tx, rx |
zebrin1422 | 0:771ed287f6a8 | 5 | |
zebrin1422 | 0:771ed287f6a8 | 6 | myHDC1050::myHDC1050(I2C &i2cBus){ |
zebrin1422 | 0:771ed287f6a8 | 7 | i2c = &i2cBus; |
zebrin1422 | 0:771ed287f6a8 | 8 | i2c->frequency(400000); |
zebrin1422 | 0:771ed287f6a8 | 9 | } |
zebrin1422 | 1:db08a3faa811 | 10 | /************** |
zebrin1422 | 1:db08a3faa811 | 11 | 温度、湿度を同時にとるか、個別にとるかを選択 |
zebrin1422 | 1:db08a3faa811 | 12 | 同時に取得 i=0 |
zebrin1422 | 1:db08a3faa811 | 13 | 個別に取得 i=1 |
zebrin1422 | 1:db08a3faa811 | 14 | 同時に取得(ヒーター付き) i=2 |
zebrin1422 | 1:db08a3faa811 | 15 | ****************/ |
zebrin1422 | 0:771ed287f6a8 | 16 | void myHDC1050::setup(int i) |
zebrin1422 | 0:771ed287f6a8 | 17 | { |
zebrin1422 | 0:771ed287f6a8 | 18 | reg = check_reg; |
zebrin1422 | 0:771ed287f6a8 | 19 | char cmd[3][2]; |
zebrin1422 | 0:771ed287f6a8 | 20 | cmd[0][0] = 0x10; cmd[0][1] = 0x00; |
zebrin1422 | 0:771ed287f6a8 | 21 | cmd[1][0] = 0x00; cmd[1][1] = 0x00; |
zebrin1422 | 1:db08a3faa811 | 22 | cmd[2][0] = 0x03; cmd[2][1] = 0x00; |
zebrin1422 | 0:771ed287f6a8 | 23 | |
zebrin1422 | 0:771ed287f6a8 | 24 | i2c->write(SLV_WRITE, ®, 1, true); |
zebrin1422 | 0:771ed287f6a8 | 25 | i2c->write(SLV_WRITE, cmd[i], 2, false); |
zebrin1422 | 0:771ed287f6a8 | 26 | } |
zebrin1422 | 1:db08a3faa811 | 27 | |
zebrin1422 | 1:db08a3faa811 | 28 | /****************** |
zebrin1422 | 1:db08a3faa811 | 29 | HDC1050との接続確認 |
zebrin1422 | 1:db08a3faa811 | 30 | 0が返ってくればOK |
zebrin1422 | 1:db08a3faa811 | 31 | 1が返ってくればError |
zebrin1422 | 1:db08a3faa811 | 32 | *******************/ |
zebrin1422 | 0:771ed287f6a8 | 33 | |
zebrin1422 | 0:771ed287f6a8 | 34 | int myHDC1050::Connection_check() |
zebrin1422 | 0:771ed287f6a8 | 35 | { |
zebrin1422 | 0:771ed287f6a8 | 36 | char reg = check_reg; |
zebrin1422 | 0:771ed287f6a8 | 37 | char check[2]; |
zebrin1422 | 0:771ed287f6a8 | 38 | |
zebrin1422 | 0:771ed287f6a8 | 39 | i2c->write(SLV_WRITE,®,1); |
zebrin1422 | 0:771ed287f6a8 | 40 | i2c->read(SLV_READ,check,2); |
zebrin1422 | 0:771ed287f6a8 | 41 | |
zebrin1422 | 0:771ed287f6a8 | 42 | if(check[0] == 0x10 && check[1] == 0x50)return 0; |
zebrin1422 | 0:771ed287f6a8 | 43 | else return 1; |
zebrin1422 | 0:771ed287f6a8 | 44 | |
zebrin1422 | 0:771ed287f6a8 | 45 | } |
zebrin1422 | 2:d881c736c8fb | 46 | |
zebrin1422 | 1:db08a3faa811 | 47 | /************* |
zebrin1422 | 1:db08a3faa811 | 48 | 温度、湿度を取得 |
zebrin1422 | 0:771ed287f6a8 | 49 | |
zebrin1422 | 1:db08a3faa811 | 50 | @example |
zebrin1422 | 1:db08a3faa811 | 51 | |
zebrin1422 | 1:db08a3faa811 | 52 | float temp,hum; |
zebrin1422 | 1:db08a3faa811 | 53 | |
zebrin1422 | 1:db08a3faa811 | 54 | myHDC1050.setup(0); or myHDC1050.setup(2); |
zebrin1422 | 1:db08a3faa811 | 55 | myHDC1050.get_temp_hum(&temp,&hum); |
zebrin1422 | 1:db08a3faa811 | 56 | **************/ |
zebrin1422 | 0:771ed287f6a8 | 57 | void myHDC1050::get_temp_hum(float *temp, float *hum) |
zebrin1422 | 0:771ed287f6a8 | 58 | { |
zebrin1422 | 0:771ed287f6a8 | 59 | char reg = Temperature_reg; |
zebrin1422 | 0:771ed287f6a8 | 60 | char buff[4]; |
zebrin1422 | 0:771ed287f6a8 | 61 | unsigned int val[4]; |
zebrin1422 | 0:771ed287f6a8 | 62 | |
zebrin1422 | 1:db08a3faa811 | 63 | //setup(0); |
zebrin1422 | 0:771ed287f6a8 | 64 | |
zebrin1422 | 0:771ed287f6a8 | 65 | i2c->write(SLV_WRITE, ®,1); |
zebrin1422 | 3:f5ac17ccfcaf | 66 | wait_ms(15); |
zebrin1422 | 0:771ed287f6a8 | 67 | i2c->read(SLV_READ, buff,4,false); |
zebrin1422 | 0:771ed287f6a8 | 68 | |
zebrin1422 | 0:771ed287f6a8 | 69 | val[0] = (unsigned int)buff[0] << 8; |
zebrin1422 | 0:771ed287f6a8 | 70 | val[1] = (unsigned int)buff[1]; |
zebrin1422 | 0:771ed287f6a8 | 71 | val[2] = (unsigned int)buff[2] << 8; |
zebrin1422 | 0:771ed287f6a8 | 72 | val[3] = (unsigned int)buff[3]; |
zebrin1422 | 0:771ed287f6a8 | 73 | |
zebrin1422 | 0:771ed287f6a8 | 74 | *temp = (float)(val[0] | val[1]); |
zebrin1422 | 0:771ed287f6a8 | 75 | *hum = (float)(val[2] | val[3]); |
zebrin1422 | 0:771ed287f6a8 | 76 | |
zebrin1422 | 0:771ed287f6a8 | 77 | *temp = *temp*165.0/65536.0 - 40.0; |
zebrin1422 | 0:771ed287f6a8 | 78 | *hum = *hum*100.0/65536.0; |
zebrin1422 | 0:771ed287f6a8 | 79 | |
zebrin1422 | 0:771ed287f6a8 | 80 | } |
zebrin1422 | 1:db08a3faa811 | 81 | /************* |
zebrin1422 | 1:db08a3faa811 | 82 | 温度を取得 |
zebrin1422 | 0:771ed287f6a8 | 83 | |
zebrin1422 | 1:db08a3faa811 | 84 | @example |
zebrin1422 | 1:db08a3faa811 | 85 | |
zebrin1422 | 1:db08a3faa811 | 86 | float temp; |
zebrin1422 | 1:db08a3faa811 | 87 | |
zebrin1422 | 1:db08a3faa811 | 88 | myHDC1050.setup(1); |
zebrin1422 | 1:db08a3faa811 | 89 | temp = myHDC1050.get_temp(); |
zebrin1422 | 1:db08a3faa811 | 90 | **************/ |
zebrin1422 | 1:db08a3faa811 | 91 | float myHDC1050::get_temp() |
zebrin1422 | 0:771ed287f6a8 | 92 | { |
zebrin1422 | 0:771ed287f6a8 | 93 | char reg = Temperature_reg; |
zebrin1422 | 0:771ed287f6a8 | 94 | char buff[2]; |
zebrin1422 | 0:771ed287f6a8 | 95 | unsigned int val[2]; |
zebrin1422 | 1:db08a3faa811 | 96 | float temp; |
zebrin1422 | 0:771ed287f6a8 | 97 | |
zebrin1422 | 1:db08a3faa811 | 98 | //setup(1); |
zebrin1422 | 0:771ed287f6a8 | 99 | |
zebrin1422 | 0:771ed287f6a8 | 100 | i2c->write(SLV_WRITE, ®,1); |
zebrin1422 | 3:f5ac17ccfcaf | 101 | wait_ms(15); |
zebrin1422 | 0:771ed287f6a8 | 102 | i2c->read(SLV_READ, buff, 2,false); |
zebrin1422 | 0:771ed287f6a8 | 103 | |
zebrin1422 | 0:771ed287f6a8 | 104 | val[0] = (unsigned int)buff[0] << 8; |
zebrin1422 | 0:771ed287f6a8 | 105 | val[1] = (unsigned int)buff[1]; |
zebrin1422 | 0:771ed287f6a8 | 106 | |
zebrin1422 | 1:db08a3faa811 | 107 | temp = (float)(val[0] | val[1]); |
zebrin1422 | 1:db08a3faa811 | 108 | temp = temp *165.0/65536.0 - 40.0; |
zebrin1422 | 1:db08a3faa811 | 109 | |
zebrin1422 | 1:db08a3faa811 | 110 | return temp; |
zebrin1422 | 0:771ed287f6a8 | 111 | |
zebrin1422 | 0:771ed287f6a8 | 112 | } |
zebrin1422 | 1:db08a3faa811 | 113 | /************* |
zebrin1422 | 1:db08a3faa811 | 114 | 湿度を取得 |
zebrin1422 | 0:771ed287f6a8 | 115 | |
zebrin1422 | 1:db08a3faa811 | 116 | @example |
zebrin1422 | 1:db08a3faa811 | 117 | |
zebrin1422 | 1:db08a3faa811 | 118 | float hum; |
zebrin1422 | 1:db08a3faa811 | 119 | |
zebrin1422 | 1:db08a3faa811 | 120 | myHDC1050.setup(1); |
zebrin1422 | 1:db08a3faa811 | 121 | hum = myHDC1050.get_hum(); |
zebrin1422 | 1:db08a3faa811 | 122 | **************/ |
zebrin1422 | 1:db08a3faa811 | 123 | float myHDC1050::get_hum() |
zebrin1422 | 0:771ed287f6a8 | 124 | { |
zebrin1422 | 0:771ed287f6a8 | 125 | char reg = Humidity_reg; |
zebrin1422 | 0:771ed287f6a8 | 126 | char buff[2]; |
zebrin1422 | 0:771ed287f6a8 | 127 | unsigned int val[2]; |
zebrin1422 | 1:db08a3faa811 | 128 | float hum; |
zebrin1422 | 0:771ed287f6a8 | 129 | |
zebrin1422 | 2:d881c736c8fb | 130 | //setup(1); |
zebrin1422 | 0:771ed287f6a8 | 131 | |
zebrin1422 | 0:771ed287f6a8 | 132 | i2c->write(SLV_WRITE, ®,1); |
zebrin1422 | 3:f5ac17ccfcaf | 133 | wait_ms(7); |
zebrin1422 | 0:771ed287f6a8 | 134 | i2c->read(SLV_READ, buff, 2,false); |
zebrin1422 | 0:771ed287f6a8 | 135 | |
zebrin1422 | 0:771ed287f6a8 | 136 | val[0] = (unsigned int)buff[0] << 8; |
zebrin1422 | 0:771ed287f6a8 | 137 | val[1] = (unsigned int)buff[1]; |
zebrin1422 | 0:771ed287f6a8 | 138 | |
zebrin1422 | 1:db08a3faa811 | 139 | hum = (float)(val[0] | val[1]); |
zebrin1422 | 1:db08a3faa811 | 140 | hum = hum*100.0/65536.0; |
zebrin1422 | 0:771ed287f6a8 | 141 | |
zebrin1422 | 1:db08a3faa811 | 142 | return hum; |
zebrin1422 | 1:db08a3faa811 | 143 | |
zebrin1422 | 1:db08a3faa811 | 144 | } |