Test code for Apollo System

Dependencies:   BME280 DS1820

Files at this revision

API Documentation at this revision

Comitter:
wakestrap
Date:
Fri Jun 19 18:54:25 2020 +0000
Commit message:
removed GPS module

Changed in this revision

.gitignore Show annotated file Show diff for this revision Revisions of this file
BME280.lib Show annotated file Show diff for this revision Revisions of this file
DS1820.lib Show annotated file Show diff for this revision Revisions of this file
README.md Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-os.lib Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.gitignore	Fri Jun 19 18:54:25 2020 +0000
@@ -0,0 +1,4 @@
+.build
+.mbed
+projectfiles
+*.py*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BME280.lib	Fri Jun 19 18:54:25 2020 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/MACRUM/code/BME280/#c1f1647004c4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DS1820.lib	Fri Jun 19 18:54:25 2020 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/hudakz/code/DS1820/#b593a82ce790
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README.md	Fri Jun 19 18:54:25 2020 +0000
@@ -0,0 +1,57 @@
+# Getting started with Blinky on mbed OS
+
+This guide reviews the steps required to get Blinky working on an mbed OS platform.
+
+Please install [mbed CLI](https://github.com/ARMmbed/mbed-cli#installing-mbed-cli).
+
+## Import the example application
+
+From the command-line, import the example:
+
+```
+mbed import mbed-os-example-blinky
+cd mbed-os-example-blinky
+```
+
+### Now compile
+
+Invoke `mbed compile`, and specify the name of your platform and your favorite toolchain (`GCC_ARM`, `ARM`, `IAR`). For example, for the ARM Compiler 5:
+
+```
+mbed compile -m K64F -t ARM
+```
+
+Your PC may take a few minutes to compile your code. At the end, you see the following result:
+
+```
+[snip]
++----------------------------+-------+-------+------+
+| Module                     | .text | .data | .bss |
++----------------------------+-------+-------+------+
+| Misc                       | 13939 |    24 | 1372 |
+| core/hal                   | 16993 |    96 |  296 |
+| core/rtos                  |  7384 |    92 | 4204 |
+| features/FEATURE_IPV4      |    80 |     0 |  176 |
+| frameworks/greentea-client |  1830 |    60 |   44 |
+| frameworks/utest           |  2392 |   512 |  292 |
+| Subtotals                  | 42618 |   784 | 6384 |
++----------------------------+-------+-------+------+
+Allocated Heap: unknown
+Allocated Stack: unknown
+Total Static RAM memory (data + bss): 7168 bytes
+Total RAM memory (data + bss + heap + stack): 7168 bytes
+Total Flash memory (text + data + misc): 43402 bytes
+Image: .\.build\K64F\ARM\mbed-os-example-blinky.bin
+```
+
+### Program your board
+
+1. Connect your mbed device to the computer over USB.
+1. Copy the binary file to the mbed device.
+1. Press the reset button to start the program.
+
+The LED on your platform turns on and off.
+
+## Troubleshooting
+
+If you have problems, you can review the [documentation](https://os.mbed.com/docs/latest/tutorials/debugging.html) for suggestions on what could be wrong and how to fix it.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Jun 19 18:54:25 2020 +0000
@@ -0,0 +1,707 @@
+/*******************************************************************************
+Commands:
+
+AM=x where x =1|0 Sets Mode. Mode 0 = CC, Mode 1 = Flash
+AL=XY X=load channel (0-3) Artimes L1, Artemis L2, Bia L1, Bia L2 - Y = 0|1 On or Off
+AFY=X.XX Where Y = channel and X.XX = flash rate between 0 and 1
+AEY=X where Y = channel and X = 0|1 On or Off
+AT = TemP reading
+AP = Pressure Reading
+AH = Humidty reading
+
+*******************************************************************************/
+#include "mbed.h"
+#include "BME280.h"
+#include "DS1820.h"
+
+#define GPIO1 PB_12
+
+#define GPIO2 PB_9
+ 
+#define GPIO3 PB_8
+
+#define GPIO4 PB_5
+
+#define GPIO5 PB_4
+
+#define GPIO6 PB_3
+
+#define GPIO7 PD_2   //PD_2
+
+#define GPIO8 PC_8
+
+#define GPIO9 PC_7
+
+#define GPIO10 PA_15
+
+#define GPIO11 PC_9
+
+#define GPIO12 PC_6
+
+#define LOAD0 PA_1
+#define LOAD1 PA_6
+
+DigitalOut flash0(GPIO1);
+DigitalOut flash1(GPIO5);
+DigitalOut flash2(GPIO2);
+DigitalOut flash3(GPIO6);
+DigitalOut flash4(GPIO3);
+DigitalOut flash5(GPIO7);
+DigitalOut flash6(GPIO4);
+DigitalOut flash7(GPIO8);
+
+DigitalOut GPSEnable(GPIO12);
+
+DigitalOut load0(LOAD0);
+DigitalOut load1(LOAD0);
+DigitalOut SVLoad1(GPIO11);
+DigitalOut SVLoad2(GPIO11);
+
+InterruptIn syncLine(PC_13);
+
+float flashStat[32] = {0}; //First 8 are Flash EN, Next 8 are next flash, final 8 are Flash rate.
+PwmOut dimming(GPIO10);
+DigitalOut flashMode(GPIO9);
+
+BME280 BME280(PB_7, PB_6);
+
+Timer t;
+
+Serial lantronix(PA_2, PA_3);
+
+DS1820 extTemp1(PC_3);
+DS1820 extTemp2(PA_7);
+DS1820 extTemp3(PA_0);
+DS1820 extTemp4(PB_0);
+
+DigitalIn extTemp1Pin(PC_3);
+DigitalIn extTemp2Pin(PA_7);
+DigitalIn extTemp3Pin(PA_0);
+DigitalIn extTemp4Pin(PB_0);
+
+int commandFlag = 0;
+int messageProcessFlag = 0;
+
+int debugOut = 0;
+float flashrate = 0;
+
+char msgBuffer[20] = {0};
+int msgBufferCount = 0;
+
+int singleFlash = 0;
+
+int temploop = 0;
+
+void syncActive(){
+//singleFlash = 1;
+ int j = 1;
+ for(int i = 0; i<8; i++)
+ {
+    if(flashStat[i])
+    {
+        switch(i){
+            case 0:
+            flash0 = j;
+                break;
+            case 1:
+            flash1 = j;
+                break;
+            case 2:
+            flash2 = j;
+                break;
+            case 3:
+            flash3 = j;
+                break;
+            case 4:
+            flash4 = j;
+                break;
+            case 5:
+            flash5 = j;
+                break;
+            case 6:
+            flash6 = j;
+                break;
+            case 7:
+            flash7 = j;
+                break;
+                }
+    }
+    if(i == 7)
+    {
+        wait(0.01);
+        flash0 = 0;
+        flash1 = 0;
+        flash2 = 0;
+        flash3 = 0;
+        flash4 = 0;
+        flash5 = 0;
+        flash6 = 0;
+        flash7 = 0;
+    }
+ }
+            
+}
+void sendOK(){
+    lantronix.printf("\n\rOK\n\r");
+}
+
+void sendERROR(){
+    lantronix.printf("\n\rERROR\n\r");
+}
+
+void rxCallback() {
+    if(commandFlag)
+    {
+        if(debugOut) lantronix.printf("Command Started \r\n");
+        if(lantronix.readable())
+        {
+            
+            msgBuffer[msgBufferCount] = lantronix.getc();
+            lantronix.putc(msgBuffer[msgBufferCount]);
+            if(msgBuffer[msgBufferCount] == '\n')
+            {
+                commandFlag = 0;
+                msgBuffer[msgBufferCount] = 0;
+                messageProcessFlag = 1;
+                msgBufferCount = 0;
+            }
+            if(msgBuffer[msgBufferCount] == 0x7F)
+            {
+                if(msgBufferCount > 0)
+                {
+                    msgBufferCount--;
+                    if(msgBufferCount > 0)
+                    {
+                        msgBufferCount--;
+                    }
+                }
+            }
+            msgBufferCount++;
+            if(msgBufferCount > 9)
+            {
+                sendERROR();
+                msgBufferCount = 0;
+                messageProcessFlag = 0;
+                commandFlag = 0;
+            }
+        }
+    }
+    
+    else
+    {
+            char c;
+            temploop = 0;            
+            c = lantronix.getc();
+            if(c == 'A')
+            {
+                commandFlag = 1;
+                for(int i = 0; i<10; i++)
+                {
+                    msgBuffer[i] = 0;
+                }
+                lantronix.putc(c);
+                msgBuffer[0] = c;
+                msgBufferCount = 1;
+            }
+            
+            
+        }
+}
+
+
+    
+
+void setMode(char _flashmode){
+    if(_flashmode == '1') flashMode = 1;
+    if(_flashmode == '0') flashMode = 0;
+}
+
+void setLoad(char _channel, char _loadmode){
+    _channel = _channel - 48;
+    _loadmode = _loadmode - 48;
+    
+   // lantronix.printf("Loadmode is %f \r\n", _loadmode)
+   // lantronix.printf("Channel is %f \r\n", _channel)
+    
+    if(_channel == 0) load0 = _loadmode;
+    if(_channel == 1) load1 = _loadmode;
+    if(_channel == 2) SVLoad1 = _loadmode;
+    if(_channel == 3) SVLoad2 = _loadmode;
+}
+
+void setFlash(char _channel, char _dig1, char _dig2, char _dig3){
+    int number;
+    //lantronix.printf("AFR Char = %c.%c%c \r\n", _dig1, _dig2, _dig3);
+    flashrate = 0;
+    number = _dig1 - 48;
+    _channel = _channel - 48;
+    if(number == 1)
+    {
+        flashrate = 1;
+        flashStat[_channel+16] = flashrate;
+    }
+    else
+    {
+        number = _dig2 - 48;
+        flashrate = 0.1*number;
+        flashStat[_channel+16] = flashrate;
+        if(_dig3 != 13)
+        {
+            number = _dig3 - 48;
+            flashrate = flashrate + 0.01*number;
+            flashStat[_channel+16] = flashrate;
+        }
+    }
+    
+    if(flashrate > 1) 
+    { 
+        flashrate = 1.0; 
+        flashStat[_channel+16] = flashrate;
+    }
+    if(flashrate < 0) 
+    {
+        flashrate = 0.0; 
+        flashStat[_channel+16] = flashrate;
+    }
+    //lantronix.printf("AFR%i=%f", _channel, flashStat[_channel+8]);
+}
+
+
+void messageProcess() {
+    switch(msgBuffer[1])
+    {
+        case 'M' :
+            if(msgBuffer[2] == '=')
+            {
+                setMode(msgBuffer[3]);
+                sendOK();
+                
+            }
+            else if(msgBuffer[2] == '?')
+            {
+                lantronix.printf("\n\rAM=%i\n\r", flashMode.read());
+            }
+            else sendERROR();
+            messageProcessFlag = 0;
+            msgBuffer[0] = 0;
+            msgBufferCount = 0;
+            break;
+        case 'L' :
+            if(msgBuffer[2] == '=')
+            {
+                setLoad(msgBuffer[3],msgBuffer[4]);
+                sendOK();
+            }
+            else if(msgBuffer[2] == '?')
+            {
+                lantronix.printf("\n\rAL=%i\n\r", load0.read());
+            }
+            else sendERROR();
+            messageProcessFlag = 0;
+            msgBuffer[0] = 0;
+            msgBufferCount = 0;
+        
+            break;
+            
+         case 'F' :
+            if(msgBuffer[3] == '=')
+            {
+                if(msgBuffer[5] == '.')
+                {
+                    //lantronix.printf("\n\rD3=%i\n\r", msgBuffer[6]);
+                    setFlash(msgBuffer[2],msgBuffer[4],msgBuffer[6],msgBuffer[7]);
+                    sendOK();
+                }
+                else
+                {
+                    sendERROR();
+                }
+            }
+            else if(msgBuffer[3] == '?')
+            {
+                lantronix.printf("\n\rAF=%i\n\r", flash0.read());
+            }
+            else sendERROR();
+            /**
+            if(msgBuffer[2] == 'R')
+            {
+                if(msgBuffer[3] == '=')
+                {
+                    setFlash(msgBuffer[3]);
+                    sendOK();
+                }
+                if(msgBuffer[3] == '?')
+                {
+                    lantronix.printf("\n\rAFR=%i\n\r", flashRate);
+                }
+            }
+            **/
+            messageProcessFlag = 0;
+            msgBuffer[0] = 0;
+            msgBufferCount = 0;
+        
+            break;
+        case 'T' :
+            if(msgBuffer[2] == 'S')
+            {
+                temploop = 1;
+            }
+            
+            time_t seconds = time(NULL);
+            lantronix.printf("%3.1i,", seconds);
+            
+            if(extTemp1.isPresent())
+            {
+                lantronix.printf("Temp1: %3.1f,\n\r", extTemp1.read());
+                extTemp1.startConversion();
+            }
+            if(extTemp2.isPresent())
+            {
+                lantronix.printf("Temp2: %3.1f,\n\r", extTemp2.read());
+                extTemp2.startConversion();
+            }
+            if(extTemp3.isPresent())
+            {
+                lantronix.printf("Temp3: %3.1f,\n\r", extTemp3.read());
+                extTemp2.startConversion();
+            }
+            if(extTemp4.isPresent())
+            {
+                lantronix.printf("Temp4: %3.1f,\n\r", extTemp4.read());
+                extTemp2.startConversion();
+            }
+            lantronix.printf("OB-Temp: %2.2f \n\r", BME280.getTemperature());
+            break;
+        case 'P' :
+            lantronix.printf("Pres: %4.2f kPa\n\r", BME280.getPressure());
+            break;
+        case 'H' :
+           lantronix.printf("Humi: %2.2f %% \n\r", BME280.getHumidity());
+            break;
+        case 'G' :
+            /**
+            gps.sample();
+            sendOK();
+            lantronix.printf("Lat = %.4f ", gps.latitude);
+            lantronix.printf("Lon = %.4f \n\r", gps.longitude);
+            **/
+            break;
+        case 'B' :
+            if(msgBuffer[2] == '=')
+            {
+                int dimValue = msgBuffer[3] - 48;
+                if(dimValue > 9) dimValue = 9;
+                if(dimValue < 0) dimValue = 0;
+                
+                dimValue = 10 - dimValue;
+                dimValue = dimValue / 10;
+                if(dimValue = 0) dimValue = 0.01;
+                dimming.write(dimValue);
+                sendOK();
+                
+            }
+            else if(msgBuffer[3] == '?')
+            {
+                lantronix.printf("\n\rAD=%i\n\r", dimming.read());
+            }
+            else sendERROR();
+            break;
+        case 'E' :
+            if(msgBuffer[3] == '=')
+            {
+                int channel = msgBuffer[2] - 48;
+                int enable = msgBuffer[4] - 48;
+                if(enable > 1) enable = 0;
+                if(enable < 0) enable = 0;
+                if(channel < 8)
+                {
+                    flashStat[channel] = enable;
+                    sendOK();
+                }
+            }
+            else if(msgBuffer[3] == '?')
+            {
+                int channel = msgBuffer[2] - 48;
+                lantronix.printf("\n\rAE%i=%i\n\r", channel, flashStat[channel]);
+            }
+            else sendERROR();
+            /**
+            if(msgBuffer[2] == 'R')
+            {
+                if(msgBuffer[3] == '=')
+                {
+                    setFlash(msgBuffer[3]);
+                    sendOK();
+                }
+                if(msgBuffer[3] == '?')
+                {
+                    lantronix.printf("\n\rAFR=%i\n\r", flashRate);
+                }
+            }
+            **/
+        
+            break;
+        default :
+             sendERROR();
+             messageProcessFlag = 0;
+             msgBuffer[0] = 0;
+             msgBufferCount = 0;
+             break;
+    }
+    messageProcessFlag = 0;
+    msgBuffer[0] = 0;
+    msgBufferCount = 0;
+}
+
+
+
+// main() runs in its own thread in the OS
+int main() {
+    float lastTime = 0;
+    float interval = 0;
+    
+    extTemp1Pin.mode(PullUp);
+    extTemp2Pin.mode(PullUp);
+    extTemp3Pin.mode(PullUp);
+    extTemp4Pin.mode(PullUp);
+    
+    if(extTemp1.begin())
+    {
+        extTemp1.startConversion();
+    }
+    if(extTemp2.begin())
+    {
+        extTemp2.startConversion();
+    }
+    if(extTemp3.begin())
+    {
+        extTemp3.startConversion();
+    }
+    if(extTemp4.begin())
+    {
+        extTemp4.startConversion();
+    }
+    lantronix.baud(9600);
+    lantronix.attach(&rxCallback, Serial::RxIrq);
+    GPSEnable = 1;
+    flashMode = 0;
+    load0 = 0;
+    dimming.write(0.01);
+    dimming.period_us(100);
+    flash0 = flash1 = 0;
+    t.start();
+    wait(2);
+    lantronix.printf("Starting Up \n\r");
+    float currentTime = 0;
+    int delay = 1;
+    set_time(0);
+    while (true) {
+        syncLine.fall(&syncActive);
+        if(extTemp1.isPresent())
+        {
+            extTemp1.startConversion();
+        }
+        if(extTemp2.isPresent())
+        {
+            extTemp2.startConversion();
+        }
+        if(extTemp3.isPresent())
+        {
+            extTemp3.startConversion();
+        }
+        if(extTemp4.isPresent())
+        {
+            extTemp4.startConversion();
+        }
+        if(temploop)
+        {
+            if(extTemp1.read() > 110 || extTemp2.read() > 110)
+            {
+                for(int x=0; x <9; x++)
+                {
+                    flashStat[x] = 0;
+                }
+                lantronix.printf("OVERTEMP REACHED END OF TEST \n\r");
+                wait(2);
+            }
+            
+            time_t seconds = time(NULL);
+            
+            if(seconds - lastTime >= delay)
+            {
+                lastTime = seconds;
+                lantronix.printf("%3.1i,", seconds);
+                if(extTemp1.isPresent())
+                {
+                    lantronix.printf("%3.1f,", extTemp1.read());
+                }
+                if(extTemp2.isPresent())
+                {
+                    lantronix.printf("%3.1f,", extTemp2.read());
+                }
+                if(extTemp3.isPresent())
+                {
+                    lantronix.printf("%3.1f,", extTemp3.read());
+                }
+                if(extTemp4.isPresent())
+                {
+                    lantronix.printf("%3.1f \n\r", extTemp4.read());
+                }
+            }
+        }
+        /**
+        if(singleFlash)
+        {
+            int j = 1;
+            for(int i = 0; i<8; i++)
+            {
+                if(flashStat[i])
+                {
+                    switch(i){
+                        case 0:
+                        flash0 = j;
+                            break;
+                        case 1:
+                        flash1 = j;
+                            break;
+                        case 2:
+                        flash2 = j;
+                            break;
+                        case 3:
+                        flash3 = j;
+                            break;
+                        case 4:
+                        flash4 = j;
+                            break;
+                        case 5:
+                        flash5 = j;
+                            break;
+                        case 6:
+                        flash6 = j;
+                            break;
+                        case 7:
+                        flash7 = j;
+                            break;
+                            }
+                }
+                if(i == 7)
+                {
+                    wait(0.01);
+                    flash0 = 0;
+                    flash1 = 0;
+                    flash2 = 0;
+                    flash3 = 0;
+                    flash4 = 0;
+                    flash5 = 0;
+                    flash6 = 0;
+                    flash7 = 0;
+                    singleFlash = 0;
+                }
+            }
+            
+            
+        }
+        **/
+        
+        if(messageProcessFlag) messageProcess();
+        for(int i = 0; i<8; i++)
+        {
+            if(flashStat[i])
+            {
+                interval = (1/flashStat[i+16]) * 7;
+                //interval = 500;
+                if(flashStat[i+16] == 1)
+                {
+                    switch(i){
+                        case 0:
+                        flash0 = 1;
+                            break;
+                        case 1:
+                        flash1 = 1;
+                            break;
+                        case 2:
+                        flash2 = 1;
+                            break;
+                        case 3:
+                        flash3 = 1;
+                            break;
+                        case 4:
+                        flash4 = 1;
+                            break;
+                        case 5:
+                        flash5 = 1;
+                            break;
+                        case 6:
+                        flash6 = 1;
+                            break;
+                        case 7:
+                        flash7 = 1;
+                            break;
+                    
+                    }
+                }
+                else if(t.read_ms() - flashStat[i+8] > interval)
+                {
+                    switch(i){
+                        case 0:
+                        flash0 = !flash0;
+                            break;
+                        case 1:
+                        flash1 = !flash1;
+                            break;
+                        case 2:
+                        flash2 = !flash2;
+                            break;
+                        case 3:
+                        flash3 = !flash3;
+                            break;
+                        case 4:
+                        flash4 = !flash4;
+                            break;
+                        case 5:
+                        flash5 = !flash5;
+                            break;
+                        case 6:
+                        flash6 = !flash6;
+                            break;
+                        case 7:
+                        flash7 = !flash7;
+                            break;
+                            }
+                    flashStat[i+8] = t.read_ms();
+                }
+            }
+            else
+            {
+                switch(i){
+                    case 0:
+                    flash0 = 0;
+                        break;
+                    case 1:
+                    flash1 = 0;
+                        break;
+                    case 2:
+                    flash2 = 0;
+                         break;
+                    case 3:
+                    flash3 = 0;
+                        break; 
+                    case 4:
+                    flash4 = 0;
+                        break;
+                    case 5:
+                    flash5 = 0;
+                        break;
+                    case 6:
+                    flash6 = 0;
+                         break;
+                    case 7:
+                    flash7 = 0;
+                        break;
+                        }
+            }
+        }
+        
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-os.lib	Fri Jun 19 18:54:25 2020 +0000
@@ -0,0 +1,1 @@
+https://github.com/ARMmbed/mbed-os/#949cb49ab0a144da0e3b04b6af46db0cd2a20d75