Test code for Apollo System
main.cpp
- Committer:
- wakestrap
- Date:
- 2020-06-19
- Revision:
- 0:632db6388a5d
File content as of revision 0:632db6388a5d:
/*******************************************************************************
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;
}
}
}
}
}