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