Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
2021fork3/presens.cpp@2:4603eae79fb6, 2022-06-23 (annotated)
- 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?
| User | Revision | Line number | New 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 |