Final Edit

Dependencies:   4DGL-uLCD-SE LSM9DS1_Library_cal SDFileSystem mbed wave_player

Fork of 4180Lab_4 by Rahul Maran

Committer:
Priunsh_N
Date:
Wed Nov 02 21:50:44 2016 +0000
Revision:
3:6714b95437b0
Parent:
2:c7779da25bdb
Final Edit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Priunsh_N 1:bbd83a3a8372 1 #include "Webpage.h"
Priunsh_N 2:c7779da25bdb 2 #include "mbed.h"
Priunsh_N 2:c7779da25bdb 3
Priunsh_N 2:c7779da25bdb 4 DigitalOut led1(LED1);
Priunsh_N 2:c7779da25bdb 5 DigitalOut led2(LED2);
Priunsh_N 2:c7779da25bdb 6 DigitalOut led3(LED3);
Priunsh_N 2:c7779da25bdb 7 DigitalOut led4(LED4);
Priunsh_N 2:c7779da25bdb 8
Priunsh_N 2:c7779da25bdb 9 Serial _pc(USBTX, USBRX);
Priunsh_N 2:c7779da25bdb 10 // some test values to show on web page
Priunsh_N 2:c7779da25bdb 11 AnalogIn Ain1(p18);
Priunsh_N 2:c7779da25bdb 12 AnalogIn Ain2(p19);
Priunsh_N 2:c7779da25bdb 13
Priunsh_N 2:c7779da25bdb 14 char ssid[32] = "GTother"; // enter WiFi router ssid inside the quotes
Priunsh_N 2:c7779da25bdb 15 char pwd [32] = "GeorgeP@1927"; // enter WiFi router password inside the quotes
Priunsh_N 2:c7779da25bdb 16 float temperature, AdcIn, Ht;
Priunsh_N 2:c7779da25bdb 17 float R1=100000, R2=10000; // resistor values to give a 10:1 reduction of measured AnalogIn voltage
Priunsh_N 2:c7779da25bdb 18 char Vcc[10];
Priunsh_N 2:c7779da25bdb 19 char Temp[10];
Priunsh_N 2:c7779da25bdb 20 // things for sending/receiving data over serial
Priunsh_N 2:c7779da25bdb 21 volatile int tx_in=0;
Priunsh_N 2:c7779da25bdb 22 volatile int tx_out=0;
Priunsh_N 2:c7779da25bdb 23 volatile int rx_in=0;
Priunsh_N 2:c7779da25bdb 24 volatile int rx_out=0;
Priunsh_N 2:c7779da25bdb 25 const int buffer_size = 4095;
Priunsh_N 2:c7779da25bdb 26 char tx_buffer[buffer_size+1];
Priunsh_N 2:c7779da25bdb 27 char rx_buffer[buffer_size+1];
Priunsh_N 2:c7779da25bdb 28
Priunsh_N 2:c7779da25bdb 29 bool playSong = false;
Priunsh_N 2:c7779da25bdb 30
Priunsh_N 2:c7779da25bdb 31 int DataRX;
Priunsh_N 2:c7779da25bdb 32 int updateFlag;
Priunsh_N 2:c7779da25bdb 33 int count = 0;
Priunsh_N 2:c7779da25bdb 34 int activity = 0;
Priunsh_N 2:c7779da25bdb 35 char cmdbuff[1024];
Priunsh_N 2:c7779da25bdb 36 char replybuff[4096];
Priunsh_N 2:c7779da25bdb 37 char webdata[4096]; // This may need to be bigger depending on WEB browser used
Priunsh_N 2:c7779da25bdb 38 char webbuff[4096]; // Currently using 1986 characters, Increase this if more web page data added
Priunsh_N 2:c7779da25bdb 39 char timebuf[30];
Priunsh_N 2:c7779da25bdb 40 void SendCMD(),getreply(),ReadWebData(),startserver();
Priunsh_N 2:c7779da25bdb 41 void gettime(),setRTC(),gettemp(),getbattery();
Priunsh_N 2:c7779da25bdb 42 char rx_line[1024];
Priunsh_N 2:c7779da25bdb 43 int port =80; // set server port
Priunsh_N 2:c7779da25bdb 44 int SERVtimeout =5; // set server timeout in seconds in case link breaks.
Priunsh_N 2:c7779da25bdb 45 struct tm t;
Priunsh_N 2:c7779da25bdb 46 // manual set RTC values
Priunsh_N 2:c7779da25bdb 47 int minute =00; // 0-59
Priunsh_N 2:c7779da25bdb 48 int hour =12; // 2-23
Priunsh_N 2:c7779da25bdb 49 int dayofmonth =26; // 1-31
Priunsh_N 2:c7779da25bdb 50 int month =8; // 1-12
Priunsh_N 2:c7779da25bdb 51 int year =15; // last 2 digits
Priunsh_N 2:c7779da25bdb 52
Priunsh_N 2:c7779da25bdb 53
Priunsh_N 2:c7779da25bdb 54 Webpage::Webpage(PinName tx, PinName rx)
Priunsh_N 2:c7779da25bdb 55 : esp(tx, rx) {}
Priunsh_N 2:c7779da25bdb 56
Priunsh_N 2:c7779da25bdb 57 bool Webpage::getPlay() {
Priunsh_N 2:c7779da25bdb 58 return playSong;
Priunsh_N 2:c7779da25bdb 59 }
Priunsh_N 1:bbd83a3a8372 60
Priunsh_N 2:c7779da25bdb 61 void Webpage::updateOutput(int activitylvl) {
Priunsh_N 2:c7779da25bdb 62 gettime();
Priunsh_N 2:c7779da25bdb 63 gettemp();
Priunsh_N 2:c7779da25bdb 64 getbattery();
Priunsh_N 2:c7779da25bdb 65 count++;
Priunsh_N 2:c7779da25bdb 66 activity = activitylvl;
Priunsh_N 2:c7779da25bdb 67 // send new values
Priunsh_N 2:c7779da25bdb 68 sprintf(cmdbuff, "count,activity,time,analog1,analog2=%d,%d,\"%s\",\"%s\",\"%s\"\r\n",count, activity, timebuf,Temp,Vcc);
Priunsh_N 2:c7779da25bdb 69 SendCMD();
Priunsh_N 2:c7779da25bdb 70 getreply();
Priunsh_N 2:c7779da25bdb 71 updateFlag = 0;
Priunsh_N 2:c7779da25bdb 72 }
Priunsh_N 2:c7779da25bdb 73
Priunsh_N 2:c7779da25bdb 74 void Webpage::update() {
Priunsh_N 2:c7779da25bdb 75 if(DataRX==1) {
Priunsh_N 2:c7779da25bdb 76 ReadWebData();
Priunsh_N 2:c7779da25bdb 77 esp.attach(this, &Webpage::Rx_interrupt, Serial::RxIrq);
Priunsh_N 2:c7779da25bdb 78 }
Priunsh_N 2:c7779da25bdb 79 if (updateFlag == 1) {
Priunsh_N 2:c7779da25bdb 80 gettime();
Priunsh_N 2:c7779da25bdb 81 gettemp();
Priunsh_N 2:c7779da25bdb 82 getbattery();
Priunsh_N 2:c7779da25bdb 83 count++;
Priunsh_N 2:c7779da25bdb 84 // send new values
Priunsh_N 2:c7779da25bdb 85 sprintf(cmdbuff, "count,activity,time,analog1,analog2=%d, %d,\"%s\",\"%s\",\"%s\"\r\n",count, activity, timebuf,Temp,Vcc);
Priunsh_N 2:c7779da25bdb 86 SendCMD();
Priunsh_N 2:c7779da25bdb 87 getreply();
Priunsh_N 2:c7779da25bdb 88 updateFlag = 0;
Priunsh_N 2:c7779da25bdb 89 }
Priunsh_N 2:c7779da25bdb 90 }
Priunsh_N 2:c7779da25bdb 91
Priunsh_N 2:c7779da25bdb 92 void Webpage::init() {
Priunsh_N 2:c7779da25bdb 93 _pc.baud(9600);
Priunsh_N 2:c7779da25bdb 94 esp.baud(9600);
Priunsh_N 2:c7779da25bdb 95 led1=1,led2=0,led3=0, led4=0;
Priunsh_N 2:c7779da25bdb 96 // Setup a serial interrupt function to receive data
Priunsh_N 2:c7779da25bdb 97 esp.attach(this, &Webpage::Rx_interrupt, Serial::RxIrq);
Priunsh_N 2:c7779da25bdb 98 // Setup a serial interrupt function to transmit data
Priunsh_N 2:c7779da25bdb 99 esp.attach(this, &Webpage::Tx_interrupt, Serial::TxIrq);
Priunsh_N 2:c7779da25bdb 100 if (time(NULL) < 1420070400) {
Priunsh_N 2:c7779da25bdb 101 setRTC();
Priunsh_N 2:c7779da25bdb 102 }
Priunsh_N 2:c7779da25bdb 103 startserver();
Priunsh_N 2:c7779da25bdb 104 DataRX=0;
Priunsh_N 2:c7779da25bdb 105 count=0;
Priunsh_N 2:c7779da25bdb 106 }
Priunsh_N 2:c7779da25bdb 107 void Webpage::ReadWebData()
Priunsh_N 2:c7779da25bdb 108 {
Priunsh_N 2:c7779da25bdb 109 wait_ms(200);
Priunsh_N 2:c7779da25bdb 110 esp.attach(NULL,Serial::RxIrq);
Priunsh_N 2:c7779da25bdb 111 DataRX=0;
Priunsh_N 2:c7779da25bdb 112 memset(webdata, '\0', sizeof(webdata));
Priunsh_N 2:c7779da25bdb 113 strcpy(webdata, rx_buffer);
Priunsh_N 2:c7779da25bdb 114 memset(rx_buffer, '\0', sizeof(rx_buffer));
Priunsh_N 2:c7779da25bdb 115 rx_in = 0;
Priunsh_N 2:c7779da25bdb 116 rx_out = 0;
Priunsh_N 2:c7779da25bdb 117 // check web data for form information
Priunsh_N 2:c7779da25bdb 118 if( strstr(webdata, "check=playv") != NULL ) {
Priunsh_N 2:c7779da25bdb 119 led1=!led1;
Priunsh_N 2:c7779da25bdb 120 playSong = !playSong;
Priunsh_N 2:c7779da25bdb 121 }
Priunsh_N 2:c7779da25bdb 122 // if( strstr(webdata, "check=led2v") != NULL ) {
Priunsh_N 2:c7779da25bdb 123 // led2=!led2;
Priunsh_N 2:c7779da25bdb 124 // }
Priunsh_N 2:c7779da25bdb 125 // if( strstr(webdata, "check=led3v") != NULL ) {
Priunsh_N 2:c7779da25bdb 126 // led3=!led3;
Priunsh_N 2:c7779da25bdb 127 // }
Priunsh_N 2:c7779da25bdb 128 // if( strstr(webdata, "check=led4v") != NULL ) {
Priunsh_N 2:c7779da25bdb 129 // led4=!led4;
Priunsh_N 2:c7779da25bdb 130 // }
Priunsh_N 2:c7779da25bdb 131 if( strstr(webdata, "POST") != NULL ) { // set update flag if POST request
Priunsh_N 2:c7779da25bdb 132 updateFlag=1;
Priunsh_N 2:c7779da25bdb 133 }
Priunsh_N 2:c7779da25bdb 134 if( strstr(webdata, "GET") != NULL && strstr(webdata, "favicon") == NULL ) { // set update flag for GET request but do not want to update for favicon requests
Priunsh_N 2:c7779da25bdb 135 updateFlag=1;
Priunsh_N 2:c7779da25bdb 136 }
Priunsh_N 1:bbd83a3a8372 137 }
Priunsh_N 2:c7779da25bdb 138
Priunsh_N 2:c7779da25bdb 139 void Webpage::startserver()
Priunsh_N 1:bbd83a3a8372 140 {
Priunsh_N 2:c7779da25bdb 141 gettime();
Priunsh_N 2:c7779da25bdb 142 gettemp();
Priunsh_N 2:c7779da25bdb 143 getbattery();
Priunsh_N 2:c7779da25bdb 144 _pc.printf("++++++++++ Resetting ESP ++++++++++\r\n");
Priunsh_N 2:c7779da25bdb 145 strcpy(cmdbuff,"node.restart()\r\n");
Priunsh_N 2:c7779da25bdb 146 SendCMD();
Priunsh_N 2:c7779da25bdb 147 wait(2);
Priunsh_N 2:c7779da25bdb 148 getreply();
Priunsh_N 2:c7779da25bdb 149
Priunsh_N 2:c7779da25bdb 150 _pc.printf("\n++++++++++ Starting Server ++++++++++\r\n> ");
Priunsh_N 2:c7779da25bdb 151
Priunsh_N 2:c7779da25bdb 152 // initial values
Priunsh_N 2:c7779da25bdb 153 sprintf(cmdbuff, "count,activity,time,analog1,analog2=0,0,\"%s\",\"%s\",\"%s\"\r\n",timebuf,Temp,Vcc);
Priunsh_N 2:c7779da25bdb 154 SendCMD();
Priunsh_N 2:c7779da25bdb 155 getreply();
Priunsh_N 2:c7779da25bdb 156 wait(0.5);
Priunsh_N 2:c7779da25bdb 157
Priunsh_N 2:c7779da25bdb 158 //create server
Priunsh_N 2:c7779da25bdb 159 sprintf(cmdbuff, "srv=net.createServer(net.TCP,%d)\r\n",SERVtimeout);
Priunsh_N 2:c7779da25bdb 160 SendCMD();
Priunsh_N 2:c7779da25bdb 161 getreply();
Priunsh_N 2:c7779da25bdb 162 wait(0.5);
Priunsh_N 2:c7779da25bdb 163 strcpy(cmdbuff,"srv:listen(80,function(conn)\r\n");
Priunsh_N 2:c7779da25bdb 164 SendCMD();
Priunsh_N 2:c7779da25bdb 165 getreply();
Priunsh_N 2:c7779da25bdb 166 wait(0.3);
Priunsh_N 2:c7779da25bdb 167 strcpy(cmdbuff,"conn:on(\"receive\",function(conn,payload) \r\n");
Priunsh_N 2:c7779da25bdb 168 SendCMD();
Priunsh_N 2:c7779da25bdb 169 getreply();
Priunsh_N 2:c7779da25bdb 170 wait(0.3);
Priunsh_N 2:c7779da25bdb 171
Priunsh_N 2:c7779da25bdb 172 //print data to mbed
Priunsh_N 2:c7779da25bdb 173 strcpy(cmdbuff,"print(payload)\r\n");
Priunsh_N 2:c7779da25bdb 174 SendCMD();
Priunsh_N 2:c7779da25bdb 175 getreply();
Priunsh_N 2:c7779da25bdb 176 wait(0.2);
Priunsh_N 2:c7779da25bdb 177
Priunsh_N 2:c7779da25bdb 178 //web page data
Priunsh_N 2:c7779da25bdb 179 strcpy(cmdbuff,"conn:send('<!DOCTYPE html><html><body><h1><center>Naptime!</center></h1>')\r\n");
Priunsh_N 2:c7779da25bdb 180 SendCMD();
Priunsh_N 2:c7779da25bdb 181 getreply();
Priunsh_N 2:c7779da25bdb 182 wait(0.4);
Priunsh_N 2:c7779da25bdb 183 strcpy(cmdbuff,"conn:send('<p><center>~Keep track of baby\\'s activity at night, even play a soothing lullaby~</center></p><hr>')\r\n");
Priunsh_N 2:c7779da25bdb 184 SendCMD();
Priunsh_N 2:c7779da25bdb 185 getreply();
Priunsh_N 2:c7779da25bdb 186 wait(0.2);
Priunsh_N 2:c7779da25bdb 187 //strcpy(cmdbuff,"conn:send('Battery Voltage: '..analog1..' V<br>Analog 2: '..analog2..' V<br><hr>')\r\n");
Priunsh_N 2:c7779da25bdb 188 // SendCMD();
Priunsh_N 2:c7779da25bdb 189 // getreply();
Priunsh_N 2:c7779da25bdb 190 // wait(0.3);
Priunsh_N 2:c7779da25bdb 191 strcpy(cmdbuff,"conn:send('<center>Activity Level: '..activity..'</center>')\r\n");
Priunsh_N 2:c7779da25bdb 192 SendCMD();
Priunsh_N 2:c7779da25bdb 193 getreply();
Priunsh_N 2:c7779da25bdb 194 wait(0.3);
Priunsh_N 2:c7779da25bdb 195 strcpy(cmdbuff,"conn:send('<form method=\"POST\"')\r\n");
Priunsh_N 2:c7779da25bdb 196 SendCMD();
Priunsh_N 2:c7779da25bdb 197 getreply();
Priunsh_N 2:c7779da25bdb 198 wait(0.3);
Priunsh_N 2:c7779da25bdb 199 strcpy(cmdbuff, "conn:send('<p><center><input type=\"checkbox\" name=\"check\" value=\"playv\"> Toggle Music')\r\n");
Priunsh_N 2:c7779da25bdb 200 SendCMD();
Priunsh_N 2:c7779da25bdb 201 getreply();
Priunsh_N 2:c7779da25bdb 202 wait(0.3);
Priunsh_N 2:c7779da25bdb 203 //strcpy(cmdbuff, "conn:send('<p><input type=\"checkbox\" name=\"check\" value=\"led2v\"> flip LED2')\r\n");
Priunsh_N 2:c7779da25bdb 204 // SendCMD();
Priunsh_N 2:c7779da25bdb 205 // getreply();
Priunsh_N 2:c7779da25bdb 206 // wait(0.3);
Priunsh_N 2:c7779da25bdb 207 // strcpy(cmdbuff, "conn:send('<p><input type=\"checkbox\" name=\"check\" value=\"led3v\"> flip LED3')\r\n");
Priunsh_N 2:c7779da25bdb 208 // SendCMD();
Priunsh_N 2:c7779da25bdb 209 // getreply();
Priunsh_N 2:c7779da25bdb 210 // wait(0.3);
Priunsh_N 2:c7779da25bdb 211 // strcpy(cmdbuff, "conn:send('<p><input type=\"checkbox\" name=\"check\" value=\"led4v\"> flip LED4')\r\n");
Priunsh_N 2:c7779da25bdb 212 // SendCMD();
Priunsh_N 2:c7779da25bdb 213 // getreply();
Priunsh_N 2:c7779da25bdb 214 // wait(0.3);
Priunsh_N 2:c7779da25bdb 215 strcpy(cmdbuff,"conn:send('<p><center><input type=\"submit\" value=\"Send\"></form>')\r\n");
Priunsh_N 2:c7779da25bdb 216 SendCMD();
Priunsh_N 2:c7779da25bdb 217 getreply();
Priunsh_N 2:c7779da25bdb 218 wait(0.3);
Priunsh_N 2:c7779da25bdb 219 strcpy(cmdbuff, "conn:send('<p><h2>How to use:</h2>Select the checkbox and hit send to play music')\r\n");
Priunsh_N 2:c7779da25bdb 220 SendCMD();
Priunsh_N 2:c7779da25bdb 221 getreply();
Priunsh_N 2:c7779da25bdb 222 wait(0.5);
Priunsh_N 2:c7779da25bdb 223 strcpy(cmdbuff,"conn:send('<hr><center>Updates: '..count..'</center>')\r\n");
Priunsh_N 2:c7779da25bdb 224 SendCMD();
Priunsh_N 2:c7779da25bdb 225 getreply();
Priunsh_N 2:c7779da25bdb 226 wait(0.2);
Priunsh_N 2:c7779da25bdb 227 strcpy(cmdbuff,"conn:send('<center>Last update (based on mbed RTC time): '..time..'</center></body></html>')\r\n");
Priunsh_N 2:c7779da25bdb 228 SendCMD();
Priunsh_N 2:c7779da25bdb 229 getreply();
Priunsh_N 2:c7779da25bdb 230 wait(0.4);
Priunsh_N 2:c7779da25bdb 231 //end web page data
Priunsh_N 2:c7779da25bdb 232 strcpy(cmdbuff, "conn:on(\"sent\",function(conn) conn:close() end)\r\n"); // close current connection
Priunsh_N 2:c7779da25bdb 233 SendCMD();
Priunsh_N 2:c7779da25bdb 234 getreply();
Priunsh_N 2:c7779da25bdb 235 wait(0.3);
Priunsh_N 2:c7779da25bdb 236 strcpy(cmdbuff, "end)\r\n");
Priunsh_N 2:c7779da25bdb 237 SendCMD();
Priunsh_N 2:c7779da25bdb 238 getreply();
Priunsh_N 2:c7779da25bdb 239 wait(0.2);
Priunsh_N 2:c7779da25bdb 240 strcpy(cmdbuff, "end)\r\n");
Priunsh_N 2:c7779da25bdb 241 SendCMD();
Priunsh_N 2:c7779da25bdb 242 getreply();
Priunsh_N 2:c7779da25bdb 243 wait(0.2);
Priunsh_N 2:c7779da25bdb 244
Priunsh_N 2:c7779da25bdb 245 strcpy(cmdbuff, "tmr.alarm(0, 1000, 1, function()\r\n");
Priunsh_N 2:c7779da25bdb 246 SendCMD();
Priunsh_N 2:c7779da25bdb 247 getreply();
Priunsh_N 2:c7779da25bdb 248 wait(0.2);
Priunsh_N 2:c7779da25bdb 249 strcpy(cmdbuff, "if wifi.sta.getip() == nil then\r\n");
Priunsh_N 2:c7779da25bdb 250 SendCMD();
Priunsh_N 2:c7779da25bdb 251 getreply();
Priunsh_N 2:c7779da25bdb 252 wait(0.2);
Priunsh_N 2:c7779da25bdb 253 strcpy(cmdbuff, "print(\"Connecting to AP...\\n\")\r\n");
Priunsh_N 2:c7779da25bdb 254 SendCMD();
Priunsh_N 2:c7779da25bdb 255 getreply();
Priunsh_N 2:c7779da25bdb 256 wait(0.2);
Priunsh_N 2:c7779da25bdb 257 strcpy(cmdbuff, "else\r\n");
Priunsh_N 2:c7779da25bdb 258 SendCMD();
Priunsh_N 2:c7779da25bdb 259 getreply();
Priunsh_N 2:c7779da25bdb 260 wait(0.2);
Priunsh_N 2:c7779da25bdb 261 strcpy(cmdbuff, "ip, nm, gw=wifi.sta.getip()\r\n");
Priunsh_N 2:c7779da25bdb 262 SendCMD();
Priunsh_N 2:c7779da25bdb 263 getreply();
Priunsh_N 2:c7779da25bdb 264 wait(0.2);
Priunsh_N 2:c7779da25bdb 265 strcpy(cmdbuff,"print(\"IP Address: \",ip)\r\n");
Priunsh_N 2:c7779da25bdb 266 SendCMD();
Priunsh_N 2:c7779da25bdb 267 getreply();
Priunsh_N 2:c7779da25bdb 268 wait(0.2);
Priunsh_N 2:c7779da25bdb 269 strcpy(cmdbuff,"tmr.stop(0)\r\n");
Priunsh_N 2:c7779da25bdb 270 SendCMD();
Priunsh_N 2:c7779da25bdb 271 getreply();
Priunsh_N 2:c7779da25bdb 272 wait(0.2);
Priunsh_N 2:c7779da25bdb 273 strcpy(cmdbuff,"end\r\n");
Priunsh_N 2:c7779da25bdb 274 SendCMD();
Priunsh_N 2:c7779da25bdb 275 getreply();
Priunsh_N 2:c7779da25bdb 276 wait(0.2);
Priunsh_N 2:c7779da25bdb 277 strcpy(cmdbuff,"end)\r\n");
Priunsh_N 2:c7779da25bdb 278 SendCMD();
Priunsh_N 2:c7779da25bdb 279 getreply();
Priunsh_N 2:c7779da25bdb 280 wait(0.2);
Priunsh_N 2:c7779da25bdb 281
Priunsh_N 2:c7779da25bdb 282 _pc.printf("\n\n++++++++++ Ready ++++++++++\r\n\n");
Priunsh_N 2:c7779da25bdb 283 }
Priunsh_N 2:c7779da25bdb 284
Priunsh_N 2:c7779da25bdb 285 void Webpage::SendCMD()
Priunsh_N 2:c7779da25bdb 286 {
Priunsh_N 2:c7779da25bdb 287 int i;
Priunsh_N 2:c7779da25bdb 288 char temp_char;
Priunsh_N 2:c7779da25bdb 289 bool empty;
Priunsh_N 2:c7779da25bdb 290 i = 0;
Priunsh_N 2:c7779da25bdb 291 // Start Critical Section - don't interrupt while changing global buffer variables
Priunsh_N 2:c7779da25bdb 292 NVIC_DisableIRQ(UART1_IRQn);
Priunsh_N 2:c7779da25bdb 293 empty = (tx_in == tx_out);
Priunsh_N 2:c7779da25bdb 294 while ((i==0) || (cmdbuff[i-1] != '\n')) {
Priunsh_N 2:c7779da25bdb 295 // Wait if buffer full
Priunsh_N 2:c7779da25bdb 296 if (((tx_in + 1) % buffer_size) == tx_out) {
Priunsh_N 2:c7779da25bdb 297 // End Critical Section - need to let interrupt routine empty buffer by sending
Priunsh_N 2:c7779da25bdb 298 NVIC_EnableIRQ(UART1_IRQn);
Priunsh_N 2:c7779da25bdb 299 while (((tx_in + 1) % buffer_size) == tx_out) {
Priunsh_N 2:c7779da25bdb 300 }
Priunsh_N 2:c7779da25bdb 301 // Start Critical Section - don't interrupt while changing global buffer variables
Priunsh_N 2:c7779da25bdb 302 NVIC_DisableIRQ(UART1_IRQn);
Priunsh_N 2:c7779da25bdb 303 }
Priunsh_N 2:c7779da25bdb 304 tx_buffer[tx_in] = cmdbuff[i];
Priunsh_N 2:c7779da25bdb 305 i++;
Priunsh_N 2:c7779da25bdb 306 tx_in = (tx_in + 1) % buffer_size;
Priunsh_N 1:bbd83a3a8372 307 }
Priunsh_N 2:c7779da25bdb 308 if (esp.writeable() && (empty)) {
Priunsh_N 2:c7779da25bdb 309 temp_char = tx_buffer[tx_out];
Priunsh_N 2:c7779da25bdb 310 tx_out = (tx_out + 1) % buffer_size;
Priunsh_N 2:c7779da25bdb 311 // Send first character to start tx interrupts, if stopped
Priunsh_N 2:c7779da25bdb 312 esp.putc(temp_char);
Priunsh_N 2:c7779da25bdb 313 }
Priunsh_N 2:c7779da25bdb 314 // End Critical Section
Priunsh_N 2:c7779da25bdb 315 NVIC_EnableIRQ(UART1_IRQn);
Priunsh_N 2:c7779da25bdb 316 return;
Priunsh_N 2:c7779da25bdb 317 }
Priunsh_N 2:c7779da25bdb 318
Priunsh_N 2:c7779da25bdb 319 void Webpage::getreply()
Priunsh_N 2:c7779da25bdb 320 {
Priunsh_N 2:c7779da25bdb 321 read_line();
Priunsh_N 2:c7779da25bdb 322 sscanf(rx_line,replybuff);
Priunsh_N 2:c7779da25bdb 323 }
Priunsh_N 2:c7779da25bdb 324
Priunsh_N 2:c7779da25bdb 325 void Webpage::read_line() {
Priunsh_N 2:c7779da25bdb 326 int i;
Priunsh_N 2:c7779da25bdb 327 i = 0;
Priunsh_N 2:c7779da25bdb 328 // Start Critical Section - don't interrupt while changing global buffer variables
Priunsh_N 2:c7779da25bdb 329 NVIC_DisableIRQ(UART1_IRQn);
Priunsh_N 2:c7779da25bdb 330 // Loop reading rx buffer characters until end of line character
Priunsh_N 2:c7779da25bdb 331 while ((i==0) || (rx_line[i-1] != '\r')) {
Priunsh_N 2:c7779da25bdb 332 // Wait if buffer empty
Priunsh_N 2:c7779da25bdb 333 if (rx_in == rx_out) {
Priunsh_N 2:c7779da25bdb 334 // End Critical Section - need to allow rx interrupt to get new characters for buffer
Priunsh_N 2:c7779da25bdb 335 NVIC_EnableIRQ(UART1_IRQn);
Priunsh_N 2:c7779da25bdb 336 while (rx_in == rx_out) {
Priunsh_N 2:c7779da25bdb 337 }
Priunsh_N 2:c7779da25bdb 338 // Start Critical Section - don't interrupt while changing global buffer variables
Priunsh_N 2:c7779da25bdb 339 NVIC_DisableIRQ(UART1_IRQn);
Priunsh_N 2:c7779da25bdb 340 }
Priunsh_N 2:c7779da25bdb 341 rx_line[i] = rx_buffer[rx_out];
Priunsh_N 2:c7779da25bdb 342 i++;
Priunsh_N 2:c7779da25bdb 343 rx_out = (rx_out + 1) % buffer_size;
Priunsh_N 2:c7779da25bdb 344 }
Priunsh_N 2:c7779da25bdb 345 // End Critical Section
Priunsh_N 2:c7779da25bdb 346 NVIC_EnableIRQ(UART1_IRQn);
Priunsh_N 2:c7779da25bdb 347 rx_line[i-1] = 0;
Priunsh_N 2:c7779da25bdb 348 return;
Priunsh_N 1:bbd83a3a8372 349 }
Priunsh_N 1:bbd83a3a8372 350
Priunsh_N 1:bbd83a3a8372 351
Priunsh_N 2:c7779da25bdb 352 // Interupt Routine to read in data from serial port
Priunsh_N 2:c7779da25bdb 353 void Webpage::Rx_interrupt() {
Priunsh_N 2:c7779da25bdb 354 DataRX=1;
Priunsh_N 2:c7779da25bdb 355 //led3=1;
Priunsh_N 2:c7779da25bdb 356 // Loop just in case more than one character is in UART's receive FIFO buffer
Priunsh_N 2:c7779da25bdb 357 // Stop if buffer full
Priunsh_N 2:c7779da25bdb 358 while ((esp.readable()) && (((rx_in + 1) % buffer_size) != rx_out)) {
Priunsh_N 2:c7779da25bdb 359 rx_buffer[rx_in] = esp.getc();
Priunsh_N 2:c7779da25bdb 360 // Uncomment to Echo to USB serial to watch data flow
Priunsh_N 2:c7779da25bdb 361 _pc.putc(rx_buffer[rx_in]);
Priunsh_N 2:c7779da25bdb 362 rx_in = (rx_in + 1) % buffer_size;
Priunsh_N 2:c7779da25bdb 363 }
Priunsh_N 2:c7779da25bdb 364 //led3=0;
Priunsh_N 2:c7779da25bdb 365 return;
Priunsh_N 2:c7779da25bdb 366 }
Priunsh_N 1:bbd83a3a8372 367
Priunsh_N 2:c7779da25bdb 368
Priunsh_N 2:c7779da25bdb 369 // Interupt Routine to write out data to serial port
Priunsh_N 2:c7779da25bdb 370 void Webpage::Tx_interrupt() {
Priunsh_N 2:c7779da25bdb 371 //led2=1;
Priunsh_N 2:c7779da25bdb 372 // Loop to fill more than one character in UART's transmit FIFO buffer
Priunsh_N 2:c7779da25bdb 373 // Stop if buffer empty
Priunsh_N 2:c7779da25bdb 374 while ((esp.writeable()) && (tx_in != tx_out)) {
Priunsh_N 2:c7779da25bdb 375 esp.putc(tx_buffer[tx_out]);
Priunsh_N 2:c7779da25bdb 376 tx_out = (tx_out + 1) % buffer_size;
Priunsh_N 2:c7779da25bdb 377 }
Priunsh_N 2:c7779da25bdb 378 //led2=0;
Priunsh_N 2:c7779da25bdb 379 return;
Priunsh_N 1:bbd83a3a8372 380 }
Priunsh_N 1:bbd83a3a8372 381
Priunsh_N 2:c7779da25bdb 382 void gettime()
Priunsh_N 2:c7779da25bdb 383 {
Priunsh_N 2:c7779da25bdb 384 time_t seconds = time(NULL);
Priunsh_N 2:c7779da25bdb 385 strftime(timebuf,50,"%H:%M:%S %a %d %b %y", localtime(&seconds));
Priunsh_N 1:bbd83a3a8372 386 }
Priunsh_N 1:bbd83a3a8372 387
Priunsh_N 2:c7779da25bdb 388 void setRTC()
Priunsh_N 2:c7779da25bdb 389 {
Priunsh_N 2:c7779da25bdb 390 t.tm_sec = (0); // 0-59
Priunsh_N 2:c7779da25bdb 391 t.tm_min = (minute); // 0-59
Priunsh_N 2:c7779da25bdb 392 t.tm_hour = (hour); // 0-23
Priunsh_N 2:c7779da25bdb 393 t.tm_mday = (dayofmonth); // 1-31
Priunsh_N 2:c7779da25bdb 394 t.tm_mon = (month-1); // 0-11 "0" = Jan, -1 added for Mbed RCT clock format
Priunsh_N 2:c7779da25bdb 395 t.tm_year = ((year)+100); // year since 1900, current DCF year + 100 + 1900 = correct year
Priunsh_N 2:c7779da25bdb 396 set_time(mktime(&t)); // set RTC clock
Priunsh_N 2:c7779da25bdb 397 }
Priunsh_N 2:c7779da25bdb 398 // Analog in example
Priunsh_N 2:c7779da25bdb 399 void getbattery()
Priunsh_N 2:c7779da25bdb 400 {
Priunsh_N 2:c7779da25bdb 401 AdcIn=Ain1.read();
Priunsh_N 2:c7779da25bdb 402 Ht = (AdcIn*3.3); // set the numeric to the exact MCU analog reference voltage for greater accuracy
Priunsh_N 2:c7779da25bdb 403 sprintf(Vcc,"%2.3f",Ht);
Priunsh_N 2:c7779da25bdb 404 }
Priunsh_N 2:c7779da25bdb 405 // Temperature example
Priunsh_N 2:c7779da25bdb 406 void gettemp()
Priunsh_N 2:c7779da25bdb 407 {
Priunsh_N 2:c7779da25bdb 408
Priunsh_N 2:c7779da25bdb 409 AdcIn=Ain2.read();
Priunsh_N 2:c7779da25bdb 410 Ht = (AdcIn*3.3); // set the numeric to the exact MCU analog reference voltage for greater accuracy
Priunsh_N 2:c7779da25bdb 411 sprintf(Temp,"%2.3f",Ht);
Priunsh_N 2:c7779da25bdb 412 }