Guides the user to their classes

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

Committer:
kkizirian
Date:
Thu Dec 08 01:42:35 2016 +0000
Revision:
2:c708e2027970
Parent:
1:65298ed43a58
Child:
3:0ca91f8afec5
Added different screen functionality

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kkizirian 0:ce60014510e5 1 // Class Scheduler
kkizirian 0:ce60014510e5 2 #include "mbed.h"
kkizirian 0:ce60014510e5 3 #include "uLCD_4DGL.h"
kkizirian 0:ce60014510e5 4 #include <string>
kkizirian 0:ce60014510e5 5 #include <vector>
kkizirian 0:ce60014510e5 6 #include "Course.h"
kkizirian 0:ce60014510e5 7 #include "SDFileSystem.h"
kkizirian 2:c708e2027970 8 #include "PinDetect.h"
kkizirian 0:ce60014510e5 9
kkizirian 0:ce60014510e5 10 SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
kkizirian 0:ce60014510e5 11 Serial pc(USBTX, USBRX);
kkizirian 0:ce60014510e5 12 Serial esp(p28, p27); // tx, rx
kkizirian 0:ce60014510e5 13 uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin;
kkizirian 2:c708e2027970 14 //Nav_Switch myNav( p18, p15, p16, p14, p17);
kkizirian 2:c708e2027970 15 PinDetect left(p16);
kkizirian 2:c708e2027970 16 PinDetect right(p14);
kkizirian 2:c708e2027970 17 PinDetect center(p17);
kkizirian 0:ce60014510e5 18
kkizirian 2:c708e2027970 19 char ssid[32] = "iPhone"; // enter WiFi router ssid inside the quotes
kkizirian 2:c708e2027970 20 char pwd [32] = "cdc4012zarus"; // enter WiFi router password inside the quotes
kkizirian 0:ce60014510e5 21
kkizirian 0:ce60014510e5 22 // for sending/receiving data over serial
kkizirian 0:ce60014510e5 23 volatile int tx_in=0;
kkizirian 0:ce60014510e5 24 volatile int tx_out=0;
kkizirian 0:ce60014510e5 25 volatile int rx_in=0;
kkizirian 0:ce60014510e5 26 volatile int rx_out=0;
kkizirian 2:c708e2027970 27 const int buffer_size = 4095;
kkizirian 0:ce60014510e5 28 char tx_buffer[buffer_size+1];
kkizirian 0:ce60014510e5 29 char rx_buffer[buffer_size+1];
kkizirian 0:ce60014510e5 30 void Tx_interrupt();
kkizirian 0:ce60014510e5 31 void Rx_interrupt();
kkizirian 0:ce60014510e5 32 void read_line();
kkizirian 0:ce60014510e5 33
kkizirian 0:ce60014510e5 34 int DataRX;
kkizirian 0:ce60014510e5 35 int update;
kkizirian 0:ce60014510e5 36 char cmdbuff[512];
kkizirian 0:ce60014510e5 37 char webdata[4096]; // This may need to be bigger depending on WEB browser used
kkizirian 0:ce60014510e5 38 void SendCMD(),read_line(),ReadWebData(),startserver();
kkizirian 0:ce60014510e5 39 int addCourseToVector(vector<Course>& cVec, Course newCourse);
kkizirian 0:ce60014510e5 40 vector<Course> courseVec;
kkizirian 0:ce60014510e5 41 void readClassFile(vector<Course>& cVec), writeClassFile(vector<Course>& cVec);
kkizirian 2:c708e2027970 42 void displayCourseVec();
kkizirian 0:ce60014510e5 43 char rx_line[512];
kkizirian 0:ce60014510e5 44 string ip_line;
kkizirian 0:ce60014510e5 45 bool ip_found = false;
kkizirian 2:c708e2027970 46 int volatile current_screen = 0;
kkizirian 2:c708e2027970 47 bool volatile screen_change = false;
kkizirian 0:ce60014510e5 48 int port =80; // set server port
kkizirian 0:ce60014510e5 49 int SERVtimeout =5; // set server timeout in seconds in case link breaks.
kkizirian 0:ce60014510e5 50
kkizirian 2:c708e2027970 51 void left_callback(void)
kkizirian 2:c708e2027970 52 {
kkizirian 2:c708e2027970 53 current_screen = (3 + current_screen - 1)%3;
kkizirian 2:c708e2027970 54 screen_change = true;
kkizirian 2:c708e2027970 55 }
kkizirian 2:c708e2027970 56
kkizirian 2:c708e2027970 57 void right_callback(void)
kkizirian 2:c708e2027970 58 {
kkizirian 2:c708e2027970 59 current_screen = (3 + current_screen + 1)%3;
kkizirian 2:c708e2027970 60 screen_change = true;
kkizirian 2:c708e2027970 61 }
kkizirian 2:c708e2027970 62
kkizirian 2:c708e2027970 63 void center_callback(void)
kkizirian 2:c708e2027970 64 {
kkizirian 2:c708e2027970 65
kkizirian 2:c708e2027970 66 }
kkizirian 2:c708e2027970 67
kkizirian 0:ce60014510e5 68 int main()
kkizirian 0:ce60014510e5 69 {
kkizirian 2:c708e2027970 70 left.mode(PullUp);
kkizirian 2:c708e2027970 71 right.mode(PullUp);
kkizirian 2:c708e2027970 72 center.mode(PullUp);
kkizirian 2:c708e2027970 73
kkizirian 2:c708e2027970 74 left.attach_deasserted(&left_callback);
kkizirian 2:c708e2027970 75 right.attach_deasserted(&right_callback);
kkizirian 2:c708e2027970 76 center.attach_deasserted(&center_callback);
kkizirian 2:c708e2027970 77 left.setSampleFrequency();
kkizirian 2:c708e2027970 78 right.setSampleFrequency();
kkizirian 2:c708e2027970 79 center.setSampleFrequency();
kkizirian 2:c708e2027970 80
kkizirian 0:ce60014510e5 81 readClassFile(courseVec);
kkizirian 2:c708e2027970 82
kkizirian 2:c708e2027970 83 courseVec.clear();
kkizirian 2:c708e2027970 84
kkizirian 2:c708e2027970 85 displayCourseVec();
kkizirian 0:ce60014510e5 86
kkizirian 0:ce60014510e5 87 pc.baud(9600);
kkizirian 0:ce60014510e5 88 esp.baud(9600);
kkizirian 0:ce60014510e5 89 // Setup a serial interrupt function to receive data
kkizirian 0:ce60014510e5 90 esp.attach(&Rx_interrupt, Serial::RxIrq);
kkizirian 0:ce60014510e5 91 // Setup a serial interrupt function to transmit data
kkizirian 0:ce60014510e5 92 esp.attach(&Tx_interrupt, Serial::TxIrq);
kkizirian 0:ce60014510e5 93 startserver();
kkizirian 0:ce60014510e5 94 DataRX=0;
kkizirian 2:c708e2027970 95
kkizirian 0:ce60014510e5 96 while(1) {
kkizirian 2:c708e2027970 97 uLCD.locate(0, 8);
kkizirian 2:c708e2027970 98 uLCD.printf("%i", current_screen);
kkizirian 2:c708e2027970 99 switch(current_screen) {
kkizirian 2:c708e2027970 100 case 0:
kkizirian 2:c708e2027970 101 if (screen_change) {
kkizirian 2:c708e2027970 102 displayCourseVec();
kkizirian 2:c708e2027970 103 screen_change = false;
kkizirian 2:c708e2027970 104 }
kkizirian 2:c708e2027970 105 if(DataRX==1) {
kkizirian 2:c708e2027970 106 ReadWebData();
kkizirian 2:c708e2027970 107 esp.attach(&Rx_interrupt, Serial::RxIrq);
kkizirian 2:c708e2027970 108 displayCourseVec();
kkizirian 2:c708e2027970 109 }
kkizirian 2:c708e2027970 110 if(update==1) {
kkizirian 2:c708e2027970 111 writeClassFile(courseVec);
kkizirian 2:c708e2027970 112 displayCourseVec();
kkizirian 2:c708e2027970 113 update=0;
kkizirian 2:c708e2027970 114 }
kkizirian 2:c708e2027970 115 break;
kkizirian 2:c708e2027970 116 case 1:
kkizirian 2:c708e2027970 117 if (screen_change) {
kkizirian 2:c708e2027970 118 uLCD.cls();
kkizirian 2:c708e2027970 119 uLCD.printf("Compass screen");
kkizirian 2:c708e2027970 120 screen_change = false;
kkizirian 2:c708e2027970 121 }
kkizirian 2:c708e2027970 122 break;
kkizirian 2:c708e2027970 123 case 2:
kkizirian 2:c708e2027970 124 if (screen_change) {
kkizirian 2:c708e2027970 125 uLCD.cls();
kkizirian 2:c708e2027970 126 uLCD.printf("Distance screen");
kkizirian 2:c708e2027970 127 screen_change = false;
kkizirian 2:c708e2027970 128 }
kkizirian 2:c708e2027970 129 break;
kkizirian 2:c708e2027970 130
kkizirian 0:ce60014510e5 131 }
kkizirian 0:ce60014510e5 132 }
kkizirian 0:ce60014510e5 133 }
kkizirian 0:ce60014510e5 134
kkizirian 0:ce60014510e5 135 // Reads and processes GET and POST web data
kkizirian 0:ce60014510e5 136 void ReadWebData()
kkizirian 0:ce60014510e5 137 {
kkizirian 0:ce60014510e5 138 wait_ms(200);
kkizirian 0:ce60014510e5 139 esp.attach(NULL,Serial::RxIrq);
kkizirian 0:ce60014510e5 140 DataRX=0;
kkizirian 2:c708e2027970 141
kkizirian 0:ce60014510e5 142 if (!ip_found) {
kkizirian 2:c708e2027970 143 char* ip_loc = strstr(rx_buffer, "172");
kkizirian 0:ce60014510e5 144 if (ip_loc != NULL) {
kkizirian 0:ce60014510e5 145 char ip_buf[16];
kkizirian 0:ce60014510e5 146 memset(ip_buf, '\0', sizeof(ip_buf));
kkizirian 0:ce60014510e5 147 memcpy(ip_buf, ip_loc, 15);
kkizirian 0:ce60014510e5 148 ip_line = ip_buf;
kkizirian 0:ce60014510e5 149 }
kkizirian 0:ce60014510e5 150 }
kkizirian 0:ce60014510e5 151
kkizirian 0:ce60014510e5 152 memset(webdata, '\0', sizeof(webdata));
kkizirian 0:ce60014510e5 153 strcpy(webdata, rx_buffer);
kkizirian 0:ce60014510e5 154 memset(rx_buffer, '\0', sizeof(rx_buffer));
kkizirian 0:ce60014510e5 155 rx_in = 0;
kkizirian 0:ce60014510e5 156 rx_out = 0;
kkizirian 0:ce60014510e5 157
kkizirian 0:ce60014510e5 158 // check web data for form information
kkizirian 0:ce60014510e5 159 if (strstr(webdata, "building=none") == NULL) {
kkizirian 0:ce60014510e5 160 char buildingBuf[4];
kkizirian 0:ce60014510e5 161 string building;
kkizirian 0:ce60014510e5 162 char* buildingLoc = strstr(webdata, "building=");
kkizirian 0:ce60014510e5 163 if (buildingLoc != NULL) {
kkizirian 0:ce60014510e5 164 memcpy(buildingBuf, &buildingLoc[9], 3);
kkizirian 0:ce60014510e5 165 buildingBuf[3] = '\0';
kkizirian 0:ce60014510e5 166 building = buildingBuf;;
kkizirian 0:ce60014510e5 167 }
kkizirian 0:ce60014510e5 168
kkizirian 0:ce60014510e5 169 char hourBuf[3];
kkizirian 0:ce60014510e5 170 int hour = -1;
kkizirian 0:ce60014510e5 171 char* hourLoc = strstr(webdata, "hour=");
kkizirian 0:ce60014510e5 172 if (hourLoc != NULL) {
kkizirian 0:ce60014510e5 173 memcpy(hourBuf, &hourLoc[5], 2);
kkizirian 0:ce60014510e5 174 hourBuf[2] = '\0';
kkizirian 0:ce60014510e5 175 hour = atoi(hourBuf);
kkizirian 0:ce60014510e5 176 }
kkizirian 0:ce60014510e5 177
kkizirian 0:ce60014510e5 178 char minuteBuf[3];
kkizirian 0:ce60014510e5 179 int minute = -1;
kkizirian 0:ce60014510e5 180 char* minuteLoc = strstr(webdata, "minute=");
kkizirian 0:ce60014510e5 181 if (minuteLoc != NULL) {
kkizirian 0:ce60014510e5 182 memcpy(minuteBuf, &minuteLoc[7], 2);
kkizirian 0:ce60014510e5 183 minuteBuf[2] = '\0';
kkizirian 0:ce60014510e5 184 minute = atoi(minuteBuf);
kkizirian 0:ce60014510e5 185 }
kkizirian 0:ce60014510e5 186
kkizirian 0:ce60014510e5 187 char ampmBuf[3];
kkizirian 0:ce60014510e5 188 string ampm;
kkizirian 0:ce60014510e5 189 char* ampmLoc = strstr(webdata, "AMPM=");
kkizirian 0:ce60014510e5 190 if (ampmLoc != NULL) {
kkizirian 0:ce60014510e5 191 memcpy(ampmBuf, &ampmLoc[5], 2);
kkizirian 0:ce60014510e5 192 ampmBuf[2] = '\0';
kkizirian 0:ce60014510e5 193 ampm = ampmBuf;
kkizirian 0:ce60014510e5 194 }
kkizirian 0:ce60014510e5 195
kkizirian 0:ce60014510e5 196 if (minute != -1) {
kkizirian 0:ce60014510e5 197 Course newCourse(building, hour, minute, ampm);
kkizirian 0:ce60014510e5 198 addCourseToVector(courseVec, newCourse);
kkizirian 0:ce60014510e5 199 update = 1;
kkizirian 0:ce60014510e5 200 }
kkizirian 0:ce60014510e5 201 }
kkizirian 0:ce60014510e5 202 }
kkizirian 0:ce60014510e5 203 // Starts webserver
kkizirian 0:ce60014510e5 204 void startserver()
kkizirian 0:ce60014510e5 205 {
kkizirian 0:ce60014510e5 206 pc.printf("++++++++++ Resetting ESP ++++++++++\r\n");
kkizirian 0:ce60014510e5 207 strcpy(cmdbuff,"node.restart()\r\n");
kkizirian 0:ce60014510e5 208 SendCMD();
kkizirian 0:ce60014510e5 209 wait(2);
kkizirian 0:ce60014510e5 210 read_line();
kkizirian 2:c708e2027970 211
kkizirian 0:ce60014510e5 212 pc.printf("\n---------- Connecting to AP ----------\r\n");
kkizirian 0:ce60014510e5 213 //pc.printf("ssid = %s pwd = %s\r\n",ssid,pwd);
kkizirian 0:ce60014510e5 214 strcpy(cmdbuff, "wifi.sta.config(\"");
kkizirian 0:ce60014510e5 215 strcat(cmdbuff, ssid);
kkizirian 0:ce60014510e5 216 strcat(cmdbuff, "\",\"");
kkizirian 0:ce60014510e5 217 strcat(cmdbuff, pwd);
kkizirian 0:ce60014510e5 218 strcat(cmdbuff, "\")\r\n");
kkizirian 0:ce60014510e5 219 SendCMD();
kkizirian 0:ce60014510e5 220 wait(3);
kkizirian 0:ce60014510e5 221 read_line();
kkizirian 2:c708e2027970 222
kkizirian 0:ce60014510e5 223 pc.printf("\n++++++++++ Starting Server ++++++++++\r\n> ");
kkizirian 0:ce60014510e5 224
kkizirian 0:ce60014510e5 225 //create server
kkizirian 0:ce60014510e5 226 sprintf(cmdbuff, "srv=net.createServer(net.TCP,%d)\r\n",SERVtimeout);
kkizirian 0:ce60014510e5 227 SendCMD();
kkizirian 0:ce60014510e5 228 read_line();
kkizirian 0:ce60014510e5 229 wait(0.5);
kkizirian 0:ce60014510e5 230 strcpy(cmdbuff,"srv:listen(80,function(conn)\r\n");
kkizirian 0:ce60014510e5 231 SendCMD();
kkizirian 0:ce60014510e5 232 read_line();
kkizirian 0:ce60014510e5 233 wait(0.3);
kkizirian 2:c708e2027970 234 strcpy(cmdbuff,"conn:on(\"receive\",function(conn,payload) \r\n");
kkizirian 2:c708e2027970 235 SendCMD();
kkizirian 2:c708e2027970 236 read_line();
kkizirian 2:c708e2027970 237 wait(0.3);
kkizirian 0:ce60014510e5 238
kkizirian 2:c708e2027970 239 //print data to mbed
kkizirian 2:c708e2027970 240 strcpy(cmdbuff,"print(payload)\r\n");
kkizirian 2:c708e2027970 241 SendCMD();
kkizirian 2:c708e2027970 242 read_line();
kkizirian 2:c708e2027970 243 wait(0.2);
kkizirian 0:ce60014510e5 244
kkizirian 2:c708e2027970 245 //web page data
kkizirian 2:c708e2027970 246 strcpy(cmdbuff,"conn:send('<!DOCTYPE html><html><head><title>Class Scheduler!</title></head><body><h1>Class Scheduler</h1>')\r\n");
kkizirian 2:c708e2027970 247 SendCMD();
kkizirian 2:c708e2027970 248 read_line();
kkizirian 2:c708e2027970 249 wait(0.4);
kkizirian 2:c708e2027970 250 strcpy(cmdbuff,"conn:send('<p><div class = \"content\">Input your schedule below!</div></p>')\r\n");
kkizirian 2:c708e2027970 251 SendCMD();
kkizirian 2:c708e2027970 252 read_line();
kkizirian 2:c708e2027970 253 wait(0.2);
kkizirian 2:c708e2027970 254 strcpy(cmdbuff,"conn:send('<form method=\"POST\">')\r\n");
kkizirian 2:c708e2027970 255 SendCMD();
kkizirian 2:c708e2027970 256 read_line();
kkizirian 2:c708e2027970 257 wait(0.3);
kkizirian 2:c708e2027970 258 strcpy(cmdbuff, "conn:send('<select name=\"building\">')\r\n");
kkizirian 2:c708e2027970 259 SendCMD();
kkizirian 2:c708e2027970 260 read_line();
kkizirian 2:c708e2027970 261 wait(0.3);
kkizirian 2:c708e2027970 262 strcpy(cmdbuff, "conn:send('<option value =\"none\">None</option>')\r\n");
kkizirian 2:c708e2027970 263 SendCMD();
kkizirian 2:c708e2027970 264 read_line();
kkizirian 2:c708e2027970 265 wait(0.3);
kkizirian 2:c708e2027970 266 strcpy(cmdbuff,"conn:send('<option value=\"CLH\">Clough Undergraduate Learning Commons</option>')\r\n");
kkizirian 2:c708e2027970 267 SendCMD();
kkizirian 2:c708e2027970 268 read_line();
kkizirian 2:c708e2027970 269 wait(0.3);
kkizirian 2:c708e2027970 270 strcpy(cmdbuff,"conn:send('<option value=\"COC\">College of Computing</option>')\r\n");
kkizirian 2:c708e2027970 271 SendCMD();
kkizirian 2:c708e2027970 272 read_line();
kkizirian 2:c708e2027970 273 wait(0.3);
kkizirian 2:c708e2027970 274 strcpy(cmdbuff, "conn:send('<option value=\"KLS\">Klaus Advanced Computing Building</option>')\r\n");
kkizirian 2:c708e2027970 275 SendCMD();
kkizirian 2:c708e2027970 276 read_line();
kkizirian 2:c708e2027970 277 wait(0.3);
kkizirian 2:c708e2027970 278 strcpy(cmdbuff, "conn:send('<option value=\"VAN\">Van Leer</option></select>')\r\n");
kkizirian 2:c708e2027970 279 SendCMD();
kkizirian 2:c708e2027970 280 read_line();
kkizirian 2:c708e2027970 281 wait(0.3);
kkizirian 2:c708e2027970 282 strcpy(cmdbuff, "conn:send('<select name=\"hour\"><option value=\"01\">1</option><option value=\"02\">2</option>')\r\n");
kkizirian 2:c708e2027970 283 SendCMD();
kkizirian 2:c708e2027970 284 read_line();
kkizirian 2:c708e2027970 285 wait(.3);
kkizirian 2:c708e2027970 286 strcpy(cmdbuff, "conn:send('<option value=\"03\">3</option><option value=\"04\">4</option><option value=\"05\">5</option>')\r\n");
kkizirian 2:c708e2027970 287 SendCMD();
kkizirian 2:c708e2027970 288 read_line();
kkizirian 2:c708e2027970 289 wait(.3);
kkizirian 2:c708e2027970 290 strcpy(cmdbuff, "conn:send('<option value=\"06\">6</option><option value=\"07\">7</option><option value=\"08\">8</option>')\r\n");
kkizirian 2:c708e2027970 291 SendCMD();
kkizirian 2:c708e2027970 292 read_line();
kkizirian 2:c708e2027970 293 wait(0.3);
kkizirian 2:c708e2027970 294 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");
kkizirian 2:c708e2027970 295 SendCMD();
kkizirian 2:c708e2027970 296 read_line();
kkizirian 2:c708e2027970 297 wait(0.3);
kkizirian 2:c708e2027970 298 strcpy(cmdbuff, "conn:send('<select name=\"minute\"><option value=\"00\">00</option><option value=\"05\">05</option>')\r\n");
kkizirian 2:c708e2027970 299 SendCMD();
kkizirian 2:c708e2027970 300 read_line();
kkizirian 2:c708e2027970 301 wait(0.3);
kkizirian 2:c708e2027970 302 strcpy(cmdbuff, "conn:send('<option value=\"10\">10</option><option value=\"15\">15</option>')\r\n");
kkizirian 2:c708e2027970 303 SendCMD();
kkizirian 2:c708e2027970 304 read_line();
kkizirian 2:c708e2027970 305 wait(0.3);
kkizirian 2:c708e2027970 306 strcpy(cmdbuff, "conn:send('<option value=\"20\">20</option><option value=\"25\">25</option>')\r\n");
kkizirian 2:c708e2027970 307 SendCMD();
kkizirian 2:c708e2027970 308 read_line();
kkizirian 2:c708e2027970 309 wait(0.3);
kkizirian 2:c708e2027970 310 strcpy(cmdbuff, "conn:send('<option value=\"30\">30</option><option value=\"35\">35</option>')\r\n");
kkizirian 2:c708e2027970 311 SendCMD();
kkizirian 2:c708e2027970 312 read_line();
kkizirian 2:c708e2027970 313 wait(0.3);
kkizirian 2:c708e2027970 314 strcpy(cmdbuff, "conn:send('<option value=\"40\">40</option><option value=\"45\">45</option>')\r\n");
kkizirian 2:c708e2027970 315 SendCMD();
kkizirian 2:c708e2027970 316 read_line();
kkizirian 2:c708e2027970 317 wait(0.3);
kkizirian 2:c708e2027970 318 strcpy(cmdbuff, "conn:send('<option value=\"50\">50</option><option value=\"55\">55</option></select>')\r\n");
kkizirian 2:c708e2027970 319 SendCMD();
kkizirian 2:c708e2027970 320 read_line();
kkizirian 2:c708e2027970 321 wait(0.3);
kkizirian 2:c708e2027970 322 strcpy(cmdbuff, "conn:send('<select name=\"AMPM\"><option value=\"AM\">AM</option><option value=\"PM\">PM</option></select><br></br>')\r\n");
kkizirian 2:c708e2027970 323 SendCMD();
kkizirian 2:c708e2027970 324 read_line();
kkizirian 2:c708e2027970 325 wait(0.3);
kkizirian 0:ce60014510e5 326
kkizirian 2:c708e2027970 327 strcpy(cmdbuff,"conn:send('<p><input type=\"submit\" value=\"Add Class\"></form>')\r\n");
kkizirian 2:c708e2027970 328 SendCMD();
kkizirian 2:c708e2027970 329 read_line();
kkizirian 2:c708e2027970 330 wait(0.3);
kkizirian 2:c708e2027970 331 strcpy(cmdbuff, "conn:send('</body></html>')\r\n");
kkizirian 2:c708e2027970 332 SendCMD();
kkizirian 2:c708e2027970 333 read_line();
kkizirian 2:c708e2027970 334 wait(0.5);
kkizirian 2:c708e2027970 335 // end web page data
kkizirian 2:c708e2027970 336 strcpy(cmdbuff, "conn:on(\"sent\",function(conn) conn:close() end)\r\n"); // close current connection
kkizirian 2:c708e2027970 337 SendCMD();
kkizirian 2:c708e2027970 338 read_line();
kkizirian 2:c708e2027970 339 wait(0.3);
kkizirian 2:c708e2027970 340 strcpy(cmdbuff, "end)\r\n");
kkizirian 2:c708e2027970 341 SendCMD();
kkizirian 2:c708e2027970 342 read_line();
kkizirian 2:c708e2027970 343 wait(0.2);
kkizirian 0:ce60014510e5 344 strcpy(cmdbuff, "end)\r\n");
kkizirian 0:ce60014510e5 345 SendCMD();
kkizirian 0:ce60014510e5 346 read_line();
kkizirian 0:ce60014510e5 347 wait(0.2);
kkizirian 0:ce60014510e5 348
kkizirian 0:ce60014510e5 349 strcpy(cmdbuff, "tmr.alarm(0, 1000, 1, function()\r\n");
kkizirian 0:ce60014510e5 350 SendCMD();
kkizirian 0:ce60014510e5 351 read_line();
kkizirian 0:ce60014510e5 352 wait(0.2);
kkizirian 0:ce60014510e5 353 strcpy(cmdbuff, "if wifi.sta.getip() == nil then\r\n");
kkizirian 0:ce60014510e5 354 SendCMD();
kkizirian 0:ce60014510e5 355 read_line();
kkizirian 0:ce60014510e5 356 wait(0.2);
kkizirian 0:ce60014510e5 357 strcpy(cmdbuff, "print(\"Connecting to AP...\\n\")\r\n");
kkizirian 0:ce60014510e5 358 SendCMD();
kkizirian 0:ce60014510e5 359 read_line();
kkizirian 0:ce60014510e5 360 wait(0.2);
kkizirian 0:ce60014510e5 361 strcpy(cmdbuff, "else\r\n");
kkizirian 0:ce60014510e5 362 SendCMD();
kkizirian 0:ce60014510e5 363 read_line();
kkizirian 0:ce60014510e5 364 wait(0.2);
kkizirian 0:ce60014510e5 365 strcpy(cmdbuff, "ip, nm, gw=wifi.sta.getip()\r\n");
kkizirian 0:ce60014510e5 366 SendCMD();
kkizirian 0:ce60014510e5 367 read_line();
kkizirian 0:ce60014510e5 368 wait(0.2);
kkizirian 0:ce60014510e5 369 strcpy(cmdbuff,"print(\"IP Address: \",ip)\r\n");
kkizirian 0:ce60014510e5 370 SendCMD();
kkizirian 0:ce60014510e5 371 read_line();
kkizirian 0:ce60014510e5 372 wait(0.2);
kkizirian 0:ce60014510e5 373 strcpy(cmdbuff,"tmr.stop(0)\r\n");
kkizirian 0:ce60014510e5 374 SendCMD();
kkizirian 0:ce60014510e5 375 read_line();
kkizirian 0:ce60014510e5 376 wait(0.2);
kkizirian 0:ce60014510e5 377 strcpy(cmdbuff,"end\r\n");
kkizirian 0:ce60014510e5 378 SendCMD();
kkizirian 0:ce60014510e5 379 read_line();
kkizirian 0:ce60014510e5 380 wait(0.2);
kkizirian 0:ce60014510e5 381 strcpy(cmdbuff,"end)\r\n");
kkizirian 0:ce60014510e5 382 SendCMD();
kkizirian 0:ce60014510e5 383 read_line();
kkizirian 0:ce60014510e5 384 wait(0.2);
kkizirian 0:ce60014510e5 385
kkizirian 0:ce60014510e5 386 pc.printf("\n\n++++++++++ Ready ++++++++++\r\n\n");
kkizirian 0:ce60014510e5 387 }
kkizirian 0:ce60014510e5 388
kkizirian 0:ce60014510e5 389 // ESP Command data send
kkizirian 0:ce60014510e5 390 void SendCMD()
kkizirian 0:ce60014510e5 391 {
kkizirian 0:ce60014510e5 392 int i;
kkizirian 0:ce60014510e5 393 char temp_char;
kkizirian 0:ce60014510e5 394 bool empty;
kkizirian 0:ce60014510e5 395 i = 0;
kkizirian 0:ce60014510e5 396 // Start Critical Section - don't interrupt while changing global buffer variables
kkizirian 0:ce60014510e5 397 NVIC_DisableIRQ(UART1_IRQn);
kkizirian 0:ce60014510e5 398 empty = (tx_in == tx_out);
kkizirian 0:ce60014510e5 399 while ((i==0) || (cmdbuff[i-1] != '\n')) {
kkizirian 0:ce60014510e5 400 // Wait if buffer full
kkizirian 0:ce60014510e5 401 if (((tx_in + 1) % buffer_size) == tx_out) {
kkizirian 0:ce60014510e5 402 // End Critical Section - need to let interrupt routine empty buffer by sending
kkizirian 0:ce60014510e5 403 NVIC_EnableIRQ(UART1_IRQn);
kkizirian 0:ce60014510e5 404 while (((tx_in + 1) % buffer_size) == tx_out) {
kkizirian 0:ce60014510e5 405 }
kkizirian 0:ce60014510e5 406 // Start Critical Section - don't interrupt while changing global buffer variables
kkizirian 0:ce60014510e5 407 NVIC_DisableIRQ(UART1_IRQn);
kkizirian 0:ce60014510e5 408 }
kkizirian 0:ce60014510e5 409 tx_buffer[tx_in] = cmdbuff[i];
kkizirian 0:ce60014510e5 410 i++;
kkizirian 0:ce60014510e5 411 tx_in = (tx_in + 1) % buffer_size;
kkizirian 0:ce60014510e5 412 }
kkizirian 0:ce60014510e5 413 if (esp.writeable() && (empty)) {
kkizirian 0:ce60014510e5 414 temp_char = tx_buffer[tx_out];
kkizirian 0:ce60014510e5 415 tx_out = (tx_out + 1) % buffer_size;
kkizirian 0:ce60014510e5 416 // Send first character to start tx interrupts, if stopped
kkizirian 0:ce60014510e5 417 esp.putc(temp_char);
kkizirian 0:ce60014510e5 418 }
kkizirian 0:ce60014510e5 419 // End Critical Section
kkizirian 0:ce60014510e5 420 NVIC_EnableIRQ(UART1_IRQn);
kkizirian 0:ce60014510e5 421 return;
kkizirian 0:ce60014510e5 422 }
kkizirian 0:ce60014510e5 423
kkizirian 0:ce60014510e5 424 // Read a line from the large rx buffer from rx interrupt routine
kkizirian 2:c708e2027970 425 void read_line()
kkizirian 2:c708e2027970 426 {
kkizirian 0:ce60014510e5 427 int i;
kkizirian 0:ce60014510e5 428 i = 0;
kkizirian 0:ce60014510e5 429 // Start Critical Section - don't interrupt while changing global buffer variables
kkizirian 0:ce60014510e5 430 NVIC_DisableIRQ(UART1_IRQn);
kkizirian 0:ce60014510e5 431 // Loop reading rx buffer characters until end of line character
kkizirian 0:ce60014510e5 432 while ((i==0) || (rx_line[i-1] != '\r')) {
kkizirian 0:ce60014510e5 433 // Wait if buffer empty
kkizirian 0:ce60014510e5 434 if (rx_in == rx_out) {
kkizirian 0:ce60014510e5 435 // End Critical Section - need to allow rx interrupt to get new characters for buffer
kkizirian 0:ce60014510e5 436 NVIC_EnableIRQ(UART1_IRQn);
kkizirian 0:ce60014510e5 437 while (rx_in == rx_out) {
kkizirian 0:ce60014510e5 438 }
kkizirian 0:ce60014510e5 439 // Start Critical Section - don't interrupt while changing global buffer variables
kkizirian 0:ce60014510e5 440 NVIC_DisableIRQ(UART1_IRQn);
kkizirian 0:ce60014510e5 441 }
kkizirian 0:ce60014510e5 442 rx_line[i] = rx_buffer[rx_out];
kkizirian 0:ce60014510e5 443 i++;
kkizirian 0:ce60014510e5 444 rx_out = (rx_out + 1) % buffer_size;
kkizirian 0:ce60014510e5 445 }
kkizirian 0:ce60014510e5 446 // End Critical Section
kkizirian 0:ce60014510e5 447 NVIC_EnableIRQ(UART1_IRQn);
kkizirian 0:ce60014510e5 448 rx_line[i-1] = 0;
kkizirian 0:ce60014510e5 449
kkizirian 0:ce60014510e5 450 return;
kkizirian 0:ce60014510e5 451 }
kkizirian 0:ce60014510e5 452
kkizirian 0:ce60014510e5 453 // Interupt Routine to read in data from serial port
kkizirian 2:c708e2027970 454 void Rx_interrupt()
kkizirian 2:c708e2027970 455 {
kkizirian 0:ce60014510e5 456 DataRX=1;
kkizirian 0:ce60014510e5 457 // Loop just in case more than one character is in UART's receive FIFO buffer
kkizirian 0:ce60014510e5 458 // Stop if buffer full
kkizirian 0:ce60014510e5 459 while ((esp.readable()) && (((rx_in + 1) % buffer_size) != rx_out)) {
kkizirian 0:ce60014510e5 460 rx_buffer[rx_in] = esp.getc();
kkizirian 0:ce60014510e5 461 // Uncomment to Echo to USB serial to watch data flow
kkizirian 0:ce60014510e5 462 pc.putc(rx_buffer[rx_in]);
kkizirian 0:ce60014510e5 463 rx_in = (rx_in + 1) % buffer_size;
kkizirian 0:ce60014510e5 464 }
kkizirian 0:ce60014510e5 465 return;
kkizirian 0:ce60014510e5 466 }
kkizirian 0:ce60014510e5 467
kkizirian 0:ce60014510e5 468 // Interupt Routine to write out data to serial port
kkizirian 2:c708e2027970 469 void Tx_interrupt()
kkizirian 2:c708e2027970 470 {
kkizirian 0:ce60014510e5 471 // Loop to fill more than one character in UART's transmit FIFO buffer
kkizirian 0:ce60014510e5 472 // Stop if buffer empty
kkizirian 0:ce60014510e5 473 while ((esp.writeable()) && (tx_in != tx_out)) {
kkizirian 0:ce60014510e5 474 esp.putc(tx_buffer[tx_out]);
kkizirian 0:ce60014510e5 475 tx_out = (tx_out + 1) % buffer_size;
kkizirian 0:ce60014510e5 476 }
kkizirian 0:ce60014510e5 477 return;
kkizirian 0:ce60014510e5 478 }
kkizirian 0:ce60014510e5 479
kkizirian 2:c708e2027970 480 int addCourseToVector(vector<Course>& cVec, Course newCourse)
kkizirian 2:c708e2027970 481 {
kkizirian 0:ce60014510e5 482 int numIterations = 0;
kkizirian 0:ce60014510e5 483
kkizirian 0:ce60014510e5 484 if (cVec.size() == 0) {
kkizirian 0:ce60014510e5 485 cVec.push_back(newCourse);
kkizirian 0:ce60014510e5 486 return 1;
kkizirian 0:ce60014510e5 487 }
kkizirian 0:ce60014510e5 488
kkizirian 0:ce60014510e5 489 for (int i = 0; i < cVec.size(); i++) {
kkizirian 0:ce60014510e5 490 numIterations++;
kkizirian 0:ce60014510e5 491 if (cVec[i].getAMPM_toInt() < newCourse.getAMPM_toInt())
kkizirian 0:ce60014510e5 492 continue;
kkizirian 0:ce60014510e5 493 else if (newCourse.getAMPM_toInt() < cVec[i].getAMPM_toInt()) {
kkizirian 0:ce60014510e5 494 cVec.insert(cVec.begin()+i, newCourse);
kkizirian 0:ce60014510e5 495 return 1;
kkizirian 2:c708e2027970 496 } else if (cVec[i].getAMPM_toInt() == newCourse.getAMPM_toInt()) {
kkizirian 0:ce60014510e5 497 if (cVec[i].getHour_forCompare() < newCourse.getHour_forCompare())
kkizirian 0:ce60014510e5 498 continue;
kkizirian 0:ce60014510e5 499 else if (newCourse.getHour_forCompare() < cVec[i].getHour_forCompare()) {
kkizirian 0:ce60014510e5 500 cVec.insert(cVec.begin()+i, newCourse);
kkizirian 0:ce60014510e5 501 return 1;
kkizirian 2:c708e2027970 502 } else if (cVec[i].getHour_forCompare() == newCourse.getHour_forCompare()) {
kkizirian 0:ce60014510e5 503 if (cVec[i].getMinute() < newCourse.getMinute())
kkizirian 0:ce60014510e5 504 continue;
kkizirian 0:ce60014510e5 505 else if (newCourse.getMinute() < cVec[i].getMinute()) {
kkizirian 0:ce60014510e5 506 cVec.insert(cVec.begin()+i, newCourse);
kkizirian 0:ce60014510e5 507 return 1;
kkizirian 2:c708e2027970 508 } else if (cVec[i].getMinute() == newCourse.getMinute()) {
kkizirian 0:ce60014510e5 509 uLCD.cls();
kkizirian 0:ce60014510e5 510 uLCD.locate(0,0);
kkizirian 0:ce60014510e5 511 uLCD.printf("Can not add coure!");
kkizirian 0:ce60014510e5 512 uLCD.locate(0,1);
kkizirian 0:ce60014510e5 513 uLCD.printf("Course already at");
kkizirian 0:ce60014510e5 514 uLCD.locate(0,2);
kkizirian 0:ce60014510e5 515 uLCD.printf("%i:%s%s", newCourse.getHour(), newCourse.getMinute_toString(), newCourse.getAMPM());
kkizirian 0:ce60014510e5 516 wait(5);
kkizirian 0:ce60014510e5 517 return 0;
kkizirian 0:ce60014510e5 518 }
kkizirian 0:ce60014510e5 519 }
kkizirian 0:ce60014510e5 520 }
kkizirian 0:ce60014510e5 521 }
kkizirian 0:ce60014510e5 522
kkizirian 0:ce60014510e5 523 if (numIterations == cVec.size()) {
kkizirian 0:ce60014510e5 524 cVec.push_back(newCourse);
kkizirian 0:ce60014510e5 525 return 1;
kkizirian 0:ce60014510e5 526 }
kkizirian 0:ce60014510e5 527
kkizirian 0:ce60014510e5 528 return 0;
kkizirian 0:ce60014510e5 529 }
kkizirian 0:ce60014510e5 530
kkizirian 2:c708e2027970 531 void writeClassFile(vector<Course>& cVec)
kkizirian 2:c708e2027970 532 {
kkizirian 0:ce60014510e5 533 FILE *writeClass = fopen("/sd/classdir/classes.txt", "w");
kkizirian 0:ce60014510e5 534 if (writeClass != NULL) {
kkizirian 0:ce60014510e5 535 string line = "";
kkizirian 0:ce60014510e5 536 for (int i = 0; i < cVec.size(); i++) {
kkizirian 0:ce60014510e5 537 if (i != (cVec.size() - 1))
kkizirian 0:ce60014510e5 538 line = cVec[i].getFileString() + "\n";
kkizirian 0:ce60014510e5 539 else
kkizirian 0:ce60014510e5 540 line = cVec[i].getFileString();
kkizirian 0:ce60014510e5 541 fprintf(writeClass, line.c_str());
kkizirian 0:ce60014510e5 542 }
kkizirian 0:ce60014510e5 543 fclose(writeClass);
kkizirian 0:ce60014510e5 544 }
kkizirian 0:ce60014510e5 545 }
kkizirian 0:ce60014510e5 546
kkizirian 2:c708e2027970 547 void readClassFile(vector<Course>& cVec)
kkizirian 2:c708e2027970 548 {
kkizirian 0:ce60014510e5 549 cVec.clear();
kkizirian 0:ce60014510e5 550
kkizirian 0:ce60014510e5 551 FILE *readFp = fopen("/sd/classdir/classes.txt", "r");
kkizirian 0:ce60014510e5 552 char line[15];
kkizirian 0:ce60014510e5 553 char buildingBuf[4];
kkizirian 0:ce60014510e5 554 char hourBuf[3];
kkizirian 0:ce60014510e5 555 int hour;
kkizirian 0:ce60014510e5 556 char minuteBuf[3];
kkizirian 0:ce60014510e5 557 int minute;
kkizirian 0:ce60014510e5 558 char ampmBuf[3];
kkizirian 0:ce60014510e5 559 uLCD.cls();
kkizirian 0:ce60014510e5 560 uLCD.locate(0, 1);
kkizirian 0:ce60014510e5 561 uLCD.printf("Reading class file...");
kkizirian 2:c708e2027970 562
kkizirian 0:ce60014510e5 563 memset(buildingBuf, 0, sizeof(buildingBuf));
kkizirian 0:ce60014510e5 564 memset(hourBuf, 0, sizeof(hourBuf));
kkizirian 0:ce60014510e5 565 memset(minuteBuf, 0, sizeof(minuteBuf));
kkizirian 0:ce60014510e5 566 memset(ampmBuf, 0, sizeof(ampmBuf));
kkizirian 0:ce60014510e5 567 memset(line, 0, sizeof(line));
kkizirian 0:ce60014510e5 568
kkizirian 0:ce60014510e5 569 if (readFp == NULL)
kkizirian 0:ce60014510e5 570 return;
kkizirian 0:ce60014510e5 571 else {
kkizirian 0:ce60014510e5 572 while (!feof(readFp)) {
kkizirian 0:ce60014510e5 573 fgets(line, 15, readFp);
kkizirian 0:ce60014510e5 574 if(line[8] == NULL)
kkizirian 0:ce60014510e5 575 continue;
kkizirian 0:ce60014510e5 576 memcpy(buildingBuf, line, 3);
kkizirian 0:ce60014510e5 577 memcpy(hourBuf, &line[4], 2);
kkizirian 0:ce60014510e5 578 memcpy(minuteBuf, &line[7], 2);
kkizirian 0:ce60014510e5 579 memcpy(ampmBuf, &line[10], 2);
kkizirian 0:ce60014510e5 580
kkizirian 0:ce60014510e5 581 string building = buildingBuf;
kkizirian 0:ce60014510e5 582 hour = atoi(hourBuf);
kkizirian 0:ce60014510e5 583 minute = atoi(minuteBuf);
kkizirian 0:ce60014510e5 584 string ampm = ampmBuf;
kkizirian 0:ce60014510e5 585
kkizirian 0:ce60014510e5 586 Course temp(building, hour, minute, ampm);
kkizirian 0:ce60014510e5 587 cVec.push_back(temp);
kkizirian 0:ce60014510e5 588 }
kkizirian 0:ce60014510e5 589 }
kkizirian 0:ce60014510e5 590 fclose(readFp);
kkizirian 0:ce60014510e5 591 return;
kkizirian 2:c708e2027970 592 }
kkizirian 2:c708e2027970 593
kkizirian 2:c708e2027970 594 void displayCourseVec()
kkizirian 2:c708e2027970 595 {
kkizirian 2:c708e2027970 596 if (courseVec.size() == 0) {
kkizirian 2:c708e2027970 597 uLCD.cls();
kkizirian 2:c708e2027970 598 uLCD.locate(0,0);
kkizirian 2:c708e2027970 599 uLCD.printf("No classes input!");
kkizirian 2:c708e2027970 600 uLCD.locate(0,1);
kkizirian 2:c708e2027970 601 uLCD.printf("To input classes \nGo to:");
kkizirian 2:c708e2027970 602 uLCD.locate(0,4);
kkizirian 2:c708e2027970 603 uLCD.printf("%s", ip_line);
kkizirian 2:c708e2027970 604 } else {
kkizirian 2:c708e2027970 605 uLCD.cls();
kkizirian 2:c708e2027970 606 uLCD.locate(0,1);
kkizirian 2:c708e2027970 607 for (int i = 0; i < courseVec.size(); i++) {
kkizirian 2:c708e2027970 608 uLCD.locate(0, i);
kkizirian 2:c708e2027970 609 uLCD.printf("%s", courseVec[i].getDisplayString());
kkizirian 2:c708e2027970 610 }
kkizirian 2:c708e2027970 611 }
kkizirian 0:ce60014510e5 612 }