Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Thread_Communication_V4_fortest by
Revision 10:c10d1337d754, committed 2017-12-30
- Comitter:
- dnonoo
- Date:
- Sat Dec 30 18:55:22 2017 +0000
- Parent:
- 9:b838c5787ed7
- Child:
- 11:19135c83c208
- Commit message:
- Added pin CD on SD Card to PE_10 (digitalIn) to check if SD card is inserted and Help command in Serial Thread;
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
| main.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Sat Dec 30 15:12:09 2017 +0000
+++ b/main.cpp Sat Dec 30 18:55:22 2017 +0000
@@ -44,6 +44,7 @@
volatile double PRES = 0;
volatile double TEMP = 0;
+volatile int sampleTime = 15;
// int to hold current switch state
int userButtonState = FallingEdge;
@@ -82,6 +83,7 @@
pc.attach(&Rx_interrupt, Serial::RxIrq);
POST();
+ pc.printf("\n\n\nType HELP for list of available Commands\n\n\n\r");
_serialCMD.start(serialCMD);
_PrintLCD.start(PrintLCD);
_sensorRead.start(sensorRead);
@@ -90,8 +92,7 @@
_Network1.start(Network1);
userButton.rise(&userButtonRise);
- read.attach(readISR, SAMPLING_PERIOD);
-
+ read.attach(&readISR, sampleTime);
while (1) {
Yellow_ext = ON;
@@ -101,6 +102,7 @@
}// End While
} // End Main
/*--------------------------------------------------------------------*/
+/*-----------------Circular Buffer------------------------------------*/
void circBuff () {
while(1) {
@@ -141,9 +143,9 @@
}
//Unlock data buffer
DataBuffer.unlock();
- }
-}
-
+ }// End While
+}// End Circular buffer
+/*-------------------------------------------------------------*/
/*---------------------Read Sensors ---------------------------*/
void readISR () { // Ticker interrupt defined in main
@@ -177,7 +179,7 @@
Thread::signal_wait(SENSOR_UPDATE); // Wait for the Timer interrupt
}
}
-
+/*--------------------------------------------------------------------*/
/*--------------------------------LCD---------------------------------*/
void PrintLCD () {
@@ -205,21 +207,21 @@
mail_box.free(mail);
}
- lcd.Write("Light Level:");
+ lcd.Write("Light:");
lcd.RowSelect(1);
lcd.Write(lightString);
i++;
break;
}
case 1:
- lcd.Write("Temperature:");
+ lcd.Write("Temperature(C):");
lcd.RowSelect(1);
lcd.Write(tempString);
i++;
break;
case 2:
- lcd.Write("Pressure:");
+ lcd.Write("Pressure(mBar):");
lcd.RowSelect(1);
lcd.Write(pressString);
i =0;
@@ -410,6 +412,10 @@
/*----SETT----------------------------------*/
else if(strstr(rx_buffer, "SETT")){
pc.puts(" SETT\n\r");
+ // read.detach();
+ // sampleTime = atoi(rx_buffer);
+ // pc.printf("Sample Time %d\n\r", sampleTime);
+ // read.attach(&readISR, sampleTime);
}
/*----STATE----------------------------------*/
else if(strstr(rx_buffer, "STATE")){
@@ -419,6 +425,15 @@
else if(strstr(rx_buffer, "LOGGING")){
pc.puts(" LOGGING\n\r");
}
+/*----HELP--------------------------------------*/
+ else if (strstr(rx_buffer, "HELP")) {
+ pc.puts("\n\n\nCurrently Available Commands:\n\r");
+ pc.puts("\tREAD n - Read n previous samples\n\r");
+ pc.puts("\tREAD ALL - Read All previous samples held in memory\n\r");
+ pc.puts("\tSETTIME hh:mm::ss - Set time in 24hr format\n\r");
+ pc.puts("\tSETDATE dd/mm/yyyy - Set time in specified format\n\r");
+ pc.puts("\tDELETE ALL - Delete all sampled held in internal memory\n\n\n\r");
+ }
/*----ERROR---*/
else{
pc.puts("####ERROR####\n\r");
@@ -435,7 +450,160 @@
}
}
/*------------------------------------------------*/
+/*---------------SD THread------------------------*/
+void writeRemove_SD() {
+
+ while(1) {
+ Thread::signal_wait(USER_BUTTON_PRESSED); //wait for debounce signal
+ int sd_state = sdIn;
+ switch (sd_state) {
+ case 1:
+ pc.printf("SD Card not inserted!\n\r");
+ pc.printf("Insert SD Card and press User button again\n\r");
+ break;
+ default:
+ pc.printf("This should never happen\n\r");
+ break;
+ case 0:
+ pc.printf("Initalising SD Card\n\r");
+ //check init
+ if (sd.init() != 0) {
+ pc.printf(" ERROR - SD card failed to initialise.\n\rRestart board\n\r");
+ }
+
+ // Create Filing system for SD Card
+ FATFileSystem fs("sd", &sd);
+
+ //OpenFiles to write/append to
+ pc.printf("Writing to SDC\n\r");
+
+ FILE* fp = fopen("/sd/TheChamberOfSecrets.txt", "w"); //"w" to overwrite file ftb
+
+ // Check for error in opening file
+ if (fp == NULL) {
+ pc.printf("*****ERROR - Could not open file for write*****\n\r");
+ }
+ //HERE IS WHERE TO PRINT DATA TO SD CARD FROM BUFFER (REMEMBER TO EMPTY BUFFER???)
+ //Lock data buffer
+ DataBuffer.lock();
+ dataLock.lock();
+ //Print all samples to SD
+ for(int n=data_t; n<=MAX_SAMPLES; n++) {
+ fputs(data_buffer[n], fp);
+ fprintf(fp, "\n\r");
+ }
+ if(data_t>data_h) {
+ for(int n=0; n<=(data_t-1); n++) {
+ fputs(data_buffer[n], fp);
+
+ }
+ }
+
+ //Lock data buffer
+ DataBuffer.unlock();
+ dataLock.unlock();
+ //fprintf(fp, "dd/mm/yy hh:mm:ss, TEMPERATURE, PRESSURE, LIGHT\n\r");
+
+ fclose(fp);
+
+ pc.printf("Write Sucessful!\n\r");
+
+ sd.deinit();
+ pc.printf("SD Card Ready to Remove\n\r");
+ Green_ext = 1;
+ Thread::wait(500);
+ Green_ext = 0;
+ Thread::wait(500);
+ Green_ext = 1;
+ Thread::wait(500);
+ Green_ext = 0;
+ Thread::wait(500);
+ Green_ext = 1;
+ Thread::wait(500);
+ Green_ext = 0;
+ Thread::wait(500);
+ Green_ext = 1;
+ Thread::wait(500);
+ Green_ext = 0;
+ Thread::wait(500);
+ }//End Switch
+ }// End While
+}// End Thread
+/*--------------------------------------------------------------------------*/
+
+/*---------------------------Networking Thread------------------------------*/
+void Network1 () {
+
+ printf("Setting up server\n\r");
+
+ //Configure an ethernet connection
+ EthernetInterface eth;
+ eth.set_network(IP, NETMASK, GATEWAY);
+ eth.connect();
+ printf("The target IP address is '%s'\n\r", eth.get_ip_address());
+
+ //Now setup a web server
+ TCPServer srv; //TCP/IP Server
+
+ SocketAddress clt_addr; //Address of incoming connection
+
+ /* Open the server on ethernet stack */
+ srv.open(ð);
+
+ /* Bind the HTTP port (TCP 80) to the server */
+ srv.bind(eth.get_ip_address(), 80);
+
+ /* Can handle 5 simultaneous connections */
+ srv.listen(5);
+
+ while (true) {
+
+ TCPSocket clt_sock; //Socket for communication
+ using namespace std;
+ //Block and wait on an incoming connection
+ srv.accept(&clt_sock, &clt_addr);
+ //printf("accept %s:%d\n\r", clt_addr.get_ip_address(), clt_addr.get_port());
+
+ //Uses a C++ string to make it easier to concatinate
+ string response;
+ string strL = "LDR:";
+ string strP = ", Pressure(mBar): ";
+ string strT = ", Temp(C): ";
+ //This is a C string
+ char l_str[64];
+ char p_str[64];
+ char t_str[64];
+
+ //Read the LDR value
+ dataLock.lock();
+ float L = LDR ;
+ float T = TEMP;
+ float P = PRES;
+ dataLock.unlock();
+
+ //Convert to a C String
+ sprintf(l_str, "%1.3f", L );
+ sprintf(t_str, "%2.2f", T);
+ sprintf(p_str, "%4.2f", P);
+
+
+ //Build the C++ string response
+ response = HTTP_MESSAGE_BODY1;
+ // response += strL;
+ response += l_str;
+ response += strT;
+ response += t_str;
+ response += strP;
+ response += p_str;
+ response += HTTP_MESSAGE_BODY2;
+
+ //Send static HTML response (as a C string)
+ clt_sock.send(response.c_str(), response.size()+6);
+
+ }
+}
+/*---------------------------POST--------------------------------------------*/
void POST () {
pc.printf(" ALL Leds should be flashing\n\r");
@@ -476,144 +644,6 @@
lcd.RowSelect(2);
lcd.Write("******TEST******");
wait(1);
- lcd.Clear();
+ lcd.Clear();
+ pc.printf("Basic POST Pass\n\r");
}
-
-void writeRemove_SD() {
-
- while(1) {
- Thread::signal_wait(USER_BUTTON_PRESSED); //wait for debounce signal
- pc.printf("Initalising SD Card\n\r");
-
- //check init
- if (sd.init() != 0) {
- pc.printf("******SD Initialise FAIL*******\n\r");
- }
-
- // Create Filing system for SD Card
- FATFileSystem fs("sd", &sd);
-
- //OpenFiles to write/append to
- pc.printf("Writing to SDC\n\r");
-
- FILE* fp = fopen("/sd/TheChamberOfSecrets.txt", "w"); //"w" to overwrite file ftb
-
- // Check for error in opening file
- if (fp == NULL) {
- pc.printf("*****ERROR - Could not open file for write*****\n\r");
- }
- //HERE IS WHERE TO PRINT DATA TO SD CARD FROM BUFFER (REMEMBER TO EMPTY BUFFER???)
- //Lock data buffer
- DataBuffer.lock();
- dataLock.lock();
- //Print all samples to SD
- for(int n=data_t; n<=MAX_SAMPLES; n++){
- fputs(data_buffer[n], fp);
- fprintf(fp, "\n\r");
- }
- if(data_t>data_h){
- for(int n=0; n<=(data_t-1); n++){
- fputs(data_buffer[n], fp);
-
- }
- }
-
- //Lock data buffer
- DataBuffer.unlock();
- dataLock.unlock();
- //fprintf(fp, "dd/mm/yy hh:mm:ss, TEMPERATURE, PRESSURE, LIGHT\n\r");
-
- fclose(fp);
-
- pc.printf("Write Sucessful!\n\r");
-
- sd.deinit();
- pc.printf("SD Card Ready to Remove\n\r");
- Green_ext = 1;
- Thread::wait(500);
- Green_ext = 0;
- Thread::wait(500);
- Green_ext = 1;
- Thread::wait(500);
- Green_ext = 0;
- Thread::wait(500);
- Green_ext = 1;
- Thread::wait(500);
- Green_ext = 0;
- Thread::wait(500);
- Green_ext = 1;
- Thread::wait(500);
- Green_ext = 0;
- Thread::wait(500);
- }// End While
-}// End Thread
-
-void Network1 () {
-
- printf("Basic HTTP server example\n");
-
- //Configure an ethernet connection
- EthernetInterface eth;
- eth.set_network(IP, NETMASK, GATEWAY);
- eth.connect();
- printf("The target IP address is '%s'\n", eth.get_ip_address());
-
- //Now setup a web server
- TCPServer srv; //TCP/IP Server
-
- SocketAddress clt_addr; //Address of incoming connection
-
- /* Open the server on ethernet stack */
- srv.open(ð);
-
- /* Bind the HTTP port (TCP 80) to the server */
- srv.bind(eth.get_ip_address(), 80);
-
- /* Can handle 5 simultaneous connections */
- srv.listen(5);
-
- while (true) {
-
- TCPSocket clt_sock; //Socket for communication
- using namespace std;
- //Block and wait on an incoming connection
- srv.accept(&clt_sock, &clt_addr);
- printf("accept %s:%d\n\r", clt_addr.get_ip_address(), clt_addr.get_port());
-
- //Uses a C++ string to make it easier to concatinate
- string response;
- string strL = "LDR:";
- string strP = ", Pressure(mBar): ";
- string strT = ", Temp(C): ";
- //This is a C string
- char l_str[64];
- char p_str[64];
- char t_str[64];
-
- //Read the LDR value
- dataLock.lock();
- float L = LDR ;
- float T = TEMP;
- float P = PRES;
- dataLock.unlock();
-
- //Convert to a C String
- sprintf(l_str, "%1.3f", L );
- sprintf(t_str, "%2.2f", T);
- sprintf(p_str, "%4.2f", P);
-
-
- //Build the C++ string response
- response = HTTP_MESSAGE_BODY1;
- // response += strL;
- response += l_str;
- response += strT;
- response += t_str;
- response += strP;
- response += p_str;
- response += HTTP_MESSAGE_BODY2;
-
- //Send static HTML response (as a C string)
- clt_sock.send(response.c_str(), response.size()+6);
- }
-}
--- a/main.h Sat Dec 30 15:12:09 2017 +0000 +++ b/main.h Sat Dec 30 18:55:22 2017 +0000 @@ -65,6 +65,7 @@ /* Configure Digital In Switches */ extern DigitalIn SW_L (PE_12); extern DigitalIn SW_R (PE_14); +extern DigitalIn sdIn (PE_10); //extern DigitalIn SW_B (USER_BUTTON); //defined as interrupt now for SD /* Configure Analogue Pins */ /* Analogue IN */
