Guides the user to their classes

Dependencies:   4DGL-uLCD-SE Course SDFileSystem mbed PinDetect LSM9DS1_Library_cal MBed_Adafruit-GPS-Library

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(&center_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