Qubit 2020 / presensfirmwareupdate

Dependencies:   mbed

Committer:
whiteheadrf
Date:
Thu Jun 23 19:33:33 2022 +0000
Revision:
2:4603eae79fb6
Parent:
1:eac9f7a0488f
version for xbee wifi, new presens boards with firmware update to include view0005 and 4 wire pumps

Who changed what in which revision?

UserRevisionLine numberNew contents of line
whiteheadrf 0:1121a7ef2e36 1 #include "cisme.h"
whiteheadrf 0:1121a7ef2e36 2 #include "presens.h"
whiteheadrf 0:1121a7ef2e36 3 #include "OxygenSensor.h"
whiteheadrf 0:1121a7ef2e36 4 #include "debug.h"
whiteheadrf 0:1121a7ef2e36 5 #include "adc.h"
whiteheadrf 0:1121a7ef2e36 6
whiteheadrf 1:eac9f7a0488f 7
whiteheadrf 0:1121a7ef2e36 8 /* Due to unknown reason in old version presens was 6 symbol long. */
whiteheadrf 1:eac9f7a0488f 9
whiteheadrf 0:1121a7ef2e36 10 //#define PRESENS_FLOAT_LENGTH 6
whiteheadrf 0:1121a7ef2e36 11
whiteheadrf 0:1121a7ef2e36 12 Serial presenseComm(p9,p10);
whiteheadrf 0:1121a7ef2e36 13
whiteheadrf 0:1121a7ef2e36 14 static float presensReadFloat(int PRESENS_FLOAT_LENGTH)
whiteheadrf 0:1121a7ef2e36 15 {
whiteheadrf 0:1121a7ef2e36 16 double val_double;
whiteheadrf 0:1121a7ef2e36 17 float val_float;
whiteheadrf 0:1121a7ef2e36 18 char buf[PRESENS_FLOAT_LENGTH];
whiteheadrf 0:1121a7ef2e36 19 for(int i=0;i<PRESENS_FLOAT_LENGTH;i++){
whiteheadrf 0:1121a7ef2e36 20 buf[i]='0';
whiteheadrf 0:1121a7ef2e36 21 }
whiteheadrf 1:eac9f7a0488f 22
whiteheadrf 0:1121a7ef2e36 23 char charIx = 0;
whiteheadrf 0:1121a7ef2e36 24
whiteheadrf 0:1121a7ef2e36 25 while (charIx < PRESENS_FLOAT_LENGTH) {
whiteheadrf 0:1121a7ef2e36 26 buf[charIx++] = presenseComm.getc();
whiteheadrf 0:1121a7ef2e36 27 }
whiteheadrf 1:eac9f7a0488f 28
whiteheadrf 1:eac9f7a0488f 29 buf[PRESENS_FLOAT_LENGTH]=0;
whiteheadrf 1:eac9f7a0488f 30
whiteheadrf 0:1121a7ef2e36 31 DEBUG1("recieved characters=%s\r", buf);
whiteheadrf 1:eac9f7a0488f 32
whiteheadrf 0:1121a7ef2e36 33 val_double=atof(buf);
whiteheadrf 0:1121a7ef2e36 34 val_float= (float)val_double;
whiteheadrf 0:1121a7ef2e36 35
whiteheadrf 0:1121a7ef2e36 36 return val_float;
whiteheadrf 0:1121a7ef2e36 37 }
whiteheadrf 0:1121a7ef2e36 38
whiteheadrf 1:eac9f7a0488f 39
whiteheadrf 0:1121a7ef2e36 40 void presensInit(void)
whiteheadrf 0:1121a7ef2e36 41 {
whiteheadrf 0:1121a7ef2e36 42 //set the baud rate for the PreSense
whiteheadrf 0:1121a7ef2e36 43 presenseComm.baud(PRESENS_BAUD);
whiteheadrf 1:eac9f7a0488f 44
whiteheadrf 0:1121a7ef2e36 45 //set the Serial parameters for the PreSense
whiteheadrf 0:1121a7ef2e36 46 presenseComm.format(PRESENS_NO_BITS, PRESENS_PARITY, PRESENS_NO_STOP_BITS);
whiteheadrf 0:1121a7ef2e36 47
whiteheadrf 0:1121a7ef2e36 48 wait(PRESENS_CONFIG_DELAY);
whiteheadrf 0:1121a7ef2e36 49 }
whiteheadrf 0:1121a7ef2e36 50
whiteheadrf 1:eac9f7a0488f 51
whiteheadrf 0:1121a7ef2e36 52 void presensConfig(float ledCurrent)
whiteheadrf 0:1121a7ef2e36 53 {
whiteheadrf 1:eac9f7a0488f 54
whiteheadrf 0:1121a7ef2e36 55 wait(PRESENS_CONFIG_DELAY);
whiteheadrf 0:1121a7ef2e36 56
whiteheadrf 0:1121a7ef2e36 57 presenseComm.printf("");
whiteheadrf 0:1121a7ef2e36 58
whiteheadrf 0:1121a7ef2e36 59 if (ledCurrent > 255 || ledCurrent < 0) {
whiteheadrf 0:1121a7ef2e36 60 ERROR("Too big ledCurrent=%f, it should be not less than 0 and not greater than 255. Using default ledCurrent=%f", ledCurrent, PRESENS_LED_DEFAULT);
whiteheadrf 0:1121a7ef2e36 61 ledCurrent = PRESENS_LED_DEFAULT;
whiteheadrf 0:1121a7ef2e36 62 }
whiteheadrf 0:1121a7ef2e36 63
whiteheadrf 1:eac9f7a0488f 64
whiteheadrf 0:1121a7ef2e36 65 presenseComm.printf("sacu%-.4d\r", (int)ledCurrent);
whiteheadrf 0:1121a7ef2e36 66
whiteheadrf 0:1121a7ef2e36 67 presenseComm.printf("mode0001\r");
whiteheadrf 0:1121a7ef2e36 68 wait(PRESENS_CONFIG_DELAY);
whiteheadrf 1:eac9f7a0488f 69
whiteheadrf 0:1121a7ef2e36 70 presenseComm.printf("avrg0009\r");
whiteheadrf 0:1121a7ef2e36 71 wait(PRESENS_CONFIG_DELAY);
whiteheadrf 1:eac9f7a0488f 72
whiteheadrf 0:1121a7ef2e36 73 presenseComm.printf("view0005\r");
whiteheadrf 0:1121a7ef2e36 74 wait(PRESENS_CONFIG_DELAY);
whiteheadrf 1:eac9f7a0488f 75
whiteheadrf 0:1121a7ef2e36 76 presenseComm.printf("tmpc2000\r");
whiteheadrf 0:1121a7ef2e36 77 wait(PRESENS_CONFIG_DELAY);
whiteheadrf 0:1121a7ef2e36 78
whiteheadrf 2:4603eae79fb6 79 // presenseComm.printf("mode0000\r");
whiteheadrf 2:4603eae79fb6 80 // wait(PRESENS_CONFIG_DELAY);
whiteheadrf 1:eac9f7a0488f 81
whiteheadrf 0:1121a7ef2e36 82 }
whiteheadrf 0:1121a7ef2e36 83
whiteheadrf 1:eac9f7a0488f 84
whiteheadrf 0:1121a7ef2e36 85 void presensGetData(float* result)
whiteheadrf 0:1121a7ef2e36 86 {
whiteheadrf 0:1121a7ef2e36 87 float amplitude = 0;
whiteheadrf 0:1121a7ef2e36 88 float phase = 0;
whiteheadrf 0:1121a7ef2e36 89 int PRESENS_FLOAT_LENGTH = 7;
whiteheadrf 0:1121a7ef2e36 90
whiteheadrf 1:eac9f7a0488f 91 presenseComm.printf("data\r");
whiteheadrf 2:4603eae79fb6 92 wait(0.2);
whiteheadrf 0:1121a7ef2e36 93 adcGetData();
whiteheadrf 1:eac9f7a0488f 94 wait(0.1);
whiteheadrf 0:1121a7ef2e36 95
whiteheadrf 0:1121a7ef2e36 96 const OxygenSensor oxsense(TempCal1, TempCal2, PhaseCal1, PhaseCal2, PresCal, PRESENS_SALINITY);
whiteheadrf 0:1121a7ef2e36 97
whiteheadrf 0:1121a7ef2e36 98 if (result == NULL) {
whiteheadrf 0:1121a7ef2e36 99 ERROR("Result array is null");
whiteheadrf 0:1121a7ef2e36 100 return;
whiteheadrf 0:1121a7ef2e36 101 }
whiteheadrf 0:1121a7ef2e36 102
whiteheadrf 1:eac9f7a0488f 103
whiteheadrf 2:4603eae79fb6 104 L3 = 1;
whiteheadrf 1:eac9f7a0488f 105
whiteheadrf 0:1121a7ef2e36 106
whiteheadrf 0:1121a7ef2e36 107 // read the each data packet
whiteheadrf 0:1121a7ef2e36 108
whiteheadrf 0:1121a7ef2e36 109 while (presenseComm.readable() != 1);
whiteheadrf 0:1121a7ef2e36 110
whiteheadrf 0:1121a7ef2e36 111 //waiting until letter 'A' is read
whiteheadrf 0:1121a7ef2e36 112 //presens amp get
whiteheadrf 1:eac9f7a0488f 113
whiteheadrf 0:1121a7ef2e36 114 while (presenseComm.getc() != 65);
whiteheadrf 0:1121a7ef2e36 115
whiteheadrf 0:1121a7ef2e36 116 amplitude = presensReadFloat(PRESENS_FLOAT_LENGTH);
whiteheadrf 0:1121a7ef2e36 117
whiteheadrf 0:1121a7ef2e36 118 /* skip the characters semicolon ":" and letter "P" */
whiteheadrf 1:eac9f7a0488f 119 //while (presenseComm.getc() != 80);
whiteheadrf 1:eac9f7a0488f 120 presenseComm.getc();
whiteheadrf 1:eac9f7a0488f 121 presenseComm.getc();
whiteheadrf 1:eac9f7a0488f 122
whiteheadrf 2:4603eae79fb6 123 //this wait seems to cure the chart stutter that was happening with the new Presens board
whiteheadrf 2:4603eae79fb6 124 wait(0.55);
whiteheadrf 0:1121a7ef2e36 125
whiteheadrf 0:1121a7ef2e36 126 L4=1;
whiteheadrf 1:eac9f7a0488f 127
whiteheadrf 2:4603eae79fb6 128 // wait(0.05);
whiteheadrf 2:4603eae79fb6 129
whiteheadrf 0:1121a7ef2e36 130 PRESENS_FLOAT_LENGTH = 4;
whiteheadrf 1:eac9f7a0488f 131
whiteheadrf 0:1121a7ef2e36 132 phase = presensReadFloat(PRESENS_FLOAT_LENGTH) / 100;
whiteheadrf 0:1121a7ef2e36 133
whiteheadrf 0:1121a7ef2e36 134 L3 = 0;
whiteheadrf 1:eac9f7a0488f 135
whiteheadrf 1:eac9f7a0488f 136
whiteheadrf 0:1121a7ef2e36 137 // read through the rest of packet to empty out the buffer
whiteheadrf 0:1121a7ef2e36 138
whiteheadrf 0:1121a7ef2e36 139 while(presenseComm.readable()) {
whiteheadrf 0:1121a7ef2e36 140 presenseComm.getc();
whiteheadrf 0:1121a7ef2e36 141 }
whiteheadrf 2:4603eae79fb6 142 wait(0.05);
whiteheadrf 1:eac9f7a0488f 143
whiteheadrf 0:1121a7ef2e36 144 // end of the data extraction
whiteheadrf 0:1121a7ef2e36 145
whiteheadrf 1:eac9f7a0488f 146
whiteheadrf 2:4603eae79fb6 147 // L3=1;
whiteheadrf 0:1121a7ef2e36 148
whiteheadrf 1:eac9f7a0488f 149
whiteheadrf 0:1121a7ef2e36 150 DEBUG1("Amplitude=%5.0f Phase=%5.2f", amplitude, phase);
whiteheadrf 0:1121a7ef2e36 151
whiteheadrf 1:eac9f7a0488f 152
whiteheadrf 0:1121a7ef2e36 153 result[0] = amplitude;
whiteheadrf 0:1121a7ef2e36 154 result[1] = phase;
whiteheadrf 0:1121a7ef2e36 155 result[2] = oxsense.calculate(PHTEMP, phase);
whiteheadrf 0:1121a7ef2e36 156
whiteheadrf 1:eac9f7a0488f 157
whiteheadrf 0:1121a7ef2e36 158 if (amplitude < 600) {
whiteheadrf 1:eac9f7a0488f 159 result[2] = 999.99;
whiteheadrf 0:1121a7ef2e36 160 }
whiteheadrf 0:1121a7ef2e36 161
whiteheadrf 1:eac9f7a0488f 162
whiteheadrf 0:1121a7ef2e36 163 DEBUG1("Result array:amplitude=%5.0f, phase=%2.2f, OxsenseData=%3.3f", amplitude, phase, result[2]);
whiteheadrf 0:1121a7ef2e36 164
whiteheadrf 1:eac9f7a0488f 165
whiteheadrf 2:4603eae79fb6 166 // L3=0;
whiteheadrf 0:1121a7ef2e36 167 L4=0;
whiteheadrf 1:eac9f7a0488f 168
whiteheadrf 0:1121a7ef2e36 169 }
whiteheadrf 1:eac9f7a0488f 170