fuck this
Dependencies: BMP280
Serial.cpp
- Committer:
- mwthewsey
- Date:
- 2018-01-10
- Revision:
- 25:a2aedb498b27
- Parent:
- 21:6e733076f49c
File content as of revision 25:a2aedb498b27:
#include "Serial.h" #include "mbed.h" #include "Sampling.h" #include "TimeInterface.h" #include "Logging.h" #include <string> Thread SerialThread; //Variables int DateTimeVar[3]; bool SerialState; char InputBufferText[128]; unsigned short InputBufferNum; unsigned short internalIndex; //float tempReadingsSerial[BUFFERSIZE] = {}; //float presReadingsSerial[BUFFERSIZE] = {}; //float LDRReadingsSerial[BUFFERSIZE] = {}; //time_t timeReadingsSerial[BUFFERSIZE] = {}; void SerialStart(void) { SerialThread.start(&SerialCode); //Start thread running Thread SerialThread(osPriorityNormal, 32 * 1024); //Normal priority with a 32k stack size PC.attach(&RXInterruptISR); //Attach interrupt function to hardware interrupt } void RXInterruptISR(void) { SerialThread.signal_set(1); //Set thread signal to start SerialCode PC.attach(NULL); //Disable interrupt } void SerialCode(void) { while(true) { Thread::signal_wait(1); //Wait untill signal set PC.scanf("%s", InputBufferText); //Scan serial PC.printf("Command: %s\n\r", InputBufferText); //Print input string. Readback string InputBufferString(InputBufferText); //Convert array of char to string if (InputBufferString == "test") { //Test function PC.printf("testsuccess\n\r"); } else if (InputBufferString == "help") { //Help function PC.printf("Here is an usefull list of commands:\n\r"); PC.printf(" readall\n\r deleteall\n\r read <n>\n\r delete <n>\n\r setdate <dd><mm><yyyy>\n\r settime <hh><mm><ss>\n\r sett <T>\n\r state <x>\n\r logging <x>\n\r"); } else if (InputBufferString == "readall") { //Reads all samples in buffers and prints oldest first Sampling(false); //Stop sampling internalIndex = currentIndex; //InternalIndex for incrementing out data PC.printf("Printing all %d reccords\n\r",BUFFERSIZE); PC.printf(" Date | Time | Temp | Pressure | Light\n\r"); TakeKeys(true); //Take keys for (short i = 0; i < BUFFERSIZE; i++) { //For loop of length buffersize tm T = ReturnDateTimeStruct(timeReadings[internalIndex]); //InternalIndex was set as newest. We will now decrement to display oldest to newest PC.printf(" %4d/%2d/%2d %2d:%2d:%2d %2.2f %2.2f %2.2f\n\r",T.tm_year,T.tm_mon,T.tm_mday,T.tm_hour,T.tm_min,T.tm_sec,tempReadings[internalIndex],presReadings[internalIndex],LDRReadings[internalIndex]); //PC.printf("%d\n\r",T.tm_year); internalIndex = IndexDecrement(internalIndex); //Decrement internal index } TakeKeys(false); //Return keys Sampling(true); //Start sampling } else if (InputBufferString == "deleteall") { //Deletes all reccords Sampling(false);//Stop sampling TakeKeys(true); //Take keys memset(tempReadings, 0.0, BUFFERSIZE * sizeof(float)); //Fill array with 0s memset(presReadings, 0.0, BUFFERSIZE * sizeof(float)); memset(LDRReadings, 0.0, BUFFERSIZE * sizeof(float)); memset(timeReadings, 0.0, BUFFERSIZE * sizeof(float)); nextIndex = 0; //Reset Index currentIndex = 0; oldestIndex = 0; firstSample = true; TakeKeys(false); //Return keys Sampling(true); //Start sampling PC.printf("Deleted %d records\n\r",BUFFERSIZE); } else if (InputBufferString == "read") { //Reads past <n> records PC.printf("How many records would you like to view:\n\r"); PC.attach(&RXInterruptISR); //Enable interrupt Thread::signal_wait(1); //Wait untill signal set PC.scanf("%d", &InputBufferNum); //Scan serial if (InputBufferNum >= BUFFERSIZE) { //If requested number of samples is greater than buffersize InputBufferNum = BUFFERSIZE; //Then set number of samples equal to buffersize } internalIndex = currentIndex; //InternalIndex for incrementing out data PC.printf("Showing the newest %d records:\n\r", InputBufferNum); PC.printf(" Date | Time | Temp | Pressure | Light\n\r"); TakeKeys(true); //Take keys for (short i = 0; i < InputBufferNum; i++) { //For loop of length InputBufferNum tm T = ReturnDateTimeStruct(timeReadings[internalIndex]); PC.printf(" %4d/%2d/%2d %2d:%2d:%2d %2.2f %2.2f %2.2f\n\r",T.tm_year,T.tm_mon,T.tm_mday,T.tm_hour,T.tm_min,T.tm_sec,tempReadings[internalIndex],presReadings[internalIndex],LDRReadings[internalIndex]); internalIndex = IndexDecrement(internalIndex); //Decrement internal index } TakeKeys(false); //Return keys } else if (InputBufferString == "delete") { //Deletes oldest <n> records PC.printf("How many records would you like to delete:\n\r"); PC.attach(&RXInterruptISR); //Enable interrupt Thread::signal_wait(1); //Wait untill signal set PC.scanf("%d", &InputBufferNum); //Scan serial Sampling(false); //Stop sampling TakeKeys(true); //Take keys for (int i = 0; i < InputBufferNum; i++) { tempReadings[oldestIndex] = 0; //Fill array with 0s presReadings[oldestIndex] = 0; LDRReadings[oldestIndex] = 0; timeReadings[oldestIndex] = 0; oldestIndex = IndexIncrement(oldestIndex); //Increment index } TakeKeys(false); //Return keys Sampling(true); //Start sampling PC.printf("Deleated %d records", InputBufferNum); //Scan serial } else if (InputBufferString == "setdate") { //Set date YYYY/MM/DD Sampling(false); //Stop sampling PC.printf("Setting Date\n\r"); for (int i = 0; i < 3; i++) { //Changes message on each iteration if (i==0) { PC.printf("Input Year <YYYY>:\n\r"); } else if(i==1) { PC.printf("Input Month <MM>:\n\r"); } else if (i==2) { PC.printf("Input Date <DD>:\n\r"); } PC.attach(&RXInterruptISR); //Enable interrupt Thread::signal_wait(1); //Wait untill signal set PC.scanf("%d", &DateTimeVar[i]); //Scan serial } SetDate(DateTimeVar[2], DateTimeVar[1], DateTimeVar[0]); //Set date PC.printf("Date set to : %d/%d/%d",DateTimeVar[2], DateTimeVar[1], DateTimeVar[0]); Sampling(true); //Stop sampling } else if (InputBufferString == "settime") { //Set time hh/mm/ss Sampling(false); //Stop sampling PC.printf("Setting Time\n\r"); for (int i = 0; i < 3; i++) { //Changes message on each iteration if (i==0) { PC.printf("Input Hour <hh>:\n\r"); } else if(i==1) { PC.printf("Input Minute <mm>:\n\r"); } else if (i==2) { PC.printf("Input Seccond <ss>:\n\r"); } PC.attach(&RXInterruptISR); //Enable interrupt Thread::signal_wait(1); //Wait untill signal set PC.scanf("%d", &DateTimeVar[i]); //Scan serial } SetTime(DateTimeVar[0], DateTimeVar[1], DateTimeVar[2]); //Set time PC.printf("Time set to : %d:%d:%d",DateTimeVar[0], DateTimeVar[1], DateTimeVar[2]); Sampling(true); //Stop sampling } else if (InputBufferString == "sett") { //Set sample rate PC.printf("What would you like to set the sample rate to:\n\r"); PC.attach(&RXInterruptISR); //Enable interrupt Thread::signal_wait(1); //Wait untill signal set PC.scanf("%d", &SAMPLERATE); //Scan serial ConfigThreadsAndIR(); //Reattach ticker PC.printf("Sample rate set to: %d\n\r",SAMPLERATE); } else if (InputBufferString == "state") { //Toggle sampling SerialState = !SerialState; //Toggle state if (SerialState) { Sampling(true); //Start sampling PC.printf("Sampling started\n\r"); } else { Sampling(false);//Stop sampling PC.printf("Sampling stopped\n\r"); } } else if (InputBufferString == "logging") { //Toggle logging logging = !logging; //Toggle state if (logging) { PC.printf("Logging started"); } else { PC.printf("Logging stopped"); } } PC.attach(&RXInterruptISR); //Enable interrupt } }