
test MAX31850
main.cpp@4:031e71e61e80, 2016-09-28 (annotated)
- Committer:
- fblanc
- Date:
- Wed Sep 28 06:46:10 2016 +0000
- Revision:
- 4:031e71e61e80
- Parent:
- 3:b4277f7c538e
test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fblanc | 4:031e71e61e80 | 1 | /** |
fblanc | 4:031e71e61e80 | 2 | * @brief MAX31850 |
fblanc | 4:031e71e61e80 | 3 | * @date 02/06/2014 |
fblanc | 4:031e71e61e80 | 4 | * @author F.BLANC LAAS-CNRS |
fblanc | 4:031e71e61e80 | 5 | * |
fblanc | 4:031e71e61e80 | 6 | */ |
fblanc | 0:55f2866e9c0c | 7 | #include "mbed.h" |
fblanc | 0:55f2866e9c0c | 8 | #include <stdint.h> |
fblanc | 0:55f2866e9c0c | 9 | #include <string.h> |
fblanc | 0:55f2866e9c0c | 10 | #include <map> |
fblanc | 0:55f2866e9c0c | 11 | |
fblanc | 0:55f2866e9c0c | 12 | #include "onewire.h" |
fblanc | 0:55f2866e9c0c | 13 | #include "shtlib.h" |
fblanc | 0:55f2866e9c0c | 14 | |
fblanc | 3:b4277f7c538e | 15 | #define VERSION "TK_2014_06_02" |
fblanc | 0:55f2866e9c0c | 16 | //OW |
fblanc | 0:55f2866e9c0c | 17 | uint8_t gSensorIDs[MAXBUS][MAXSENSORS][OW_ROMCODE_SIZE]; |
fblanc | 0:55f2866e9c0c | 18 | uint8_t nSensors[MAXBUS]; |
fblanc | 3:b4277f7c538e | 19 | //file |
fblanc | 3:b4277f7c538e | 20 | LocalFileSystem local("local"); |
fblanc | 0:55f2866e9c0c | 21 | |
fblanc | 0:55f2866e9c0c | 22 | //console |
fblanc | 0:55f2866e9c0c | 23 | Serial pc(USBTX, USBRX); // tx, rx |
fblanc | 0:55f2866e9c0c | 24 | char txt[128]; |
fblanc | 0:55f2866e9c0c | 25 | //LED |
fblanc | 0:55f2866e9c0c | 26 | DigitalOut led1(LED1); |
fblanc | 0:55f2866e9c0c | 27 | DigitalOut led2(LED2); |
fblanc | 0:55f2866e9c0c | 28 | DigitalOut led3(LED3); |
fblanc | 0:55f2866e9c0c | 29 | DigitalOut led4(LED4); |
fblanc | 0:55f2866e9c0c | 30 | // SHT |
fblanc | 0:55f2866e9c0c | 31 | SHT75 sht(p19, p20); |
fblanc | 0:55f2866e9c0c | 32 | int shtpresent=false; |
fblanc | 0:55f2866e9c0c | 33 | char sht_temp_code[32],sht_humi_code[32]; |
fblanc | 0:55f2866e9c0c | 34 | int owpresent=false; |
fblanc | 0:55f2866e9c0c | 35 | //MAX31850 |
fblanc | 0:55f2866e9c0c | 36 | class Max31850 |
fblanc | 0:55f2866e9c0c | 37 | { |
fblanc | 0:55f2866e9c0c | 38 | private : |
fblanc | 0:55f2866e9c0c | 39 | char owID[17]; |
fblanc | 0:55f2866e9c0c | 40 | uint64_t uint64_owID; |
fblanc | 0:55f2866e9c0c | 41 | char tkID[5]; |
fblanc | 0:55f2866e9c0c | 42 | float offset; |
fblanc | 0:55f2866e9c0c | 43 | |
fblanc | 0:55f2866e9c0c | 44 | public : |
fblanc | 0:55f2866e9c0c | 45 | Max31850(); |
fblanc | 0:55f2866e9c0c | 46 | char *Get_owID(); |
fblanc | 0:55f2866e9c0c | 47 | uint64_t Get_uint64_owID(); |
fblanc | 0:55f2866e9c0c | 48 | char *Get_tkID(); |
fblanc | 0:55f2866e9c0c | 49 | float Get_offset(); |
fblanc | 0:55f2866e9c0c | 50 | |
fblanc | 0:55f2866e9c0c | 51 | void Set_owID(char *idow); |
fblanc | 0:55f2866e9c0c | 52 | void Set_tkID(char *tk); |
fblanc | 0:55f2866e9c0c | 53 | void Set_offset(float off); |
fblanc | 0:55f2866e9c0c | 54 | |
fblanc | 0:55f2866e9c0c | 55 | ~Max31850(); |
fblanc | 0:55f2866e9c0c | 56 | }; |
fblanc | 0:55f2866e9c0c | 57 | Max31850::Max31850() |
fblanc | 0:55f2866e9c0c | 58 | { |
fblanc | 0:55f2866e9c0c | 59 | |
fblanc | 0:55f2866e9c0c | 60 | } |
fblanc | 0:55f2866e9c0c | 61 | char * Max31850::Get_owID() |
fblanc | 0:55f2866e9c0c | 62 | { |
fblanc | 0:55f2866e9c0c | 63 | return owID; |
fblanc | 0:55f2866e9c0c | 64 | } |
fblanc | 0:55f2866e9c0c | 65 | uint64_t Max31850::Get_uint64_owID() |
fblanc | 0:55f2866e9c0c | 66 | { |
fblanc | 0:55f2866e9c0c | 67 | return uint64_owID; |
fblanc | 0:55f2866e9c0c | 68 | } |
fblanc | 0:55f2866e9c0c | 69 | char * Max31850::Get_tkID() |
fblanc | 0:55f2866e9c0c | 70 | { |
fblanc | 0:55f2866e9c0c | 71 | return tkID; |
fblanc | 0:55f2866e9c0c | 72 | } |
fblanc | 0:55f2866e9c0c | 73 | float Max31850::Get_offset() |
fblanc | 0:55f2866e9c0c | 74 | { |
fblanc | 0:55f2866e9c0c | 75 | return offset; |
fblanc | 0:55f2866e9c0c | 76 | } |
fblanc | 0:55f2866e9c0c | 77 | void Max31850::Set_owID(char *idow) |
fblanc | 0:55f2866e9c0c | 78 | { |
fblanc | 0:55f2866e9c0c | 79 | for(int i=0; i<17; ++i) |
fblanc | 0:55f2866e9c0c | 80 | owID[i]=idow[i]; |
fblanc | 0:55f2866e9c0c | 81 | uint64_owID=uint64_id( (uint8_t *)owID); |
fblanc | 0:55f2866e9c0c | 82 | } |
fblanc | 0:55f2866e9c0c | 83 | void Max31850::Set_tkID(char *tk) |
fblanc | 0:55f2866e9c0c | 84 | { |
fblanc | 0:55f2866e9c0c | 85 | for(int i=0; i<5; ++i) |
fblanc | 0:55f2866e9c0c | 86 | tkID[i]=tk[i]; |
fblanc | 0:55f2866e9c0c | 87 | } |
fblanc | 0:55f2866e9c0c | 88 | void Max31850::Set_offset(float off) |
fblanc | 0:55f2866e9c0c | 89 | { |
fblanc | 0:55f2866e9c0c | 90 | offset=off; |
fblanc | 0:55f2866e9c0c | 91 | } |
fblanc | 0:55f2866e9c0c | 92 | |
fblanc | 0:55f2866e9c0c | 93 | Max31850::~Max31850() |
fblanc | 0:55f2866e9c0c | 94 | { |
fblanc | 0:55f2866e9c0c | 95 | delete [] owID; |
fblanc | 0:55f2866e9c0c | 96 | delete [] tkID; |
fblanc | 0:55f2866e9c0c | 97 | |
fblanc | 0:55f2866e9c0c | 98 | } |
fblanc | 0:55f2866e9c0c | 99 | |
fblanc | 0:55f2866e9c0c | 100 | map < uint64_t, Max31850 *> mMax31850; |
fblanc | 0:55f2866e9c0c | 101 | |
fblanc | 0:55f2866e9c0c | 102 | //pc_rx |
fblanc | 0:55f2866e9c0c | 103 | |
fblanc | 0:55f2866e9c0c | 104 | |
fblanc | 0:55f2866e9c0c | 105 | void pc_rx(void) |
fblanc | 0:55f2866e9c0c | 106 | { |
fblanc | 0:55f2866e9c0c | 107 | char c; |
fblanc | 0:55f2866e9c0c | 108 | |
fblanc | 0:55f2866e9c0c | 109 | c=pc.getc(); |
fblanc | 3:b4277f7c538e | 110 | if (owpresent) { |
fblanc | 3:b4277f7c538e | 111 | int n; |
fblanc | 3:b4277f7c538e | 112 | int num_sensor; |
fblanc | 3:b4277f7c538e | 113 | uint64_t uint64_owID; |
fblanc | 3:b4277f7c538e | 114 | uint8_t sp[MAX31850_SP_SIZE]; |
fblanc | 3:b4277f7c538e | 115 | float temp; |
fblanc | 3:b4277f7c538e | 116 | int err; |
fblanc | 3:b4277f7c538e | 117 | switch (c) { |
fblanc | 3:b4277f7c538e | 118 | case '1': |
fblanc | 3:b4277f7c538e | 119 | n=0; |
fblanc | 3:b4277f7c538e | 120 | num_sensor=0; |
fblanc | 0:55f2866e9c0c | 121 | uint64_owID = uint64_id(&gSensorIDs[n][num_sensor][0]); |
fblanc | 0:55f2866e9c0c | 122 | for (uint8_t i=0 ; i< MAX31850_SP_SIZE; i++ ) |
fblanc | 0:55f2866e9c0c | 123 | sp[i]=0; |
fblanc | 0:55f2866e9c0c | 124 | MAX31850_Read_Scratch(gSensorIDs[n][num_sensor],sp,n) ; |
fblanc | 3:b4277f7c538e | 125 | err = MAX31850_Temp_TC(sp,&temp); |
fblanc | 1:a5b2695069e5 | 126 | if(err) { |
fblanc | 1:a5b2695069e5 | 127 | pc.printf( "-1.0\r "); |
fblanc | 1:a5b2695069e5 | 128 | } else { |
fblanc | 1:a5b2695069e5 | 129 | float temp_CJ; |
fblanc | 1:a5b2695069e5 | 130 | double temp_true; |
fblanc | 1:a5b2695069e5 | 131 | MAX31850_Temp_CJ(sp,&temp_CJ); |
fblanc | 1:a5b2695069e5 | 132 | MAX31850_Temp_TRUE(sp,&temp_true); |
fblanc | 1:a5b2695069e5 | 133 | temp_true=temp_true-mMax31850[uint64_owID]->Get_offset(); |
fblanc | 2:8e35ddc26023 | 134 | pc.printf( "%f\r",temp_true); |
fblanc | 0:55f2866e9c0c | 135 | |
fblanc | 1:a5b2695069e5 | 136 | } |
fblanc | 1:a5b2695069e5 | 137 | MAX31850_Start_meas(gSensorIDs[n][num_sensor],n); |
fblanc | 3:b4277f7c538e | 138 | break; |
fblanc | 3:b4277f7c538e | 139 | case '2': |
fblanc | 3:b4277f7c538e | 140 | n=0; |
fblanc | 3:b4277f7c538e | 141 | num_sensor=1; |
fblanc | 3:b4277f7c538e | 142 | uint64_owID = uint64_id(&gSensorIDs[n][num_sensor][0]); |
fblanc | 3:b4277f7c538e | 143 | for (uint8_t i=0 ; i< MAX31850_SP_SIZE; i++ ) |
fblanc | 3:b4277f7c538e | 144 | sp[i]=0; |
fblanc | 3:b4277f7c538e | 145 | MAX31850_Read_Scratch(gSensorIDs[n][num_sensor],sp,n) ; |
fblanc | 3:b4277f7c538e | 146 | err = MAX31850_Temp_TC(sp,&temp); |
fblanc | 3:b4277f7c538e | 147 | if(err) { |
fblanc | 3:b4277f7c538e | 148 | pc.printf( "-1.0\r "); |
fblanc | 3:b4277f7c538e | 149 | } else { |
fblanc | 3:b4277f7c538e | 150 | float temp_CJ; |
fblanc | 3:b4277f7c538e | 151 | double temp_true; |
fblanc | 3:b4277f7c538e | 152 | MAX31850_Temp_CJ(sp,&temp_CJ); |
fblanc | 3:b4277f7c538e | 153 | MAX31850_Temp_TRUE(sp,&temp_true); |
fblanc | 3:b4277f7c538e | 154 | temp_true=temp_true-mMax31850[uint64_owID]->Get_offset(); |
fblanc | 3:b4277f7c538e | 155 | pc.printf( "%f\r",temp_true); |
fblanc | 0:55f2866e9c0c | 156 | |
fblanc | 3:b4277f7c538e | 157 | } |
fblanc | 3:b4277f7c538e | 158 | MAX31850_Start_meas(gSensorIDs[n][num_sensor],n); |
fblanc | 3:b4277f7c538e | 159 | break; |
fblanc | 3:b4277f7c538e | 160 | case '3': |
fblanc | 3:b4277f7c538e | 161 | n=0; |
fblanc | 3:b4277f7c538e | 162 | num_sensor=2; |
fblanc | 3:b4277f7c538e | 163 | uint64_owID = uint64_id(&gSensorIDs[n][num_sensor][0]); |
fblanc | 3:b4277f7c538e | 164 | for (uint8_t i=0 ; i< MAX31850_SP_SIZE; i++ ) |
fblanc | 3:b4277f7c538e | 165 | sp[i]=0; |
fblanc | 3:b4277f7c538e | 166 | MAX31850_Read_Scratch(gSensorIDs[n][num_sensor],sp,n) ; |
fblanc | 3:b4277f7c538e | 167 | err = MAX31850_Temp_TC(sp,&temp); |
fblanc | 3:b4277f7c538e | 168 | if(err) { |
fblanc | 3:b4277f7c538e | 169 | pc.printf( "-1.0\r "); |
fblanc | 3:b4277f7c538e | 170 | } else { |
fblanc | 3:b4277f7c538e | 171 | float temp_CJ; |
fblanc | 3:b4277f7c538e | 172 | double temp_true; |
fblanc | 3:b4277f7c538e | 173 | MAX31850_Temp_CJ(sp,&temp_CJ); |
fblanc | 3:b4277f7c538e | 174 | MAX31850_Temp_TRUE(sp,&temp_true); |
fblanc | 3:b4277f7c538e | 175 | temp_true=temp_true-mMax31850[uint64_owID]->Get_offset(); |
fblanc | 3:b4277f7c538e | 176 | pc.printf( "%f\r",temp_true); |
fblanc | 0:55f2866e9c0c | 177 | |
fblanc | 3:b4277f7c538e | 178 | } |
fblanc | 3:b4277f7c538e | 179 | MAX31850_Start_meas(gSensorIDs[n][num_sensor],n); |
fblanc | 3:b4277f7c538e | 180 | break; |
fblanc | 3:b4277f7c538e | 181 | } |
fblanc | 3:b4277f7c538e | 182 | } |
fblanc | 0:55f2866e9c0c | 183 | |
fblanc | 3:b4277f7c538e | 184 | if(c=='*') { |
fblanc | 3:b4277f7c538e | 185 | pc.printf("Mbed Temp tk\r"); |
fblanc | 0:55f2866e9c0c | 186 | } |
fblanc | 0:55f2866e9c0c | 187 | |
fblanc | 0:55f2866e9c0c | 188 | } |
fblanc | 0:55f2866e9c0c | 189 | |
fblanc | 0:55f2866e9c0c | 190 | |
fblanc | 0:55f2866e9c0c | 191 | |
fblanc | 0:55f2866e9c0c | 192 | |
fblanc | 0:55f2866e9c0c | 193 | |
fblanc | 0:55f2866e9c0c | 194 | |
fblanc | 0:55f2866e9c0c | 195 | #define DELAISMESURE 1 |
fblanc | 0:55f2866e9c0c | 196 | int delaismesure=DELAISMESURE; |
fblanc | 0:55f2866e9c0c | 197 | int main(void) |
fblanc | 0:55f2866e9c0c | 198 | { |
fblanc | 0:55f2866e9c0c | 199 | uint8_t num_sensor; |
fblanc | 0:55f2866e9c0c | 200 | //init SHT |
fblanc | 0:55f2866e9c0c | 201 | shtpresent=sht_init(sht, "0002F7F070DB", sht_temp_code, sht_humi_code); |
fblanc | 0:55f2866e9c0c | 202 | |
fblanc | 0:55f2866e9c0c | 203 | //init FILEMAX31850 |
fblanc | 0:55f2866e9c0c | 204 | int nbMAX31850; |
fblanc | 0:55f2866e9c0c | 205 | FILE *fpini = fopen("/local/tk.ini", "r"); |
fblanc | 0:55f2866e9c0c | 206 | if(fpini == NULL) { |
fblanc | 0:55f2866e9c0c | 207 | ; |
fblanc | 0:55f2866e9c0c | 208 | } else { |
fblanc | 0:55f2866e9c0c | 209 | fscanf(fpini,"%d",&nbMAX31850); |
fblanc | 0:55f2866e9c0c | 210 | for (int i=0; i<nbMAX31850; ++i) { |
fblanc | 0:55f2866e9c0c | 211 | uint64_t uint64_owID; |
fblanc | 0:55f2866e9c0c | 212 | char owID[17]; |
fblanc | 0:55f2866e9c0c | 213 | char owIDinv[17]; |
fblanc | 0:55f2866e9c0c | 214 | fscanf(fpini,"%s ",owID); |
fblanc | 0:55f2866e9c0c | 215 | |
fblanc | 0:55f2866e9c0c | 216 | owIDinv[0]=owID[14]; |
fblanc | 0:55f2866e9c0c | 217 | owIDinv[1]=owID[15]; |
fblanc | 0:55f2866e9c0c | 218 | for(int j=2; j<14; ++j) { |
fblanc | 0:55f2866e9c0c | 219 | owIDinv[j]=owID[j]; |
fblanc | 0:55f2866e9c0c | 220 | } |
fblanc | 0:55f2866e9c0c | 221 | owIDinv[14]=owID[0]; |
fblanc | 0:55f2866e9c0c | 222 | owIDinv[15]=owID[1]; |
fblanc | 0:55f2866e9c0c | 223 | owIDinv[16]=owID[16]; |
fblanc | 0:55f2866e9c0c | 224 | uint64_owID = strtoull(owIDinv,NULL,16); |
fblanc | 0:55f2866e9c0c | 225 | mMax31850[uint64_owID] = new Max31850; |
fblanc | 0:55f2866e9c0c | 226 | mMax31850[uint64_owID]->Set_owID(owID); |
fblanc | 0:55f2866e9c0c | 227 | char tkID[5]; |
fblanc | 0:55f2866e9c0c | 228 | fscanf(fpini,"%s",tkID); |
fblanc | 0:55f2866e9c0c | 229 | mMax31850[uint64_owID]->Set_tkID(tkID); |
fblanc | 0:55f2866e9c0c | 230 | float offset; |
fblanc | 0:55f2866e9c0c | 231 | fscanf(fpini,"%f",&offset); |
fblanc | 0:55f2866e9c0c | 232 | mMax31850[uint64_owID]->Set_offset(offset); |
fblanc | 0:55f2866e9c0c | 233 | |
fblanc | 0:55f2866e9c0c | 234 | } |
fblanc | 0:55f2866e9c0c | 235 | fclose(fpini); |
fblanc | 0:55f2866e9c0c | 236 | } |
fblanc | 0:55f2866e9c0c | 237 | //***init OW |
fblanc | 0:55f2866e9c0c | 238 | |
fblanc | 0:55f2866e9c0c | 239 | for (uint8_t n=0; n<MAXBUS; ++n) { |
fblanc | 0:55f2866e9c0c | 240 | search_sensors(n,&nSensors[n],gSensorIDs); |
fblanc | 0:55f2866e9c0c | 241 | owpresent+=nSensors[n]; |
fblanc | 0:55f2866e9c0c | 242 | if (owpresent) { |
fblanc | 0:55f2866e9c0c | 243 | for (num_sensor=0; num_sensor<nSensors[n]; ++num_sensor) { |
fblanc | 0:55f2866e9c0c | 244 | |
fblanc | 0:55f2866e9c0c | 245 | switch (gSensorIDs[n][num_sensor][0]) { |
fblanc | 0:55f2866e9c0c | 246 | |
fblanc | 0:55f2866e9c0c | 247 | //MAX31850 |
fblanc | 0:55f2866e9c0c | 248 | case MAX31850_ID: |
fblanc | 0:55f2866e9c0c | 249 | |
fblanc | 0:55f2866e9c0c | 250 | |
fblanc | 0:55f2866e9c0c | 251 | MAX31850_Start_meas(gSensorIDs[n][num_sensor],n); |
fblanc | 0:55f2866e9c0c | 252 | wait(0.1); |
fblanc | 0:55f2866e9c0c | 253 | |
fblanc | 0:55f2866e9c0c | 254 | break; |
fblanc | 0:55f2866e9c0c | 255 | } |
fblanc | 0:55f2866e9c0c | 256 | } |
fblanc | 0:55f2866e9c0c | 257 | } |
fblanc | 0:55f2866e9c0c | 258 | } |
fblanc | 0:55f2866e9c0c | 259 | |
fblanc | 0:55f2866e9c0c | 260 | |
fblanc | 0:55f2866e9c0c | 261 | while (1) { |
fblanc | 0:55f2866e9c0c | 262 | if (pc.readable()) |
fblanc | 0:55f2866e9c0c | 263 | pc_rx(); |
fblanc | 0:55f2866e9c0c | 264 | } |
fblanc | 0:55f2866e9c0c | 265 | return 0; |
fblanc | 0:55f2866e9c0c | 266 | } |