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
lcd_events.cpp
00001 #include "cisme.h" 00002 #include "lcd.h" 00003 #include "lcd_events.h" 00004 #include "keys.h" 00005 #include "debug.h" 00006 #include "light.h" 00007 #include "pump.h" 00008 #include "buzzer.h" 00009 #include "presens.h" 00010 #include "adc.h" 00011 #include "experiments.h" 00012 #include "calibration.h" 00013 #include "battery.h" 00014 00015 #ifdef USE_LCD 00016 00017 typedef enum { 00018 HOME, 00019 EXP_PARAMS, 00020 UTILITIES, 00021 SYS_PARAMS, 00022 NUM_STATES, 00023 } LcdState; 00024 00025 typedef void (*EventHandler)(void); 00026 typedef void (*PrepareExperiment)(void); 00027 typedef bool (*RunExperiment)(void); 00028 00029 static LcdState state; 00030 00031 // Event handlers 00032 static void home(void); 00033 static void expParams(void); 00034 static void utilities(void); 00035 static void dateTime(void); 00036 static void light(void); 00037 static void pump(void); 00038 static void sysParams(void); 00039 static void purge(void); 00040 static void about(void); 00041 static void phCal(void); 00042 static void o2Cal(void); 00043 static void rawData(void); 00044 static void salinity(void); 00045 static void expType(void); 00046 static void expTime(void); 00047 static void expPump(void); 00048 static void expLight(void); 00049 static void expRun(void); 00050 static void toggleLight(void); 00051 static void togglePump(void); 00052 00053 static const EventHandler events[NUM_STATES][NUM_KEYS] = { 00054 //ZERO ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE ASTERISK HASH NONE 00055 {home, expParams, utilities, home, home, home, home, toggleLight, home, togglePump, home, home, home}, // HOME 00056 {NULL, expType, expTime, expPump, expLight, expRun, home, NULL, NULL, NULL, NULL, NULL, NULL}, // EXP_PARAMS 00057 {NULL, dateTime, light, pump, sysParams, purge, home, NULL, NULL, NULL, NULL, NULL, NULL}, // UTILITIES 00058 {NULL, about, phCal, o2Cal, rawData, salinity, utilities, NULL, NULL, NULL, NULL, NULL, NULL}, // SYS_PARAMS 00059 }; 00060 00061 static void home(void) 00062 { 00063 static bool startup = true; 00064 float presensData[PRESENS_RES_LENGTH]; 00065 00066 if (state != HOME) { 00067 lcdClear(); 00068 } 00069 00070 state = HOME; 00071 00072 presensGetData(presensData); 00073 float O2Float = presensData[2]; 00074 00075 if (startup) { 00076 L4 = 1; 00077 buzzerBeep(0.1); 00078 buzzerBeep(0.1); 00079 lcdClear(); 00080 L1 = 0; 00081 L2 = 0; 00082 L3 = 0; 00083 L4 = 0; 00084 startup = false; 00085 } 00086 00087 lcdWrite(0, 0, JUSTIFICATION_CENTER, " CISME 10.0 Bat _ %3.1f", batteryGet()); // Battery Voltage 00088 lcdWrite(1, 0, JUSTIFICATION_CENTER, "-----------------------"); 00089 lcdWrite(2, 0, JUSTIFICATION_ABSOLUTE, " %%a.s O2 _ %3.0f", O2Float); // O2 00090 lcdWrite(3, 0, JUSTIFICATION_ABSOLUTE, " pH _ %3.2f", pHCorrected); 00091 lcdWrite(4, 0, JUSTIFICATION_ABSOLUTE, " T_C _ %2.1f", PHTEMP); // Temp); 00092 lcdWrite(5, 0, JUSTIFICATION_CENTER, "---%s--%s---", (lightOn() ? "Light-On" : "--------"), 00093 ( pumpOn() ? "Pump-On" : "-------")); 00094 lcdWrite(6, 0, JUSTIFICATION_ABSOLUTE, "1 - Run Experiment"); 00095 lcdWrite(7, 0, JUSTIFICATION_ABSOLUTE, "2 - Utilities"); 00096 00097 NVIC_EnableIRQ(UART1_IRQn); 00098 00099 Key key = keyGet(); 00100 events[state][key](); 00101 } 00102 00103 static void expParams(void) 00104 { 00105 state = EXP_PARAMS; 00106 00107 lcdClear(); 00108 lcdWrite(0, 0, JUSTIFICATION_CENTER, "Params Edit"); 00109 lcdWrite(1, 0, JUSTIFICATION_CENTER, "-----------------------"); 00110 lcdWrite(2, 0, JUSTIFICATION_ABSOLUTE, "1 - Type"); 00111 lcdWrite(3, 0, JUSTIFICATION_ABSOLUTE, "2 - Duration"); 00112 lcdWrite(4, 0, JUSTIFICATION_ABSOLUTE, "3 - Flow"); 00113 lcdWrite(5, 0, JUSTIFICATION_ABSOLUTE, "4 - Light"); 00114 lcdWrite(6, 0, JUSTIFICATION_ABSOLUTE, "5 - RUN"); 00115 lcdWrite(7, 0, JUSTIFICATION_ABSOLUTE, "6 - Home Screen"); 00116 00117 // Write current values 00118 switch (MeasurementTypeVal) { 00119 case 9: 00120 lcdWrite(2, 16, JUSTIFICATION_ABSOLUTE, "-"); 00121 lcdWrite(3, 16, JUSTIFICATION_ABSOLUTE, "-"); 00122 break; 00123 case 0: 00124 lcdWrite(2, 16, JUSTIFICATION_ABSOLUTE, "R"); 00125 lcdWrite(3, 16, JUSTIFICATION_ABSOLUTE, "%d", minRESP); 00126 break; 00127 case 1: 00128 lcdWrite(2, 16, JUSTIFICATION_ABSOLUTE, "P"); 00129 lcdWrite(3, 16, JUSTIFICATION_ABSOLUTE, "%d", minPHOTO); 00130 break; 00131 case 2: 00132 lcdWrite(2, 16, JUSTIFICATION_ABSOLUTE, "R+P"); 00133 lcdWrite(3, 16, JUSTIFICATION_ABSOLUTE, "%d %d", minRESP, minPHOTO); 00134 break; 00135 case 3: 00136 lcdWrite(2, 16, JUSTIFICATION_ABSOLUTE, "P+R"); 00137 lcdWrite(3, 16, JUSTIFICATION_ABSOLUTE, "%d %d", minPHOTO, minRESP); 00138 break; 00139 case 4: 00140 lcdWrite(2, 13, JUSTIFICATION_ABSOLUTE, "Program"); 00141 lcdWrite(3, 13, JUSTIFICATION_ABSOLUTE, "Program"); 00142 lcdWrite(4, 13, JUSTIFICATION_ABSOLUTE, "Program"); 00143 lcdWrite(5, 13, JUSTIFICATION_ABSOLUTE, "Program"); 00144 break; 00145 default: 00146 break; 00147 } 00148 00149 // Write current values for flow and time 00150 if (MeasurementTypeVal != 4) { 00151 lcdWrite(4, 16, JUSTIFICATION_ABSOLUTE, "%d", flowintime); 00152 lcdWrite(5, 16, JUSTIFICATION_ABSOLUTE, "%d", lightintime); 00153 } 00154 } 00155 00156 static void utilities(void) 00157 { 00158 state = UTILITIES; 00159 00160 lcdClear(); 00161 lcdWrite(0, 0, JUSTIFICATION_CENTER, "Utilities Menu"); 00162 lcdWrite(1, 0, JUSTIFICATION_CENTER, "-----------------------"); 00163 lcdWrite(2, 0, JUSTIFICATION_ABSOLUTE, "1 - Date & Time"); 00164 lcdWrite(3, 0, JUSTIFICATION_ABSOLUTE, "2 - Toggle Light"); 00165 lcdWrite(4, 0, JUSTIFICATION_ABSOLUTE, "3 - Toggle Pump"); 00166 lcdWrite(5, 0, JUSTIFICATION_ABSOLUTE, "4 - System Parameters"); 00167 lcdWrite(6, 0, JUSTIFICATION_ABSOLUTE, "5 - Purge"); 00168 lcdWrite(7, 0, JUSTIFICATION_ABSOLUTE, "6 - Exit"); 00169 } 00170 00171 static void setDateTime(void) 00172 { 00173 struct tm dateTime = {0}; 00174 00175 lcdClear(); 00176 lcdWrite(0, 1, JUSTIFICATION_ABSOLUTE, "SET DATE AND TIME"); 00177 lcdWrite(2, 0, JUSTIFICATION_ABSOLUTE, "MONTH [01-12]"); 00178 dateTime.tm_mon = lcdGetParam(1, 12, 2, 15) - 1; 00179 lcdWrite(3, 0, JUSTIFICATION_ABSOLUTE, "DAY [01-31]"); 00180 dateTime.tm_mday = lcdGetParam(1, 31, 3, 15); 00181 lcdWrite(4, 0, JUSTIFICATION_ABSOLUTE, "YEAR [20##]"); 00182 dateTime.tm_year = lcdGetParam(0, 99, 4, 15) + 100; 00183 lcdWrite(5, 0, JUSTIFICATION_ABSOLUTE, "HOUR [00-23]"); 00184 dateTime.tm_hour = lcdGetParam(0, 23, 5, 15); 00185 lcdWrite(6, 0, JUSTIFICATION_ABSOLUTE, "MINUTE [00-59]"); 00186 dateTime.tm_min = lcdGetParam(0, 59, 6, 15); 00187 00188 // Send Date Command to PICODos 00189 INFO("Date Command = DATE %02d-%02d-%02d %02d:%02d:00", 00190 (dateTime.tm_mon + 1), dateTime.tm_mday, (dateTime.tm_year - 100), 00191 dateTime.tm_hour, dateTime.tm_min); 00192 set_time(mktime(&dateTime)); 00193 } 00194 00195 static void dateTime(void) 00196 { 00197 Key key = KEY_NONE; 00198 time_t now; 00199 struct tm* timeNow; 00200 00201 do { 00202 time_t seconds = time(NULL); 00203 00204 /* get time to make filename */ 00205 time(&now); 00206 timeNow = localtime(&now); 00207 00208 if (timeNow->tm_year < 100) { 00209 timeNow->tm_year = 100; 00210 } 00211 00212 lcdClear(); 00213 lcdWrite(0, 0, JUSTIFICATION_CENTER, "CISME 10.0"); 00214 lcdWrite(2, 0, JUSTIFICATION_CENTER, "Verify Date and Time"); 00215 lcdWrite(4, 0, JUSTIFICATION_CENTER, "%02d/%02d/20%02d %02d:%02d:%02d", 00216 (timeNow->tm_mon + 1), timeNow->tm_mday, (timeNow->tm_year - 100), 00217 timeNow->tm_hour, timeNow->tm_min, timeNow->tm_sec); 00218 lcdWrite(6, 0, JUSTIFICATION_CENTER, "(*)Change (#)OK"); 00219 00220 DEBUG1("%s", ctime(&seconds)); 00221 00222 key = keyWait(); 00223 if (key == KEY_ASTERISK) { 00224 setDateTime(); 00225 } 00226 } while (key != KEY_HASH); 00227 00228 utilities(); 00229 } 00230 00231 static void currentNew(int value, const char* rangeStr) 00232 { 00233 lcdWrite(1, 0, JUSTIFICATION_CENTER, "-----------------------"); 00234 lcdWrite(2, 1, JUSTIFICATION_CENTER, "(%s)", rangeStr); 00235 lcdWrite(4, 1, JUSTIFICATION_ABSOLUTE, "Current"); 00236 lcdWrite(4, 9, JUSTIFICATION_ABSOLUTE, "-"); 00237 lcdWrite(4, 11, JUSTIFICATION_ABSOLUTE, "["); 00238 lcdWrite(4, 12, JUSTIFICATION_ABSOLUTE, "%03d", value); 00239 lcdWrite(4, 16, JUSTIFICATION_ABSOLUTE, "]"); 00240 lcdWrite(5, 1, JUSTIFICATION_ABSOLUTE, "New"); 00241 lcdWrite(5, 11, JUSTIFICATION_ABSOLUTE, "["); 00242 lcdWrite(5, 16, JUSTIFICATION_ABSOLUTE, "]"); 00243 lcdWrite(7, 1, JUSTIFICATION_CENTER, "* backspace # save"); 00244 } 00245 00246 static int getPump(void) 00247 { 00248 // Set pump speed 00249 lcdClear(); 00250 lcdWrite(0, 1, JUSTIFICATION_CENTER, "Measurement Flow"); 00251 currentNew(flowintime, "0, 5-100%"); 00252 00253 // Now allow user to edit value 00254 flowintime = lcdGetParam(0, 100, 5, 12); 00255 if (flowintime < 5) { 00256 flowintime = 0; 00257 } 00258 return (flowintime); 00259 } 00260 00261 static int getLight(void) 00262 { 00263 // Set light level 00264 lcdClear(); 00265 lcdWrite(0, 1, JUSTIFICATION_CENTER, "Measurement Light"); 00266 currentNew(lightintime, "0, 6-100%"); 00267 00268 // Now allow user to edit value 00269 lightintime = lcdGetParam(0, 100, 5, 12); 00270 if (lightintime < 6) { 00271 lightintime = 0; 00272 } 00273 return (lightintime); 00274 } 00275 00276 static void light(void) 00277 { 00278 MeasurementLight = getLight(); 00279 00280 lightSet(MeasurementLight); 00281 INFO("Measurement light %d", MeasurementLight); 00282 00283 utilities(); 00284 } 00285 00286 static void pumpFlowSpeed(void) 00287 { 00288 lcdClear(); 00289 lcdWrite(0, 1, JUSTIFICATION_ABSOLUTE, "Current flow:"); 00290 lcdWrite(1, 1, JUSTIFICATION_ABSOLUTE, "Current speed:"); 00291 lcdWrite(6, 0, JUSTIFICATION_CENTER, "(*)Change (#)OK"); 00292 } 00293 00294 static void pump(void) 00295 { 00296 Key key = KEY_NONE; 00297 pumpFlowSpeed(); 00298 00299 do { 00300 unsigned char flow = pumpCurrentIntensity(); 00301 lcdWrite(0, 15, JUSTIFICATION_ABSOLUTE, "%5u", flow); 00302 00303 unsigned int speed = pumpSpeed(); 00304 lcdWrite(1, 15, JUSTIFICATION_ABSOLUTE, "%5u", speed); 00305 00306 key = keyGet(); 00307 if (key == KEY_ASTERISK) { 00308 MeasurementFlow = getPump(); 00309 pumpSet(MeasurementFlow); 00310 INFO("Measurement flow %d", MeasurementFlow); 00311 pumpFlowSpeed(); 00312 } 00313 wait(0.5); 00314 00315 } while (key != KEY_HASH); 00316 00317 utilities(); 00318 } 00319 00320 static void sysParams(void) 00321 { 00322 state = SYS_PARAMS; 00323 00324 lcdClear(); 00325 lcdWrite(0, 0, JUSTIFICATION_CENTER, "Set System Parameters"); 00326 lcdWrite(1, 0, JUSTIFICATION_CENTER, "-----------------------"); 00327 lcdWrite(2, 0, JUSTIFICATION_ABSOLUTE, "1 - About"); 00328 lcdWrite(3, 0, JUSTIFICATION_ABSOLUTE, "2 - pH Auto Cal"); 00329 lcdWrite(4, 0, JUSTIFICATION_ABSOLUTE, "3 - O2 Cal "); 00330 lcdWrite(5, 0, JUSTIFICATION_ABSOLUTE, "4 - Raw Data Streams "); 00331 lcdWrite(6, 0, JUSTIFICATION_ABSOLUTE, "5 - Salinity"); 00332 lcdWrite(7, 0, JUSTIFICATION_ABSOLUTE, "6 - Exit"); 00333 } 00334 00335 static void purge(void) 00336 { 00337 lcdClear(); 00338 lcdWrite(0, 0, JUSTIFICATION_CENTER, "Purge"); 00339 lcdWrite(2, 0, JUSTIFICATION_CENTER, "Cycles the pump between"); 00340 lcdWrite(3, 0, JUSTIFICATION_CENTER, "0%% and 100%%"); 00341 lcdWrite(4, 0, JUSTIFICATION_CENTER, "4 sec 100%%, 2 sec 0%%"); 00342 lcdWrite(7, 0, JUSTIFICATION_CENTER, "* - Exit, # - Start"); 00343 00344 if (keyWaitInRange(rangeAsteriskHash) == KEY_ASTERISK) { 00345 utilities(); 00346 return; 00347 } 00348 00349 lcdClear(); 00350 lcdWrite(5, 0, JUSTIFICATION_ABSOLUTE, "Press * to exit Purge"); 00351 00352 do { 00353 lcdWrite(3, 0, JUSTIFICATION_ABSOLUTE, "Purge Cycle: Pump On"); 00354 pumpSet(PUMP_MAX_INTENSITY); 00355 wait(4); 00356 lcdWrite(3, 0, JUSTIFICATION_ABSOLUTE, "Purge Cycle: Pump Off"); 00357 pumpSet(PUMP_OFF_INTENSITY); 00358 wait(2); 00359 } while (keyGet() != KEY_ASTERISK); 00360 00361 utilities(); 00362 } 00363 00364 static int getExpDuration(int MeasurementTypeVal) 00365 { 00366 lcdClear(); 00367 lcdWrite(0, 0, JUSTIFICATION_CENTER, "SET DURATION"); 00368 lcdWrite(1, 0, JUSTIFICATION_CENTER, "-----------------------"); 00369 00370 if (MeasurementTypeVal == 0) { 00371 lcdWrite(2, 0, JUSTIFICATION_CENTER, "TYPE - R (Total Time)"); 00372 } else if (MeasurementTypeVal == 1) { 00373 lcdWrite(2, 0, JUSTIFICATION_CENTER, "TYPE - P (Total Time)"); 00374 } else if (MeasurementTypeVal == 2) { 00375 lcdWrite(2, 0, JUSTIFICATION_CENTER, "TYPE - R + P"); 00376 } else if (MeasurementTypeVal == 3) { 00377 lcdWrite(2, 0, JUSTIFICATION_CENTER, "TYPE - P + R"); 00378 } 00379 00380 lcdWrite(7, 1, JUSTIFICATION_CENTER, "* backspace # Enter"); 00381 00382 if ((MeasurementTypeVal == 0) || (MeasurementTypeVal == 1)) { 00383 lcdWrite(4, 0, JUSTIFICATION_ABSOLUTE, "MINUTE [00-59]"); 00384 unsigned char minutes = lcdGetParam(0, 59, 4, 19); 00385 printf("Minute = %u\n", minutes); 00386 00387 if (MeasurementTypeVal == 0) { 00388 minRESP = minutes; 00389 } else { 00390 minPHOTO = minutes; 00391 } 00392 } else if (MeasurementTypeVal == 2) { 00393 lcdWrite(4, 0, JUSTIFICATION_ABSOLUTE, "RESP MINUTE [00-59]"); 00394 minRESP = lcdGetParam(0, 59, 4, 19); 00395 printf("Minute = %u\n", minRESP); 00396 00397 lcdWrite(5, 0, JUSTIFICATION_ABSOLUTE, "PHOTO MINUTE [00-59]"); 00398 minPHOTO = lcdGetParam(0, 59, 5, 19); 00399 printf("Minute = %u\n", minPHOTO); 00400 } else if (MeasurementTypeVal == 3) { 00401 lcdWrite(4, 0, JUSTIFICATION_ABSOLUTE, "PHOTO MINUTE [00-59]"); 00402 minPHOTO = lcdGetParam(0, 59, 4, 19); 00403 printf("Minute = %u\n", minPHOTO); 00404 00405 lcdWrite(5, 0, JUSTIFICATION_ABSOLUTE, "RESP MINUTE [00-59]"); 00406 minRESP = lcdGetParam(0, 59, 4, 19); 00407 printf("Minute = %u\n", minRESP); 00408 } 00409 00410 return (minRESP); 00411 } 00412 00413 static int getExpType(void) 00414 { 00415 lcdClear(); 00416 lcdWrite(0, 0, JUSTIFICATION_CENTER, "Measurement Type"); 00417 lcdWrite(1, 0, JUSTIFICATION_CENTER, "-----------------------"); 00418 lcdWrite(2, 0, JUSTIFICATION_ABSOLUTE, "1 - R"); 00419 lcdWrite(3, 0, JUSTIFICATION_ABSOLUTE, "2 - P"); 00420 lcdWrite(4, 0, JUSTIFICATION_ABSOLUTE, "3 - R + P"); 00421 lcdWrite(5, 0, JUSTIFICATION_ABSOLUTE, "4 - P + R"); 00422 lcdWrite(6, 0, JUSTIFICATION_ABSOLUTE, "5 - Saved Program"); 00423 00424 Key key = keyWait(); 00425 INFO("Choice = %u", key); 00426 00427 return (key - 1); 00428 } 00429 00430 static void expType(void) 00431 { 00432 MeasurementTypeVal = getExpType(); 00433 expParams(); 00434 } 00435 00436 static void expTime(void) 00437 { 00438 getExpDuration(MeasurementTypeVal); 00439 expParams(); 00440 } 00441 00442 static void expPump(void) 00443 { 00444 MeasurementFlow = getPump(); 00445 expParams(); 00446 } 00447 00448 static void expLight(void) 00449 { 00450 MeasurementLight = getLight(); 00451 expParams(); 00452 } 00453 00454 static void expRun(void) 00455 { 00456 PrepareExperiment preparation; 00457 RunExperiment experimentStep; 00458 00459 lcdClear(); 00460 00461 INFO("Experiment started."); 00462 00463 if (MeasurementTypeVal == PGM) { 00464 00465 preparation = experimentPrepareUserProgram; 00466 experimentStep = experimentRunUserProgram; 00467 } else { 00468 preparation = experimentPrepareDefinedProgram; 00469 experimentStep = experimentRunDefinedProgram; 00470 } 00471 00472 preparation(); 00473 00474 while (true) { 00475 if (experimentStep()) { 00476 INFO("Experiment completed."); 00477 fprintf(currentFile, "Experiment Completed\n"); 00478 lcdClear(); 00479 break; 00480 } 00481 00482 Key choice = keyGet(); 00483 00484 if (choice == KEY_THREE && SwitchMode == 0 && 00485 MeasurementTypeVal != R && MeasurementTypeVal != P) { // Option 3 - change mode in R+P experiment 00486 lcdClear(); 00487 lcdWrite(0, 0, JUSTIFICATION_CENTER, "ARE YOU SURE?"); 00488 lcdWrite(2, 0, JUSTIFICATION_ABSOLUTE, "1 - Yes"); 00489 lcdWrite(3, 0, JUSTIFICATION_ABSOLUTE, "2 - No"); 00490 00491 if (keyWaitInRange(rangeOneTwo) == KEY_ONE) { 00492 00493 lcdClear(); // if yes want to change mode 00494 SwitchMode = 1; 00495 INFO("Experiment switched by user."); 00496 fprintf(currentFile,"User Advanced Step\n"); 00497 continue; 00498 } 00499 00500 lcdClear(); 00501 lcdWrite(6, 0, JUSTIFICATION_ABSOLUTE, "3 - Change Mode"); 00502 lcdWrite(7, 0, JUSTIFICATION_ABSOLUTE, "4 - Stop"); 00503 00504 } else if (choice == KEY_FOUR) { // Option 4 - Stop the experiment 00505 lcdClear(); 00506 lcdWrite(0, 0, JUSTIFICATION_CENTER, "ARE YOU SURE?"); 00507 lcdWrite(2, 0, JUSTIFICATION_ABSOLUTE, "1 - Yes"); 00508 lcdWrite(3, 0, JUSTIFICATION_ABSOLUTE, "2 - No"); 00509 00510 if (keyWaitInRange(rangeOneTwo) == KEY_ONE) { 00511 00512 INFO("User Ended Experiment"); 00513 fprintf(currentFile,"User Ended Experiment\n"); 00514 lcdClear(); 00515 break; 00516 00517 } 00518 00519 lcdClear(); 00520 lcdWrite(7, 0, JUSTIFICATION_ABSOLUTE, "4 - Stop"); 00521 00522 if ((MeasurementTypeVal == PR || MeasurementTypeVal == RP) && 00523 SwitchMode == 0) { 00524 lcdWrite(6, 0, JUSTIFICATION_ABSOLUTE, "3 - Change Mode"); 00525 } 00526 } 00527 } 00528 00529 finishExperiment(); 00530 00531 lcdWrite(2, 0, JUSTIFICATION_CENTER, FileName); 00532 lcdWrite(4, 0, JUSTIFICATION_CENTER, "Press # to continue"); 00533 Key key = KEY_NONE; 00534 while (key != KEY_HASH) { 00535 buzzerBeep(2); 00536 key = keyWait(); 00537 } 00538 lcdClear(); 00539 00540 home(); 00541 } 00542 00543 static void about(void) 00544 { 00545 lcdClear(); 00546 lcdWrite(0, 0, JUSTIFICATION_CENTER, "CISME 10.0 February 2016"); 00547 lcdWrite(1, 0, JUSTIFICATION_CENTER, "Coral InSituMEtabolism"); 00548 lcdWrite(2, 0, JUSTIFICATION_CENTER, "Built by Mera for UNCW"); 00549 lcdWrite(3, 0, JUSTIFICATION_CENTER, "Brian Murphy"); 00550 lcdWrite(4, 0, JUSTIFICATION_CENTER, "Robert Whitehead"); 00551 lcdWrite(5, 0, JUSTIFICATION_CENTER, "Charles Mazel"); 00552 lcdWrite(6, 0, JUSTIFICATION_CENTER, "Alina Szmant"); 00553 00554 wait(6); 00555 sysParams(); 00556 } 00557 00558 static void phCal(void) 00559 { 00560 Key key = KEY_NONE; 00561 float pH1Float, PHValue1; 00562 float PHTEMPK, PHTEMPa; 00563 float mSINGLEPT, eoSINGLEPT; 00564 00565 lcdClear(); 00566 lcdWrite(1, 0, JUSTIFICATION_CENTER, "Calibrate ISFET"); 00567 lcdWrite(2, 0, JUSTIFICATION_CENTER, "Temperature"); 00568 lcdWrite(3, 0, JUSTIFICATION_ABSOLUTE, "Bvalue - %3.6f", B); 00569 lcdWrite(7, 0, JUSTIFICATION_CENTER, "Change? 1-Yes, 2-No"); 00570 wait(.1); 00571 00572 if (keyWaitInRange(rangeOneTwo) == KEY_ONE) { // if yes want to change mode 00573 //ph temp cal 00574 lcdClear(); 00575 lcdWrite(1, 0, JUSTIFICATION_CENTER, "Calibrate ISFET"); 00576 lcdWrite(2, 0, JUSTIFICATION_CENTER, "Temperature"); 00577 lcdWrite(3, 0, JUSTIFICATION_CENTER, "With Pump"); 00578 lcdWrite(7, 0, JUSTIFICATION_CENTER, "7-On ,9-Off"); 00579 00580 key = keyWaitInRange(rangeSevenOrNine); 00581 if (key == KEY_SEVEN) { // if yes want to change mode 00582 pumpSet(50); 00583 } else { // KEY_NINE 00584 pumpSet(PUMP_OFF_INTENSITY); 00585 } 00586 00587 lcdClear(); 00588 lcdWrite(0, 0, JUSTIFICATION_CENTER, "Temp Calibration"); 00589 lcdWrite(1, 0, JUSTIFICATION_CENTER, "Single Point"); 00590 lcdWrite(2, 0, JUSTIFICATION_ABSOLUTE, "ISFET Temp"); 00591 lcdWrite(3, 0, JUSTIFICATION_ABSOLUTE, "Temp(C) - XX.XXX"); 00592 lcdWrite(6, 0, JUSTIFICATION_ABSOLUTE, "Place in Temp"); 00593 lcdWrite(7, 0, JUSTIFICATION_ABSOLUTE, "Press # to start"); 00594 float TempC = (float)lcdGetParam(0, 99999, 4, 15) / 1000; 00595 00596 float bValue = calibrationTemperature(TempC); 00597 calibrationTemperatureSave(bValue); 00598 00599 wait(1.0); 00600 } 00601 00602 lcdClear(); 00603 lcdWrite(1, 0, JUSTIFICATION_ABSOLUTE, "pH Buffer - %3.3f", PHBUFFERF); 00604 lcdWrite(2, 0, JUSTIFICATION_ABSOLUTE, "pH Temp (C) - %3.5f", PHTEMPF); 00605 lcdWrite(3, 0, JUSTIFICATION_ABSOLUTE, "pH Temp (K) - %f", PHTEMPKF); 00606 lcdWrite(4, 0, JUSTIFICATION_ABSOLUTE, "pH Volts - %f", PHVOLTSF); 00607 lcdWrite(5, 0, JUSTIFICATION_ABSOLUTE, "Slope - %2.6f", MSINGLEPT); 00608 lcdWrite(6, 0, JUSTIFICATION_ABSOLUTE, "Eo - %2.6f", EOSINGLEPT); 00609 lcdWrite(7, 0, JUSTIFICATION_CENTER, "Change? 1-Yes,2-No"); 00610 00611 if (keyWaitInRange(rangeOneTwo) == KEY_TWO) { // if yes want to change mode 00612 sysParams(); 00613 return; 00614 } 00615 00616 lcdClear(); 00617 lcdWrite(1, 0, JUSTIFICATION_CENTER, "Calibrate ISFET"); 00618 lcdWrite(2, 0, JUSTIFICATION_CENTER, "pH"); 00619 lcdWrite(3, 0, JUSTIFICATION_CENTER, "With Pump"); 00620 lcdWrite(7, 0, JUSTIFICATION_CENTER, "7-On ,9-Off"); 00621 wait(0.2); 00622 00623 if (keyWaitInRange(rangeSevenOrNine) == KEY_SEVEN) { // if yes want to change mode 00624 pumpSet(50); 00625 } else { // Nine 00626 pumpSet(PUMP_OFF_INTENSITY); 00627 } 00628 00629 lcdClear(); 00630 lcdWrite(0, 0, JUSTIFICATION_CENTER, "pH Auto Calibration"); 00631 lcdWrite(1, 0, JUSTIFICATION_CENTER, "Single Point"); 00632 lcdWrite(2, 0, JUSTIFICATION_ABSOLUTE, "pH Buffer Value"); 00633 lcdWrite(6, 0, JUSTIFICATION_ABSOLUTE, "Place Buffer"); 00634 lcdWrite(7, 0, JUSTIFICATION_ABSOLUTE, "Press # to start"); 00635 lcdWrite(3, 0, JUSTIFICATION_ABSOLUTE, "pH - XX.XXX"); 00636 pH1Float = (float)lcdGetParam(0, 99999, 4, 15) / 1000; 00637 00638 calibrationPh(pH1Float, &PHTEMPa, &mSINGLEPT, &eoSINGLEPT, &PHValue1); 00639 PHTEMPK = PHTEMPa + 273.15; 00640 wait(0.5); 00641 00642 lcdClear(); 00643 lcdWrite(1, 0, JUSTIFICATION_CENTER, "pH Buffer - %2.3f", pH1Float); 00644 lcdWrite(2, 0, JUSTIFICATION_CENTER, "pH Temp (C) - %2.3f", PHTEMP); 00645 lcdWrite(3, 0, JUSTIFICATION_CENTER, "pH Temp (K) - %2.3f", PHTEMPK); 00646 lcdWrite(4, 0, JUSTIFICATION_CENTER, "pH Volts - %2.6f", PHValue1); 00647 lcdWrite(5, 0, JUSTIFICATION_CENTER, "Slope - %2.6f", mSINGLEPT); 00648 lcdWrite(6, 0, JUSTIFICATION_CENTER, "Eo - %2.6f", eoSINGLEPT); 00649 00650 INFO("PHBUFFERF %2.6f pH1Float %2.6f", PHBUFFERF, pH1Float); 00651 PHBUFFERF = (float)pH1Float; 00652 PHTEMPF = (float)PHTEMP; 00653 00654 INFO("PHTEMPF %2.6f",PHTEMPF); 00655 00656 PHTEMPKF = (float)PHTEMPK; 00657 PHVOLTSF = (float)PHValue1; 00658 MSINGLEPT = (float)mSINGLEPT; 00659 EOSINGLEPT = (float)eoSINGLEPT; 00660 00661 calibrationPhSave(); 00662 } 00663 00664 static void o2Cal(void) 00665 { 00666 lcdClear(); 00667 lcdWrite(0, 0, JUSTIFICATION_CENTER, "Pressure Cal - %1.2f", PresCal); 00668 lcdWrite(1, 0, JUSTIFICATION_CENTER, "0%% Phase - %1.2f", PhaseCal1); 00669 lcdWrite(2, 0, JUSTIFICATION_CENTER, "0%% Temp - %1.2f", TempCal1); 00670 lcdWrite(3, 0, JUSTIFICATION_CENTER, "100%% Phase - %1.2f", PhaseCal2); 00671 lcdWrite(4, 0, JUSTIFICATION_CENTER, "100%% Temp - %1.2f", TempCal2); 00672 00673 lcdWrite(5, 0, JUSTIFICATION_CENTER, "Change values?"); 00674 lcdWrite(6, 0, JUSTIFICATION_ABSOLUTE, "1 - Yes"); 00675 lcdWrite(7, 0, JUSTIFICATION_ABSOLUTE, "2 - No"); 00676 00677 if (keyWaitInRange(rangeOneTwo) == KEY_TWO) { // if yes want to change mode 00678 sysParams(); 00679 return; 00680 } 00681 00682 lcdClear(); 00683 lcdWrite(0, 0, JUSTIFICATION_CENTER, "Oxygen Calibration"); 00684 00685 // Pressure Calibration 00686 lcdWrite(2, 0, JUSTIFICATION_CENTER, "Pres Cal [500-2000]"); 00687 PresCal = lcdGetParam(500, 2000, 4, 17); 00688 INFO("Pres Cal: %f", PresCal); 00689 00690 // 0% Phase Calibration 00691 lcdWrite(2, 0, JUSTIFICATION_CENTER, "0%% P Ang [0-90.00]"); 00692 PhaseCal1 = (float)lcdGetParam(0, 9000, 4, 17) / 100; 00693 INFO("PhaseCal1: %f", PhaseCal1); 00694 00695 // 0% Temp Calibration 00696 lcdWrite(2, 0, JUSTIFICATION_CENTER, "0%% Temp [0-50.00] "); 00697 TempCal1 = (float)lcdGetParam(0, 5000, 4, 17) / 100; 00698 00699 INFO("TempCal1: %f", TempCal1); 00700 00701 // 100% Phase Calibration 00702 lcdWrite(2, 0, JUSTIFICATION_CENTER, "100%% P. Ang. [0-90.00]"); 00703 PhaseCal2 = (float)lcdGetParam(0, 9000, 4, 17) / 100; 00704 INFO("PhaseCal2: %f", PhaseCal2); 00705 00706 // 100% Phase Calibration 00707 lcdWrite(2, 0, JUSTIFICATION_CENTER, "100%% Temp [0-50.00]"); 00708 TempCal2 = (float)lcdGetParam(0, 5000, 4, 17) / 100; 00709 INFO("TempCal2: %f", TempCal2); 00710 00711 // LED Current 00712 lcdWrite(2, 0, JUSTIFICATION_CENTER, "LED Current [0-255]"); 00713 LEDCurrent = lcdGetParam(0, 255, 4, 17); 00714 INFO("LEDCurrent: %f", LEDCurrent); 00715 00716 calibrationO2(); 00717 00718 sysParams(); 00719 } 00720 00721 static void rawData(void) 00722 { 00723 float AmplitudeFloat, PhaseFloat; 00724 float presensData[PRESENS_RES_LENGTH]; 00725 00726 float O2Float = 0; 00727 00728 lcdClear(); 00729 00730 do { 00731 presensGetData(presensData); 00732 AmplitudeFloat = presensData[0]; 00733 PhaseFloat = presensData[1]; 00734 O2Float = presensData[2]; 00735 00736 lcdWrite(0, 0, JUSTIFICATION_CENTER, "Raw Data Bat _ %3.2f", batteryGet()); // Battery Voltage 00737 lcdWrite(1, 0, JUSTIFICATION_CENTER, "%%a.s O2_ %3.0f pH_ %3.2f", O2Float, pHCorrected); // O2 00738 lcdWrite(2, 0, JUSTIFICATION_CENTER, "o2 Amp _ %d", (int)AmplitudeFloat); // Amp 00739 lcdWrite(3, 0, JUSTIFICATION_CENTER, "o2 Phase _ %3.2f", PhaseFloat); 00740 lcdWrite(4, 0, JUSTIFICATION_CENTER, "pH adc V _ %3.3f", pH); 00741 lcdWrite(5, 0, JUSTIFICATION_CENTER, "T adc V _ %3.3f", pHT); 00742 lcdWrite(6, 0, JUSTIFICATION_CENTER, "T C _ %1.1f", PHTEMP); 00743 lcdWrite(7, 0, JUSTIFICATION_ABSOLUTE, "# - Back"); 00744 00745 NVIC_EnableIRQ(UART1_IRQn); 00746 } while (keyGet() != KEY_HASH); 00747 00748 sysParams(); 00749 } 00750 00751 static void salinity(void) 00752 { 00753 lcdClear(); 00754 lcdWrite(0, 0, JUSTIFICATION_CENTER, " Enter Salinity:"); 00755 lcdWrite(1, 0, JUSTIFICATION_CENTER, "-----------------------"); 00756 lcdWrite(2, 1, JUSTIFICATION_CENTER, "(31 - 39)"); 00757 lcdWrite(4, 1, JUSTIFICATION_ABSOLUTE, "Current"); 00758 lcdWrite(4, 9, JUSTIFICATION_ABSOLUTE, "-"); 00759 lcdWrite(4, 11, JUSTIFICATION_ABSOLUTE, "["); 00760 lcdWrite(4, 12, JUSTIFICATION_ABSOLUTE, "%02d", Salinity); 00761 lcdWrite(4, 15, JUSTIFICATION_ABSOLUTE, "]"); 00762 lcdWrite(5, 1, JUSTIFICATION_ABSOLUTE, "New"); 00763 lcdWrite(5, 11, JUSTIFICATION_ABSOLUTE, "["); 00764 lcdWrite(5, 15, JUSTIFICATION_ABSOLUTE, "]"); 00765 lcdWrite(7, 1, JUSTIFICATION_CENTER, "* backspace # save"); 00766 00767 Salinity = lcdGetParam(31, 39, 5, 12); 00768 00769 sysParams(); 00770 } 00771 00772 static void toggleLight(void) 00773 { 00774 if (lightOn() == false) { 00775 lightSet(25); 00776 } else { 00777 lightSet(LIGHT_OFF_INTENSITY); 00778 } 00779 00780 home(); 00781 } 00782 00783 static void togglePump(void) 00784 { 00785 if (pumpOn() == false) { 00786 pumpSet(60); 00787 } else { 00788 pumpSet(PUMP_OFF_INTENSITY); 00789 } 00790 00791 home(); 00792 } 00793 00794 void lcdEventSplash(void) 00795 { 00796 lcdClear(); 00797 lcdWrite(1, 0, JUSTIFICATION_CENTER, "--------------------"); 00798 lcdWrite(2, 0, JUSTIFICATION_CENTER, "CISME 10.0"); 00799 lcdWrite(3, 0, JUSTIFICATION_CENTER, "February 2016"); 00800 lcdWrite(4, 0, JUSTIFICATION_CENTER, "--------------------"); 00801 lcdWrite(6, 0, JUSTIFICATION_CENTER, "Mera Software Services"); 00802 lcdWrite(7, 0, JUSTIFICATION_CENTER, "978-689-0003"); 00803 } 00804 00805 void lcdEventsStart(void) 00806 { 00807 home(); 00808 00809 while (true) { 00810 Key key = keyWait(); 00811 if (events[state][key] != NULL) { 00812 events[state][key](); 00813 } 00814 } 00815 } 00816 00817 #endif // USE_LCD
Generated on Fri Sep 23 2022 19:29:17 by
1.7.2