Kraken Elec / Mbed OS Apollo_Test_Code

Dependencies:   BME280 DS1820

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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