![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Guides the user to their classes
Dependencies: 4DGL-uLCD-SE Course SDFileSystem mbed PinDetect LSM9DS1_Library_cal MBed_Adafruit-GPS-Library
Diff: main.cpp
- Revision:
- 2:c708e2027970
- Parent:
- 1:65298ed43a58
- Child:
- 3:0ca91f8afec5
--- a/main.cpp Wed Dec 07 22:43:54 2016 +0000 +++ b/main.cpp Thu Dec 08 01:42:35 2016 +0000 @@ -5,21 +5,26 @@ #include <vector> #include "Course.h" #include "SDFileSystem.h" +#include "PinDetect.h" SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board Serial pc(USBTX, USBRX); Serial esp(p28, p27); // tx, rx uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin; +//Nav_Switch myNav( p18, p15, p16, p14, p17); +PinDetect left(p16); +PinDetect right(p14); +PinDetect center(p17); -char ssid[32] = ""; // enter WiFi router ssid inside the quotes -char pwd [32] = ""; // enter WiFi router password inside the quotes +char ssid[32] = "iPhone"; // enter WiFi router ssid inside the quotes +char pwd [32] = "cdc4012zarus"; // enter WiFi router password inside the quotes // for sending/receiving data over serial volatile int tx_in=0; volatile int tx_out=0; volatile int rx_in=0; volatile int rx_out=0; -const int buffer_size = 4095; +const int buffer_size = 4095; char tx_buffer[buffer_size+1]; char rx_buffer[buffer_size+1]; void Tx_interrupt(); @@ -34,25 +39,50 @@ int addCourseToVector(vector<Course>& cVec, Course newCourse); vector<Course> courseVec; void readClassFile(vector<Course>& cVec), writeClassFile(vector<Course>& cVec); +void displayCourseVec(); char rx_line[512]; string ip_line; bool ip_found = false; +int volatile current_screen = 0; +bool volatile screen_change = false; int port =80; // set server port int SERVtimeout =5; // set server timeout in seconds in case link breaks. +void left_callback(void) +{ + current_screen = (3 + current_screen - 1)%3; + screen_change = true; +} + +void right_callback(void) +{ + current_screen = (3 + current_screen + 1)%3; + screen_change = true; +} + +void center_callback(void) +{ + +} + int main() { - + left.mode(PullUp); + right.mode(PullUp); + center.mode(PullUp); + + left.attach_deasserted(&left_callback); + right.attach_deasserted(&right_callback); + center.attach_deasserted(¢er_callback); + left.setSampleFrequency(); + right.setSampleFrequency(); + center.setSampleFrequency(); + readClassFile(courseVec); - - if (courseVec.size() != 0) { - uLCD.cls(); - uLCD.locate(0,1); - for (int i = 0; i < courseVec.size(); i++) { - uLCD.locate(0, i); - uLCD.printf("%s", courseVec[i].getDisplayString()); - } - } + + courseVec.clear(); + + displayCourseVec(); pc.baud(9600); esp.baud(9600); @@ -62,31 +92,42 @@ esp.attach(&Tx_interrupt, Serial::TxIrq); startserver(); DataRX=0; - + while(1) { - if(DataRX==1) { - ReadWebData(); - esp.attach(&Rx_interrupt, Serial::RxIrq); - if (courseVec.size() == 0) { - uLCD.cls(); - uLCD.locate(0,0); - uLCD.printf("No classes input!"); - uLCD.locate(0,1); - uLCD.printf("To input classes \nGo to:"); - uLCD.locate(0,4); - uLCD.printf("%s", ip_line); - } - } - if(update==1) - { - writeClassFile(courseVec); - uLCD.cls(); - uLCD.locate(0,1); - for (int i = 0; i < courseVec.size(); i++) { - uLCD.locate(0, i); - uLCD.printf("%s", courseVec[i].getDisplayString()); - } - update=0; + uLCD.locate(0, 8); + uLCD.printf("%i", current_screen); + switch(current_screen) { + case 0: + if (screen_change) { + displayCourseVec(); + screen_change = false; + } + if(DataRX==1) { + ReadWebData(); + esp.attach(&Rx_interrupt, Serial::RxIrq); + displayCourseVec(); + } + if(update==1) { + writeClassFile(courseVec); + displayCourseVec(); + update=0; + } + break; + case 1: + if (screen_change) { + uLCD.cls(); + uLCD.printf("Compass screen"); + screen_change = false; + } + break; + case 2: + if (screen_change) { + uLCD.cls(); + uLCD.printf("Distance screen"); + screen_change = false; + } + break; + } } } @@ -97,9 +138,9 @@ wait_ms(200); esp.attach(NULL,Serial::RxIrq); DataRX=0; - + if (!ip_found) { - char* ip_loc = strstr(rx_buffer, "192"); + char* ip_loc = strstr(rx_buffer, "172"); if (ip_loc != NULL) { char ip_buf[16]; memset(ip_buf, '\0', sizeof(ip_buf)); @@ -167,7 +208,7 @@ SendCMD(); wait(2); read_line(); - + pc.printf("\n---------- Connecting to AP ----------\r\n"); //pc.printf("ssid = %s pwd = %s\r\n",ssid,pwd); strcpy(cmdbuff, "wifi.sta.config(\""); @@ -178,7 +219,7 @@ SendCMD(); wait(3); read_line(); - + pc.printf("\n++++++++++ Starting Server ++++++++++\r\n> "); //create server @@ -190,116 +231,116 @@ SendCMD(); read_line(); wait(0.3); - strcpy(cmdbuff,"conn:on(\"receive\",function(conn,payload) \r\n"); - SendCMD(); - read_line(); - wait(0.3); + strcpy(cmdbuff,"conn:on(\"receive\",function(conn,payload) \r\n"); + SendCMD(); + read_line(); + wait(0.3); - //print data to mbed - strcpy(cmdbuff,"print(payload)\r\n"); - SendCMD(); - read_line(); - wait(0.2); + //print data to mbed + strcpy(cmdbuff,"print(payload)\r\n"); + SendCMD(); + read_line(); + wait(0.2); - //web page data - strcpy(cmdbuff,"conn:send('<!DOCTYPE html><html><head><title>Class Scheduler!</title></head><body><h1>Class Scheduler</h1>')\r\n"); - SendCMD(); - read_line(); - wait(0.4); - strcpy(cmdbuff,"conn:send('<p><div class = \"content\">Input your schedule below!</div></p>')\r\n"); - SendCMD(); - read_line(); - wait(0.2); - strcpy(cmdbuff,"conn:send('<form method=\"POST\">')\r\n"); - SendCMD(); - read_line(); - wait(0.3); - strcpy(cmdbuff, "conn:send('<select name=\"building\">')\r\n"); - SendCMD(); - read_line(); - wait(0.3); - strcpy(cmdbuff, "conn:send('<option value =\"none\">None</option>')\r\n"); - SendCMD(); - read_line(); - wait(0.3); - strcpy(cmdbuff,"conn:send('<option value=\"CLH\">Clough Undergraduate Learning Commons</option>')\r\n"); - SendCMD(); - read_line(); - wait(0.3); - strcpy(cmdbuff,"conn:send('<option value=\"COC\">College of Computing</option>')\r\n"); - SendCMD(); - read_line(); - wait(0.3); - strcpy(cmdbuff, "conn:send('<option value=\"KLS\">Klaus Advanced Computing Building</option>')\r\n"); - SendCMD(); - read_line(); - wait(0.3); - strcpy(cmdbuff, "conn:send('<option value=\"VAN\">Van Leer</option></select>')\r\n"); - SendCMD(); - read_line(); - wait(0.3); - strcpy(cmdbuff, "conn:send('<select name=\"hour\"><option value=\"01\">1</option><option value=\"02\">2</option>')\r\n"); - SendCMD(); - read_line(); - wait(.3); - strcpy(cmdbuff, "conn:send('<option value=\"03\">3</option><option value=\"04\">4</option><option value=\"05\">5</option>')\r\n"); - SendCMD(); - read_line(); - wait(.3); - strcpy(cmdbuff, "conn:send('<option value=\"06\">6</option><option value=\"07\">7</option><option value=\"08\">8</option>')\r\n"); - SendCMD(); - read_line(); - wait(0.3); - strcpy(cmdbuff, "conn:send('<option value=\"09\">9</option><option value=\"10\">10</option><option value=\"11\">11</option><option value=\"12\">12</option></select>')\r\n"); - SendCMD(); - read_line(); - wait(0.3); - strcpy(cmdbuff, "conn:send('<select name=\"minute\"><option value=\"00\">00</option><option value=\"05\">05</option>')\r\n"); - SendCMD(); - read_line(); - wait(0.3); - strcpy(cmdbuff, "conn:send('<option value=\"10\">10</option><option value=\"15\">15</option>')\r\n"); - SendCMD(); - read_line(); - wait(0.3); - strcpy(cmdbuff, "conn:send('<option value=\"20\">20</option><option value=\"25\">25</option>')\r\n"); - SendCMD(); - read_line(); - wait(0.3); - strcpy(cmdbuff, "conn:send('<option value=\"30\">30</option><option value=\"35\">35</option>')\r\n"); - SendCMD(); - read_line(); - wait(0.3); - strcpy(cmdbuff, "conn:send('<option value=\"40\">40</option><option value=\"45\">45</option>')\r\n"); - SendCMD(); - read_line(); - wait(0.3); - strcpy(cmdbuff, "conn:send('<option value=\"50\">50</option><option value=\"55\">55</option></select>')\r\n"); - SendCMD(); - read_line(); - wait(0.3); - strcpy(cmdbuff, "conn:send('<select name=\"AMPM\"><option value=\"AM\">AM</option><option value=\"PM\">PM</option></select><br></br>')\r\n"); - SendCMD(); - read_line(); - wait(0.3); + //web page data + strcpy(cmdbuff,"conn:send('<!DOCTYPE html><html><head><title>Class Scheduler!</title></head><body><h1>Class Scheduler</h1>')\r\n"); + SendCMD(); + read_line(); + wait(0.4); + strcpy(cmdbuff,"conn:send('<p><div class = \"content\">Input your schedule below!</div></p>')\r\n"); + SendCMD(); + read_line(); + wait(0.2); + strcpy(cmdbuff,"conn:send('<form method=\"POST\">')\r\n"); + SendCMD(); + read_line(); + wait(0.3); + strcpy(cmdbuff, "conn:send('<select name=\"building\">')\r\n"); + SendCMD(); + read_line(); + wait(0.3); + strcpy(cmdbuff, "conn:send('<option value =\"none\">None</option>')\r\n"); + SendCMD(); + read_line(); + wait(0.3); + strcpy(cmdbuff,"conn:send('<option value=\"CLH\">Clough Undergraduate Learning Commons</option>')\r\n"); + SendCMD(); + read_line(); + wait(0.3); + strcpy(cmdbuff,"conn:send('<option value=\"COC\">College of Computing</option>')\r\n"); + SendCMD(); + read_line(); + wait(0.3); + strcpy(cmdbuff, "conn:send('<option value=\"KLS\">Klaus Advanced Computing Building</option>')\r\n"); + SendCMD(); + read_line(); + wait(0.3); + strcpy(cmdbuff, "conn:send('<option value=\"VAN\">Van Leer</option></select>')\r\n"); + SendCMD(); + read_line(); + wait(0.3); + strcpy(cmdbuff, "conn:send('<select name=\"hour\"><option value=\"01\">1</option><option value=\"02\">2</option>')\r\n"); + SendCMD(); + read_line(); + wait(.3); + strcpy(cmdbuff, "conn:send('<option value=\"03\">3</option><option value=\"04\">4</option><option value=\"05\">5</option>')\r\n"); + SendCMD(); + read_line(); + wait(.3); + strcpy(cmdbuff, "conn:send('<option value=\"06\">6</option><option value=\"07\">7</option><option value=\"08\">8</option>')\r\n"); + SendCMD(); + read_line(); + wait(0.3); + strcpy(cmdbuff, "conn:send('<option value=\"09\">9</option><option value=\"10\">10</option><option value=\"11\">11</option><option value=\"12\">12</option></select>')\r\n"); + SendCMD(); + read_line(); + wait(0.3); + strcpy(cmdbuff, "conn:send('<select name=\"minute\"><option value=\"00\">00</option><option value=\"05\">05</option>')\r\n"); + SendCMD(); + read_line(); + wait(0.3); + strcpy(cmdbuff, "conn:send('<option value=\"10\">10</option><option value=\"15\">15</option>')\r\n"); + SendCMD(); + read_line(); + wait(0.3); + strcpy(cmdbuff, "conn:send('<option value=\"20\">20</option><option value=\"25\">25</option>')\r\n"); + SendCMD(); + read_line(); + wait(0.3); + strcpy(cmdbuff, "conn:send('<option value=\"30\">30</option><option value=\"35\">35</option>')\r\n"); + SendCMD(); + read_line(); + wait(0.3); + strcpy(cmdbuff, "conn:send('<option value=\"40\">40</option><option value=\"45\">45</option>')\r\n"); + SendCMD(); + read_line(); + wait(0.3); + strcpy(cmdbuff, "conn:send('<option value=\"50\">50</option><option value=\"55\">55</option></select>')\r\n"); + SendCMD(); + read_line(); + wait(0.3); + strcpy(cmdbuff, "conn:send('<select name=\"AMPM\"><option value=\"AM\">AM</option><option value=\"PM\">PM</option></select><br></br>')\r\n"); + SendCMD(); + read_line(); + wait(0.3); - strcpy(cmdbuff,"conn:send('<p><input type=\"submit\" value=\"Add Class\"></form>')\r\n"); - SendCMD(); - read_line(); - wait(0.3); - strcpy(cmdbuff, "conn:send('</body></html>')\r\n"); - SendCMD(); - read_line(); - wait(0.5); - // end web page data - strcpy(cmdbuff, "conn:on(\"sent\",function(conn) conn:close() end)\r\n"); // close current connection - SendCMD(); - read_line(); - wait(0.3); - strcpy(cmdbuff, "end)\r\n"); - SendCMD(); - read_line(); - wait(0.2); + strcpy(cmdbuff,"conn:send('<p><input type=\"submit\" value=\"Add Class\"></form>')\r\n"); + SendCMD(); + read_line(); + wait(0.3); + strcpy(cmdbuff, "conn:send('</body></html>')\r\n"); + SendCMD(); + read_line(); + wait(0.5); + // end web page data + strcpy(cmdbuff, "conn:on(\"sent\",function(conn) conn:close() end)\r\n"); // close current connection + SendCMD(); + read_line(); + wait(0.3); + strcpy(cmdbuff, "end)\r\n"); + SendCMD(); + read_line(); + wait(0.2); strcpy(cmdbuff, "end)\r\n"); SendCMD(); read_line(); @@ -381,7 +422,8 @@ } // Read a line from the large rx buffer from rx interrupt routine -void read_line() { +void read_line() +{ int i; i = 0; // Start Critical Section - don't interrupt while changing global buffer variables @@ -409,7 +451,8 @@ } // Interupt Routine to read in data from serial port -void Rx_interrupt() { +void Rx_interrupt() +{ DataRX=1; // Loop just in case more than one character is in UART's receive FIFO buffer // Stop if buffer full @@ -423,7 +466,8 @@ } // Interupt Routine to write out data to serial port -void Tx_interrupt() { +void Tx_interrupt() +{ // Loop to fill more than one character in UART's transmit FIFO buffer // Stop if buffer empty while ((esp.writeable()) && (tx_in != tx_out)) { @@ -433,7 +477,8 @@ return; } -int addCourseToVector(vector<Course>& cVec, Course newCourse) { +int addCourseToVector(vector<Course>& cVec, Course newCourse) +{ int numIterations = 0; if (cVec.size() == 0) { @@ -448,22 +493,19 @@ else if (newCourse.getAMPM_toInt() < cVec[i].getAMPM_toInt()) { cVec.insert(cVec.begin()+i, newCourse); return 1; - } - else if (cVec[i].getAMPM_toInt() == newCourse.getAMPM_toInt()) { + } else if (cVec[i].getAMPM_toInt() == newCourse.getAMPM_toInt()) { if (cVec[i].getHour_forCompare() < newCourse.getHour_forCompare()) continue; else if (newCourse.getHour_forCompare() < cVec[i].getHour_forCompare()) { cVec.insert(cVec.begin()+i, newCourse); return 1; - } - else if (cVec[i].getHour_forCompare() == newCourse.getHour_forCompare()) { + } else if (cVec[i].getHour_forCompare() == newCourse.getHour_forCompare()) { if (cVec[i].getMinute() < newCourse.getMinute()) continue; else if (newCourse.getMinute() < cVec[i].getMinute()) { cVec.insert(cVec.begin()+i, newCourse); return 1; - } - else if (cVec[i].getMinute() == newCourse.getMinute()) { + } else if (cVec[i].getMinute() == newCourse.getMinute()) { uLCD.cls(); uLCD.locate(0,0); uLCD.printf("Can not add coure!"); @@ -486,7 +528,8 @@ return 0; } -void writeClassFile(vector<Course>& cVec) { +void writeClassFile(vector<Course>& cVec) +{ FILE *writeClass = fopen("/sd/classdir/classes.txt", "w"); if (writeClass != NULL) { string line = ""; @@ -501,7 +544,8 @@ } } -void readClassFile(vector<Course>& cVec) { +void readClassFile(vector<Course>& cVec) +{ cVec.clear(); FILE *readFp = fopen("/sd/classdir/classes.txt", "r"); @@ -515,7 +559,7 @@ uLCD.cls(); uLCD.locate(0, 1); uLCD.printf("Reading class file..."); - + memset(buildingBuf, 0, sizeof(buildingBuf)); memset(hourBuf, 0, sizeof(hourBuf)); memset(minuteBuf, 0, sizeof(minuteBuf)); @@ -545,4 +589,24 @@ } fclose(readFp); return; +} + +void displayCourseVec() +{ + if (courseVec.size() == 0) { + uLCD.cls(); + uLCD.locate(0,0); + uLCD.printf("No classes input!"); + uLCD.locate(0,1); + uLCD.printf("To input classes \nGo to:"); + uLCD.locate(0,4); + uLCD.printf("%s", ip_line); + } else { + uLCD.cls(); + uLCD.locate(0,1); + for (int i = 0; i < courseVec.size(); i++) { + uLCD.locate(0, i); + uLCD.printf("%s", courseVec[i].getDisplayString()); + } + } } \ No newline at end of file