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