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.
main.cpp
00001 /******************************************************************************* 00002 Commands: 00003 00004 AM=x where x =1|0 Sets Mode. Mode 0 = CC, Mode 1 = Flash 00005 AL=XY X=load channel (0-3) Artimes L1, Artemis L2, Bia L1, Bia L2 - Y = 0|1 On or Off 00006 AFY=X.XX Where Y = channel and X.XX = flash rate between 0 and 1 00007 AEY=X where Y = channel and X = 0|1 On or Off 00008 AT = TemP reading 00009 AP = Pressure Reading 00010 AH = Humidty reading 00011 00012 *******************************************************************************/ 00013 #include "mbed.h" 00014 #include "BME280.h" 00015 #include "DS1820.h" 00016 00017 #define GPIO1 PB_12 00018 00019 #define GPIO2 PB_9 00020 00021 #define GPIO3 PB_8 00022 00023 #define GPIO4 PB_5 00024 00025 #define GPIO5 PB_4 00026 00027 #define GPIO6 PB_3 00028 00029 #define GPIO7 PD_2 //PD_2 00030 00031 #define GPIO8 PC_8 00032 00033 #define GPIO9 PC_7 00034 00035 #define GPIO10 PA_15 00036 00037 #define GPIO11 PC_9 00038 00039 #define GPIO12 PC_6 00040 00041 #define LOAD0 PA_1 00042 #define LOAD1 PA_6 00043 00044 DigitalOut flash0(GPIO1); 00045 DigitalOut flash1(GPIO5); 00046 DigitalOut flash2(GPIO2); 00047 DigitalOut flash3(GPIO6); 00048 DigitalOut flash4(GPIO3); 00049 DigitalOut flash5(GPIO7); 00050 DigitalOut flash6(GPIO4); 00051 DigitalOut flash7(GPIO8); 00052 00053 DigitalOut GPSEnable(GPIO12); 00054 00055 DigitalOut load0(LOAD0); 00056 DigitalOut load1(LOAD0); 00057 DigitalOut SVLoad1(GPIO11); 00058 DigitalOut SVLoad2(GPIO11); 00059 00060 InterruptIn syncLine(PC_13); 00061 00062 float flashStat[32] = {0}; //First 8 are Flash EN, Next 8 are next flash, final 8 are Flash rate. 00063 PwmOut dimming(GPIO10); 00064 DigitalOut flashMode(GPIO9); 00065 00066 BME280 BME280(PB_7, PB_6); 00067 00068 Timer t; 00069 00070 Serial lantronix(PA_2, PA_3); 00071 00072 DS1820 extTemp1(PC_3); 00073 DS1820 extTemp2(PA_7); 00074 DS1820 extTemp3(PA_0); 00075 DS1820 extTemp4(PB_0); 00076 00077 DigitalIn extTemp1Pin(PC_3); 00078 DigitalIn extTemp2Pin(PA_7); 00079 DigitalIn extTemp3Pin(PA_0); 00080 DigitalIn extTemp4Pin(PB_0); 00081 00082 int commandFlag = 0; 00083 int messageProcessFlag = 0; 00084 00085 int debugOut = 0; 00086 float flashrate = 0; 00087 00088 char msgBuffer[20] = {0}; 00089 int msgBufferCount = 0; 00090 00091 int singleFlash = 0; 00092 00093 int temploop = 0; 00094 00095 void syncActive(){ 00096 //singleFlash = 1; 00097 int j = 1; 00098 for(int i = 0; i<8; i++) 00099 { 00100 if(flashStat[i]) 00101 { 00102 switch(i){ 00103 case 0: 00104 flash0 = j; 00105 break; 00106 case 1: 00107 flash1 = j; 00108 break; 00109 case 2: 00110 flash2 = j; 00111 break; 00112 case 3: 00113 flash3 = j; 00114 break; 00115 case 4: 00116 flash4 = j; 00117 break; 00118 case 5: 00119 flash5 = j; 00120 break; 00121 case 6: 00122 flash6 = j; 00123 break; 00124 case 7: 00125 flash7 = j; 00126 break; 00127 } 00128 } 00129 if(i == 7) 00130 { 00131 wait(0.01); 00132 flash0 = 0; 00133 flash1 = 0; 00134 flash2 = 0; 00135 flash3 = 0; 00136 flash4 = 0; 00137 flash5 = 0; 00138 flash6 = 0; 00139 flash7 = 0; 00140 } 00141 } 00142 00143 } 00144 void sendOK(){ 00145 lantronix.printf("\n\rOK\n\r"); 00146 } 00147 00148 void sendERROR(){ 00149 lantronix.printf("\n\rERROR\n\r"); 00150 } 00151 00152 void rxCallback() { 00153 if(commandFlag) 00154 { 00155 if(debugOut) lantronix.printf("Command Started \r\n"); 00156 if(lantronix.readable()) 00157 { 00158 00159 msgBuffer[msgBufferCount] = lantronix.getc(); 00160 lantronix.putc(msgBuffer[msgBufferCount]); 00161 if(msgBuffer[msgBufferCount] == '\n') 00162 { 00163 commandFlag = 0; 00164 msgBuffer[msgBufferCount] = 0; 00165 messageProcessFlag = 1; 00166 msgBufferCount = 0; 00167 } 00168 if(msgBuffer[msgBufferCount] == 0x7F) 00169 { 00170 if(msgBufferCount > 0) 00171 { 00172 msgBufferCount--; 00173 if(msgBufferCount > 0) 00174 { 00175 msgBufferCount--; 00176 } 00177 } 00178 } 00179 msgBufferCount++; 00180 if(msgBufferCount > 9) 00181 { 00182 sendERROR(); 00183 msgBufferCount = 0; 00184 messageProcessFlag = 0; 00185 commandFlag = 0; 00186 } 00187 } 00188 } 00189 00190 else 00191 { 00192 char c; 00193 temploop = 0; 00194 c = lantronix.getc(); 00195 if(c == 'A') 00196 { 00197 commandFlag = 1; 00198 for(int i = 0; i<10; i++) 00199 { 00200 msgBuffer[i] = 0; 00201 } 00202 lantronix.putc(c); 00203 msgBuffer[0] = c; 00204 msgBufferCount = 1; 00205 } 00206 00207 00208 } 00209 } 00210 00211 00212 00213 00214 void setMode(char _flashmode){ 00215 if(_flashmode == '1') flashMode = 1; 00216 if(_flashmode == '0') flashMode = 0; 00217 } 00218 00219 void setLoad(char _channel, char _loadmode){ 00220 _channel = _channel - 48; 00221 _loadmode = _loadmode - 48; 00222 00223 // lantronix.printf("Loadmode is %f \r\n", _loadmode) 00224 // lantronix.printf("Channel is %f \r\n", _channel) 00225 00226 if(_channel == 0) load0 = _loadmode; 00227 if(_channel == 1) load1 = _loadmode; 00228 if(_channel == 2) SVLoad1 = _loadmode; 00229 if(_channel == 3) SVLoad2 = _loadmode; 00230 } 00231 00232 void setFlash(char _channel, char _dig1, char _dig2, char _dig3){ 00233 int number; 00234 //lantronix.printf("AFR Char = %c.%c%c \r\n", _dig1, _dig2, _dig3); 00235 flashrate = 0; 00236 number = _dig1 - 48; 00237 _channel = _channel - 48; 00238 if(number == 1) 00239 { 00240 flashrate = 1; 00241 flashStat[_channel+16] = flashrate; 00242 } 00243 else 00244 { 00245 number = _dig2 - 48; 00246 flashrate = 0.1*number; 00247 flashStat[_channel+16] = flashrate; 00248 if(_dig3 != 13) 00249 { 00250 number = _dig3 - 48; 00251 flashrate = flashrate + 0.01*number; 00252 flashStat[_channel+16] = flashrate; 00253 } 00254 } 00255 00256 if(flashrate > 1) 00257 { 00258 flashrate = 1.0; 00259 flashStat[_channel+16] = flashrate; 00260 } 00261 if(flashrate < 0) 00262 { 00263 flashrate = 0.0; 00264 flashStat[_channel+16] = flashrate; 00265 } 00266 //lantronix.printf("AFR%i=%f", _channel, flashStat[_channel+8]); 00267 } 00268 00269 00270 void messageProcess() { 00271 switch(msgBuffer[1]) 00272 { 00273 case 'M' : 00274 if(msgBuffer[2] == '=') 00275 { 00276 setMode(msgBuffer[3]); 00277 sendOK(); 00278 00279 } 00280 else if(msgBuffer[2] == '?') 00281 { 00282 lantronix.printf("\n\rAM=%i\n\r", flashMode.read()); 00283 } 00284 else sendERROR(); 00285 messageProcessFlag = 0; 00286 msgBuffer[0] = 0; 00287 msgBufferCount = 0; 00288 break; 00289 case 'L' : 00290 if(msgBuffer[2] == '=') 00291 { 00292 setLoad(msgBuffer[3],msgBuffer[4]); 00293 sendOK(); 00294 } 00295 else if(msgBuffer[2] == '?') 00296 { 00297 lantronix.printf("\n\rAL=%i\n\r", load0.read()); 00298 } 00299 else sendERROR(); 00300 messageProcessFlag = 0; 00301 msgBuffer[0] = 0; 00302 msgBufferCount = 0; 00303 00304 break; 00305 00306 case 'F' : 00307 if(msgBuffer[3] == '=') 00308 { 00309 if(msgBuffer[5] == '.') 00310 { 00311 //lantronix.printf("\n\rD3=%i\n\r", msgBuffer[6]); 00312 setFlash(msgBuffer[2],msgBuffer[4],msgBuffer[6],msgBuffer[7]); 00313 sendOK(); 00314 } 00315 else 00316 { 00317 sendERROR(); 00318 } 00319 } 00320 else if(msgBuffer[3] == '?') 00321 { 00322 lantronix.printf("\n\rAF=%i\n\r", flash0.read()); 00323 } 00324 else sendERROR(); 00325 /** 00326 if(msgBuffer[2] == 'R') 00327 { 00328 if(msgBuffer[3] == '=') 00329 { 00330 setFlash(msgBuffer[3]); 00331 sendOK(); 00332 } 00333 if(msgBuffer[3] == '?') 00334 { 00335 lantronix.printf("\n\rAFR=%i\n\r", flashRate); 00336 } 00337 } 00338 **/ 00339 messageProcessFlag = 0; 00340 msgBuffer[0] = 0; 00341 msgBufferCount = 0; 00342 00343 break; 00344 case 'T' : 00345 if(msgBuffer[2] == 'S') 00346 { 00347 temploop = 1; 00348 } 00349 00350 time_t seconds = time(NULL); 00351 lantronix.printf("%3.1i,", seconds); 00352 00353 if(extTemp1.isPresent()) 00354 { 00355 lantronix.printf("Temp1: %3.1f,\n\r", extTemp1.read()); 00356 extTemp1.startConversion(); 00357 } 00358 if(extTemp2.isPresent()) 00359 { 00360 lantronix.printf("Temp2: %3.1f,\n\r", extTemp2.read()); 00361 extTemp2.startConversion(); 00362 } 00363 if(extTemp3.isPresent()) 00364 { 00365 lantronix.printf("Temp3: %3.1f,\n\r", extTemp3.read()); 00366 extTemp2.startConversion(); 00367 } 00368 if(extTemp4.isPresent()) 00369 { 00370 lantronix.printf("Temp4: %3.1f,\n\r", extTemp4.read()); 00371 extTemp2.startConversion(); 00372 } 00373 lantronix.printf("OB-Temp: %2.2f \n\r", BME280.getTemperature()); 00374 break; 00375 case 'P' : 00376 lantronix.printf("Pres: %4.2f kPa\n\r", BME280.getPressure()); 00377 break; 00378 case 'H' : 00379 lantronix.printf("Humi: %2.2f %% \n\r", BME280.getHumidity()); 00380 break; 00381 case 'G' : 00382 /** 00383 gps.sample(); 00384 sendOK(); 00385 lantronix.printf("Lat = %.4f ", gps.latitude); 00386 lantronix.printf("Lon = %.4f \n\r", gps.longitude); 00387 **/ 00388 break; 00389 case 'B' : 00390 if(msgBuffer[2] == '=') 00391 { 00392 int dimValue = msgBuffer[3] - 48; 00393 if(dimValue > 9) dimValue = 9; 00394 if(dimValue < 0) dimValue = 0; 00395 00396 dimValue = 10 - dimValue; 00397 dimValue = dimValue / 10; 00398 if(dimValue = 0) dimValue = 0.01; 00399 dimming.write(dimValue); 00400 sendOK(); 00401 00402 } 00403 else if(msgBuffer[3] == '?') 00404 { 00405 lantronix.printf("\n\rAD=%i\n\r", dimming.read()); 00406 } 00407 else sendERROR(); 00408 break; 00409 case 'E' : 00410 if(msgBuffer[3] == '=') 00411 { 00412 int channel = msgBuffer[2] - 48; 00413 int enable = msgBuffer[4] - 48; 00414 if(enable > 1) enable = 0; 00415 if(enable < 0) enable = 0; 00416 if(channel < 8) 00417 { 00418 flashStat[channel] = enable; 00419 sendOK(); 00420 } 00421 } 00422 else if(msgBuffer[3] == '?') 00423 { 00424 int channel = msgBuffer[2] - 48; 00425 lantronix.printf("\n\rAE%i=%i\n\r", channel, flashStat[channel]); 00426 } 00427 else sendERROR(); 00428 /** 00429 if(msgBuffer[2] == 'R') 00430 { 00431 if(msgBuffer[3] == '=') 00432 { 00433 setFlash(msgBuffer[3]); 00434 sendOK(); 00435 } 00436 if(msgBuffer[3] == '?') 00437 { 00438 lantronix.printf("\n\rAFR=%i\n\r", flashRate); 00439 } 00440 } 00441 **/ 00442 00443 break; 00444 default : 00445 sendERROR(); 00446 messageProcessFlag = 0; 00447 msgBuffer[0] = 0; 00448 msgBufferCount = 0; 00449 break; 00450 } 00451 messageProcessFlag = 0; 00452 msgBuffer[0] = 0; 00453 msgBufferCount = 0; 00454 } 00455 00456 00457 00458 // main() runs in its own thread in the OS 00459 int main() { 00460 float lastTime = 0; 00461 float interval = 0; 00462 00463 extTemp1Pin.mode(PullUp); 00464 extTemp2Pin.mode(PullUp); 00465 extTemp3Pin.mode(PullUp); 00466 extTemp4Pin.mode(PullUp); 00467 00468 if(extTemp1.begin()) 00469 { 00470 extTemp1.startConversion(); 00471 } 00472 if(extTemp2.begin()) 00473 { 00474 extTemp2.startConversion(); 00475 } 00476 if(extTemp3.begin()) 00477 { 00478 extTemp3.startConversion(); 00479 } 00480 if(extTemp4.begin()) 00481 { 00482 extTemp4.startConversion(); 00483 } 00484 lantronix.baud(9600); 00485 lantronix.attach(&rxCallback, Serial::RxIrq); 00486 GPSEnable = 1; 00487 flashMode = 0; 00488 load0 = 0; 00489 dimming.write(0.01); 00490 dimming.period_us(100); 00491 flash0 = flash1 = 0; 00492 t.start(); 00493 wait(2); 00494 lantronix.printf("Starting Up \n\r"); 00495 float currentTime = 0; 00496 int delay = 1; 00497 set_time(0); 00498 while (true) { 00499 syncLine.fall(&syncActive); 00500 if(extTemp1.isPresent()) 00501 { 00502 extTemp1.startConversion(); 00503 } 00504 if(extTemp2.isPresent()) 00505 { 00506 extTemp2.startConversion(); 00507 } 00508 if(extTemp3.isPresent()) 00509 { 00510 extTemp3.startConversion(); 00511 } 00512 if(extTemp4.isPresent()) 00513 { 00514 extTemp4.startConversion(); 00515 } 00516 if(temploop) 00517 { 00518 if(extTemp1.read() > 110 || extTemp2.read() > 110) 00519 { 00520 for(int x=0; x <9; x++) 00521 { 00522 flashStat[x] = 0; 00523 } 00524 lantronix.printf("OVERTEMP REACHED END OF TEST \n\r"); 00525 wait(2); 00526 } 00527 00528 time_t seconds = time(NULL); 00529 00530 if(seconds - lastTime >= delay) 00531 { 00532 lastTime = seconds; 00533 lantronix.printf("%3.1i,", seconds); 00534 if(extTemp1.isPresent()) 00535 { 00536 lantronix.printf("%3.1f,", extTemp1.read()); 00537 } 00538 if(extTemp2.isPresent()) 00539 { 00540 lantronix.printf("%3.1f,", extTemp2.read()); 00541 } 00542 if(extTemp3.isPresent()) 00543 { 00544 lantronix.printf("%3.1f,", extTemp3.read()); 00545 } 00546 if(extTemp4.isPresent()) 00547 { 00548 lantronix.printf("%3.1f \n\r", extTemp4.read()); 00549 } 00550 } 00551 } 00552 /** 00553 if(singleFlash) 00554 { 00555 int j = 1; 00556 for(int i = 0; i<8; i++) 00557 { 00558 if(flashStat[i]) 00559 { 00560 switch(i){ 00561 case 0: 00562 flash0 = j; 00563 break; 00564 case 1: 00565 flash1 = j; 00566 break; 00567 case 2: 00568 flash2 = j; 00569 break; 00570 case 3: 00571 flash3 = j; 00572 break; 00573 case 4: 00574 flash4 = j; 00575 break; 00576 case 5: 00577 flash5 = j; 00578 break; 00579 case 6: 00580 flash6 = j; 00581 break; 00582 case 7: 00583 flash7 = j; 00584 break; 00585 } 00586 } 00587 if(i == 7) 00588 { 00589 wait(0.01); 00590 flash0 = 0; 00591 flash1 = 0; 00592 flash2 = 0; 00593 flash3 = 0; 00594 flash4 = 0; 00595 flash5 = 0; 00596 flash6 = 0; 00597 flash7 = 0; 00598 singleFlash = 0; 00599 } 00600 } 00601 00602 00603 } 00604 **/ 00605 00606 if(messageProcessFlag) messageProcess(); 00607 for(int i = 0; i<8; i++) 00608 { 00609 if(flashStat[i]) 00610 { 00611 interval = (1/flashStat[i+16]) * 7; 00612 //interval = 500; 00613 if(flashStat[i+16] == 1) 00614 { 00615 switch(i){ 00616 case 0: 00617 flash0 = 1; 00618 break; 00619 case 1: 00620 flash1 = 1; 00621 break; 00622 case 2: 00623 flash2 = 1; 00624 break; 00625 case 3: 00626 flash3 = 1; 00627 break; 00628 case 4: 00629 flash4 = 1; 00630 break; 00631 case 5: 00632 flash5 = 1; 00633 break; 00634 case 6: 00635 flash6 = 1; 00636 break; 00637 case 7: 00638 flash7 = 1; 00639 break; 00640 00641 } 00642 } 00643 else if(t.read_ms() - flashStat[i+8] > interval) 00644 { 00645 switch(i){ 00646 case 0: 00647 flash0 = !flash0; 00648 break; 00649 case 1: 00650 flash1 = !flash1; 00651 break; 00652 case 2: 00653 flash2 = !flash2; 00654 break; 00655 case 3: 00656 flash3 = !flash3; 00657 break; 00658 case 4: 00659 flash4 = !flash4; 00660 break; 00661 case 5: 00662 flash5 = !flash5; 00663 break; 00664 case 6: 00665 flash6 = !flash6; 00666 break; 00667 case 7: 00668 flash7 = !flash7; 00669 break; 00670 } 00671 flashStat[i+8] = t.read_ms(); 00672 } 00673 } 00674 else 00675 { 00676 switch(i){ 00677 case 0: 00678 flash0 = 0; 00679 break; 00680 case 1: 00681 flash1 = 0; 00682 break; 00683 case 2: 00684 flash2 = 0; 00685 break; 00686 case 3: 00687 flash3 = 0; 00688 break; 00689 case 4: 00690 flash4 = 0; 00691 break; 00692 case 5: 00693 flash5 = 0; 00694 break; 00695 case 6: 00696 flash6 = 0; 00697 break; 00698 case 7: 00699 flash7 = 0; 00700 break; 00701 } 00702 } 00703 } 00704 00705 } 00706 } 00707
Generated on Wed Jul 13 2022 21:57:42 by
1.7.2