Template
fixed loop data persistance
This commit is contained in:
@@ -51,6 +51,7 @@ bool LED_ON = false;
|
||||
|
||||
|
||||
// https://www.pjrc.com/teensy/td_uart.html
|
||||
// these buffers are used by the UART interrupt
|
||||
#define Serial1RxBufferSIZE 1024 // 10 seconds
|
||||
char Serial1RxBuffer[Serial1RxBufferSIZE]; // global scope or static char. power of 2.
|
||||
|
||||
@@ -93,12 +94,15 @@ void setup()
|
||||
|
||||
if (DEBUG) RTCDisplay();
|
||||
|
||||
// Serial1 Rx @ Tx (0), Tx @ Tx (1)
|
||||
Serial1.begin(9600); // MUST match Garmin
|
||||
Serial1.addMemoryForRead(Serial1RxBuffer, Serial1RxBufferSIZE);
|
||||
|
||||
// Serial2 Rx @ Rx1 (16), Tx @ Tx1 (17)
|
||||
Serial2.begin(115200); // MUST match Dynon EFIS
|
||||
Serial2.addMemoryForRead(Serial2RxBuffer, Serial2RxBufferSIZE);
|
||||
|
||||
// Serial3 Rx @ A1 (15), Tx @ A0 (14)
|
||||
Serial3.begin(115200); // MUST match Dynon EMS
|
||||
Serial3.addMemoryForRead(Serial3RxBuffer, Serial3RxBufferSIZE);
|
||||
|
||||
@@ -120,7 +124,7 @@ void setup()
|
||||
if (DEBUG) Serial.printf(F(" fs started: %d\n"), myDrive1.filesystemsStarted());
|
||||
|
||||
if (DEBUG) Serial.printf("Find next file number...\n");
|
||||
i=next_file_number();
|
||||
i=next_file_number(); /* global access to myFiles1 */
|
||||
sprintf(fname,"Log%04d.txt",i);
|
||||
if (DEBUG) Serial.printf("Testing for file %s\n",fname);
|
||||
|
||||
@@ -144,7 +148,7 @@ void setup()
|
||||
|
||||
|
||||
|
||||
int next_file_number() {
|
||||
int next_file_number() { /* global access to myFiles1 */
|
||||
// returns the first unused file number
|
||||
char fname[16];
|
||||
bool fileexists = true; // assume true
|
||||
@@ -251,55 +255,60 @@ time_t getdatetime(){
|
||||
}
|
||||
|
||||
|
||||
// loop is called repeatedly
|
||||
// static vars to persist between calls
|
||||
void loop(void) {
|
||||
int i;
|
||||
static int t=0;
|
||||
char fname[16];
|
||||
int msg1 = 0;
|
||||
int msg2 = 0;
|
||||
int msg3 = 0;
|
||||
int i1 = 0;
|
||||
int i2 = 0;
|
||||
int i3 = 0;
|
||||
char GPSRx[Serial1RxBufferSIZE];
|
||||
char EFISRx[Serial2RxBufferSIZE];
|
||||
char EMSRx[Serial3RxBufferSIZE];
|
||||
bool MSG_OVFL = false;
|
||||
|
||||
// these buffers are used for message processing
|
||||
static char GPSRx[Serial1RxBufferSIZE];
|
||||
static char EFISRx[Serial2RxBufferSIZE];
|
||||
static char EMSRx[Serial3RxBufferSIZE];
|
||||
static int msg1 = 0;
|
||||
static int msg2 = 0;
|
||||
static int msg3 = 0;
|
||||
static int i1 = 0;
|
||||
static int i2 = 0;
|
||||
static int i3 = 0;
|
||||
static bool MSG_OVFL = false;
|
||||
|
||||
|
||||
// process until end of message
|
||||
// process until end of message or overflow
|
||||
if (Serial1.available()) {
|
||||
GPSRx[i1]=Serial1.read();
|
||||
//Serial.print(GPSRx[i1]);
|
||||
if (GPSRx[i1] == GPS_EOM) msg1 = i1;
|
||||
i1++;
|
||||
GPSRx[i1]=NULL;
|
||||
if (i1 == Serial1RxBufferSIZE - 1) {
|
||||
MSG_OVFL = true;
|
||||
msg1 = i1;
|
||||
}
|
||||
} else GPSRx[i1]=NULL;
|
||||
}
|
||||
|
||||
// process until end of message
|
||||
// process until end of message or overflow
|
||||
if (Serial2.available()) {
|
||||
EFISRx[i2]=Serial2.read();
|
||||
//Serial.print(EFISRx[i2]);
|
||||
if (EFISRx[i2] == EFIS_EOM) msg2 = i2;
|
||||
i2++;
|
||||
EFISRx[i2]=NULL;
|
||||
if (i2 == Serial2RxBufferSIZE - 1) {
|
||||
MSG_OVFL = true;
|
||||
msg2 = i2;
|
||||
}
|
||||
} else EFISRx[i2]=NULL;
|
||||
}
|
||||
|
||||
// process until end of message
|
||||
// process until end of message or overflow
|
||||
if (Serial3.available()) {
|
||||
EMSRx[i3]=Serial3.read();
|
||||
//Serial.print(EMSRx[i3]);
|
||||
if (EMSRx[i3] == EMS_EOM) msg3 = i3;
|
||||
i3++;
|
||||
EMSRx[i3]=NULL;
|
||||
if (i3 == Serial3RxBufferSIZE - 1) {
|
||||
MSG_OVFL = true;
|
||||
msg3 = i3;
|
||||
}
|
||||
} else EMSRx[i3]=NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -341,6 +350,14 @@ void loop(void) {
|
||||
tick = false;
|
||||
toggleLED();
|
||||
|
||||
if (myFile) {
|
||||
if (t>4) {
|
||||
myFile.flush(); // flush every 5 seconds
|
||||
t=0;
|
||||
}
|
||||
t=t+1;
|
||||
}
|
||||
|
||||
if (!myFile) { /* open a new file */
|
||||
myDrive1.begin();
|
||||
myDrive1.startFilesystems();
|
||||
@@ -352,11 +369,12 @@ void loop(void) {
|
||||
if (!myFiles1.begin(&myDrive1)) {
|
||||
if (DEBUG) Serial.print("initialization failed with code: ");
|
||||
if (DEBUG) myFiles1.printError(Serial);
|
||||
} else {
|
||||
i=next_file_number(); /* global access to myFiles1 */
|
||||
sprintf(fname,"Log%04d.txt",i);
|
||||
myFile = myFiles1.open(fname, FILE_WRITE);
|
||||
myFile.println("Log Started "); // first line
|
||||
}
|
||||
i=next_file_number();
|
||||
sprintf(fname,"Log%04d.txt",i);
|
||||
myFile = myFiles1.open(fname, FILE_WRITE);
|
||||
myFile.println("Log Started "); // first line
|
||||
} /* open new file */
|
||||
} /* tick */
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user