amazon distribution center

Dependencies:   ISL29125 Motor mbed

Committer:
elirobelo
Date:
Tue May 02 02:17:02 2017 +0000
Revision:
0:3bde34c58439
distribution;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elirobelo 0:3bde34c58439 1 // ESP8266 Static page WEB server to control Mbed
elirobelo 0:3bde34c58439 2
elirobelo 0:3bde34c58439 3 #include "mbed.h"
elirobelo 0:3bde34c58439 4 #include "ISL29125.h"
elirobelo 0:3bde34c58439 5 #include "Motor.h"
elirobelo 0:3bde34c58439 6
elirobelo 0:3bde34c58439 7
elirobelo 0:3bde34c58439 8 Serial pc(USBTX, USBRX);
elirobelo 0:3bde34c58439 9 Serial esp(p9, p10); // tx, rx
elirobelo 0:3bde34c58439 10
elirobelo 0:3bde34c58439 11 ISL29125 RGBsensor(p28, p27);
elirobelo 0:3bde34c58439 12 //PwmOut m(p23);
elirobelo 0:3bde34c58439 13 Motor m(p23, p5, p6);
elirobelo 0:3bde34c58439 14
elirobelo 0:3bde34c58439 15 // Standard Mbed LED definitions
elirobelo 0:3bde34c58439 16 DigitalOut led1(LED1);
elirobelo 0:3bde34c58439 17 DigitalOut led2(LED2);
elirobelo 0:3bde34c58439 18 DigitalOut led3(LED3);
elirobelo 0:3bde34c58439 19 DigitalOut led4(LED4);
elirobelo 0:3bde34c58439 20
elirobelo 0:3bde34c58439 21 //Solenoids
elirobelo 0:3bde34c58439 22 DigitalOut sol1(p11);
elirobelo 0:3bde34c58439 23 DigitalOut sol2(p12);
elirobelo 0:3bde34c58439 24 DigitalOut sol3(p13);
elirobelo 0:3bde34c58439 25 DigitalOut sol4(p14);
elirobelo 0:3bde34c58439 26
elirobelo 0:3bde34c58439 27 //Sensors
elirobelo 0:3bde34c58439 28 AnalogIn sen1(p17);
elirobelo 0:3bde34c58439 29 AnalogIn sen2(p18);
elirobelo 0:3bde34c58439 30 AnalogIn sen3(p19);
elirobelo 0:3bde34c58439 31 AnalogIn sen4(p20);
elirobelo 0:3bde34c58439 32
elirobelo 0:3bde34c58439 33
elirobelo 0:3bde34c58439 34
elirobelo 0:3bde34c58439 35
elirobelo 0:3bde34c58439 36 char ssid[32] = "WifiRouter"; // enter WiFi router ssid inside the quotes
elirobelo 0:3bde34c58439 37 char pwd [32] = "password"; // enter WiFi router password inside the quotes
elirobelo 0:3bde34c58439 38
elirobelo 0:3bde34c58439 39
elirobelo 0:3bde34c58439 40
elirobelo 0:3bde34c58439 41 bool correct = false;
elirobelo 0:3bde34c58439 42 int color;
elirobelo 0:3bde34c58439 43 int sensorValue;
elirobelo 0:3bde34c58439 44 int direction;
elirobelo 0:3bde34c58439 45 Ticker als;
elirobelo 0:3bde34c58439 46 uint16_t GRBdata[3];
elirobelo 0:3bde34c58439 47 bool data_present;
elirobelo 0:3bde34c58439 48
elirobelo 0:3bde34c58439 49 float temperature, AdcIn, Ht;
elirobelo 0:3bde34c58439 50 float R1=100000, R2=10000; // resistor values to give a 10:1 reduction of measured AnalogIn voltage
elirobelo 0:3bde34c58439 51 char Vcc[10];
elirobelo 0:3bde34c58439 52 char Temp[10];
elirobelo 0:3bde34c58439 53
elirobelo 0:3bde34c58439 54 // things for sending/receiving data over serial
elirobelo 0:3bde34c58439 55 volatile int tx_in=0;
elirobelo 0:3bde34c58439 56 volatile int tx_out=0;
elirobelo 0:3bde34c58439 57 volatile int rx_in=0;
elirobelo 0:3bde34c58439 58 volatile int rx_out=0;
elirobelo 0:3bde34c58439 59 const int buffer_size = 4095;
elirobelo 0:3bde34c58439 60 char tx_buffer[buffer_size+1];
elirobelo 0:3bde34c58439 61 char rx_buffer[buffer_size+1];
elirobelo 0:3bde34c58439 62 void Tx_interrupt();
elirobelo 0:3bde34c58439 63 void Rx_interrupt();
elirobelo 0:3bde34c58439 64 void send_line();
elirobelo 0:3bde34c58439 65 void read_line();
elirobelo 0:3bde34c58439 66
elirobelo 0:3bde34c58439 67 int DataRX;
elirobelo 0:3bde34c58439 68 int update;
elirobelo 0:3bde34c58439 69 int count;
elirobelo 0:3bde34c58439 70 char cmdbuff[1024];
elirobelo 0:3bde34c58439 71 char replybuff[4096];
elirobelo 0:3bde34c58439 72 char webdata[4096]; // This may need to be bigger depending on WEB browser used
elirobelo 0:3bde34c58439 73 char webbuff[4096]; // Currently using 1986 characters, Increase this if more web page data added
elirobelo 0:3bde34c58439 74 char timebuf[30];
elirobelo 0:3bde34c58439 75 void SendCMD(),getreply(),ReadWebData(),startserver();
elirobelo 0:3bde34c58439 76 void gettime(),setRTC(); //,gettemp(),getbattery();
elirobelo 0:3bde34c58439 77 char rx_line[1024];
elirobelo 0:3bde34c58439 78 int port =80; // set server port
elirobelo 0:3bde34c58439 79 int SERVtimeout =5; // set server timeout in seconds in case link breaks.
elirobelo 0:3bde34c58439 80 struct tm t;
elirobelo 0:3bde34c58439 81 // manual set RTC values
elirobelo 0:3bde34c58439 82 int minute =00; // 0-59
elirobelo 0:3bde34c58439 83 int hour =12; // 2-23
elirobelo 0:3bde34c58439 84 int dayofmonth =26; // 1-31
elirobelo 0:3bde34c58439 85 int month =8; // 1-12
elirobelo 0:3bde34c58439 86 int year =15; // last 2 digits
elirobelo 0:3bde34c58439 87
elirobelo 0:3bde34c58439 88
elirobelo 0:3bde34c58439 89 int checkColorSensor() {
elirobelo 0:3bde34c58439 90 while (1) {
elirobelo 0:3bde34c58439 91 data_present = RGBsensor.Read(ISL29125_RGB, GRBdata);
elirobelo 0:3bde34c58439 92 if(data_present) printf("RGB : %04X-%04X-%04X\r\n", GRBdata[1], GRBdata[0], GRBdata[2]);
elirobelo 0:3bde34c58439 93 // if (GRBdata[1] < 0x02F0 && GRBdata[1] > 0x0210 && GRBdata[0] > 0x0120 && GRBdata[0] < 0x01F0 && GRBdata[2] < 0x0180 && GRBdata[2] > 0x00D0) {
elirobelo 0:3bde34c58439 94 // return 1; //red
elirobelo 0:3bde34c58439 95 // }
elirobelo 0:3bde34c58439 96 // if (GRBdata[1] < 0x0210 && GRBdata[1] > 0x0100 && GRBdata[0] > 0x0100 && GRBdata[0] < 0x0200 && GRBdata[2] < 0x0190 && GRBdata[2] > 0x00CF) {
elirobelo 0:3bde34c58439 97 // return 3; //blue
elirobelo 0:3bde34c58439 98 // }
elirobelo 0:3bde34c58439 99 if (GRBdata[1] < 0x00E0 && GRBdata[1] > 0x0060 && GRBdata[0] < 0x00F0 && GRBdata[0] > 0x0020 && GRBdata[2] < 0x00B0 && GRBdata[0] > 0x0040) {
elirobelo 0:3bde34c58439 100 return 3; //blue
elirobelo 0:3bde34c58439 101 }
elirobelo 0:3bde34c58439 102 if (GRBdata[1] < 0x0170 && GRBdata[1] > 0x00D0 && GRBdata[0] < 0x0120 && GRBdata[0] > 0x0040 && GRBdata[2] > 0x0030 && GRBdata[2] < 0x00A0) {
elirobelo 0:3bde34c58439 103 return 1; //red
elirobelo 0:3bde34c58439 104 }
elirobelo 0:3bde34c58439 105 }
elirobelo 0:3bde34c58439 106 }
elirobelo 0:3bde34c58439 107
elirobelo 0:3bde34c58439 108
elirobelo 0:3bde34c58439 109 int main()
elirobelo 0:3bde34c58439 110 {
elirobelo 0:3bde34c58439 111 pc.baud(9600);
elirobelo 0:3bde34c58439 112 esp.baud(9600);
elirobelo 0:3bde34c58439 113 led1=1,led2=0,led3=0, led4=0;
elirobelo 0:3bde34c58439 114 m.speed(.7);
elirobelo 0:3bde34c58439 115 //m = .5;
elirobelo 0:3bde34c58439 116 // Setup a serial interrupt function to receive data
elirobelo 0:3bde34c58439 117 esp.attach(&Rx_interrupt, Serial::RxIrq);
elirobelo 0:3bde34c58439 118 // Setup a serial interrupt function to transmit data
elirobelo 0:3bde34c58439 119 esp.attach(&Tx_interrupt, Serial::TxIrq);
elirobelo 0:3bde34c58439 120 if (time(NULL) < 1420070400) {
elirobelo 0:3bde34c58439 121 setRTC();
elirobelo 0:3bde34c58439 122 }
elirobelo 0:3bde34c58439 123 startserver();
elirobelo 0:3bde34c58439 124 DataRX=0;
elirobelo 0:3bde34c58439 125 count=0;
elirobelo 0:3bde34c58439 126 while(1) {
elirobelo 0:3bde34c58439 127 if(DataRX==1) {
elirobelo 0:3bde34c58439 128 ReadWebData();
elirobelo 0:3bde34c58439 129 esp.attach(&Rx_interrupt, Serial::RxIrq);
elirobelo 0:3bde34c58439 130 }
elirobelo 0:3bde34c58439 131 if(update==1) // update time, hit count, and analog levels in the HUZZAH chip
elirobelo 0:3bde34c58439 132 {
elirobelo 0:3bde34c58439 133 // get new values
elirobelo 0:3bde34c58439 134 gettime();
elirobelo 0:3bde34c58439 135 count++;
elirobelo 0:3bde34c58439 136 // send new values
elirobelo 0:3bde34c58439 137 sprintf(cmdbuff, "count,time,analog1,analog2=%d,\"%s\",\"%s\",\"%s\"\r\n",count,timebuf,Temp,Vcc);
elirobelo 0:3bde34c58439 138 SendCMD();
elirobelo 0:3bde34c58439 139 getreply();
elirobelo 0:3bde34c58439 140 update=0;
elirobelo 0:3bde34c58439 141 }
elirobelo 0:3bde34c58439 142 if (color != 0 && direction != 0) {
elirobelo 0:3bde34c58439 143 while(!correct){
elirobelo 0:3bde34c58439 144 sensorValue = checkColorSensor();
elirobelo 0:3bde34c58439 145 if (sensorValue == color) {
elirobelo 0:3bde34c58439 146 correct = true;
elirobelo 0:3bde34c58439 147 color = 0;
elirobelo 0:3bde34c58439 148 }
elirobelo 0:3bde34c58439 149 }
elirobelo 0:3bde34c58439 150 while(correct) {
elirobelo 0:3bde34c58439 151 printf("percentage Sensor1: %3.3f%%\r\n", sen1.read());
elirobelo 0:3bde34c58439 152 printf("percentage Sensor2: %3.3f%%\r\n", sen2.read());
elirobelo 0:3bde34c58439 153 printf("percentage Sensor3: %3.3f%%\r\n", sen3.read());
elirobelo 0:3bde34c58439 154 printf("percentage Sensor4: %3.3f%%\r\n", sen4.read());
elirobelo 0:3bde34c58439 155 printf("direction: %d\r\n", direction);
elirobelo 0:3bde34c58439 156 if (direction == 1 && sen1.read() < .82) {
elirobelo 0:3bde34c58439 157 sol4 = 1;
elirobelo 0:3bde34c58439 158 wait(1);
elirobelo 0:3bde34c58439 159 correct = false;
elirobelo 0:3bde34c58439 160 }
elirobelo 0:3bde34c58439 161 if (direction == 2 && sen2.read() < .83) {
elirobelo 0:3bde34c58439 162 sol3 = 1;
elirobelo 0:3bde34c58439 163 wait(1);
elirobelo 0:3bde34c58439 164 correct = false;
elirobelo 0:3bde34c58439 165 }
elirobelo 0:3bde34c58439 166 if (direction == 3 && sen3.read() < .815) {
elirobelo 0:3bde34c58439 167 sol2 = 1;
elirobelo 0:3bde34c58439 168 wait(1);
elirobelo 0:3bde34c58439 169 correct = false;
elirobelo 0:3bde34c58439 170 }
elirobelo 0:3bde34c58439 171 if (direction == 4 && sen4.read() < .81) {
elirobelo 0:3bde34c58439 172 sol1 = 1;
elirobelo 0:3bde34c58439 173 wait(1);
elirobelo 0:3bde34c58439 174 correct = false;
elirobelo 0:3bde34c58439 175 }
elirobelo 0:3bde34c58439 176 }
elirobelo 0:3bde34c58439 177 }
elirobelo 0:3bde34c58439 178 sol1 = 0;
elirobelo 0:3bde34c58439 179 sol2 = 0;
elirobelo 0:3bde34c58439 180 sol3 = 0;
elirobelo 0:3bde34c58439 181 sol4 = 0;
elirobelo 0:3bde34c58439 182 direction = 0;
elirobelo 0:3bde34c58439 183 }
elirobelo 0:3bde34c58439 184 }
elirobelo 0:3bde34c58439 185
elirobelo 0:3bde34c58439 186 // Reads and processes GET and POST web data
elirobelo 0:3bde34c58439 187 void ReadWebData()
elirobelo 0:3bde34c58439 188 {
elirobelo 0:3bde34c58439 189 wait_ms(200);
elirobelo 0:3bde34c58439 190 esp.attach(NULL,Serial::RxIrq);
elirobelo 0:3bde34c58439 191 DataRX=0;
elirobelo 0:3bde34c58439 192 memset(webdata, '\0', sizeof(webdata));
elirobelo 0:3bde34c58439 193 strcpy(webdata, rx_buffer);
elirobelo 0:3bde34c58439 194 memset(rx_buffer, '\0', sizeof(rx_buffer));
elirobelo 0:3bde34c58439 195 rx_in = 0;
elirobelo 0:3bde34c58439 196 rx_out = 0;
elirobelo 0:3bde34c58439 197 // check web data for form information
elirobelo 0:3bde34c58439 198 if( strstr(webdata, "box=r") != NULL ) {
elirobelo 0:3bde34c58439 199 //check for red
elirobelo 0:3bde34c58439 200 color = 1;
elirobelo 0:3bde34c58439 201 // while(!correct) {
elirobelo 0:3bde34c58439 202 // color = checkColorSensor();
elirobelo 0:3bde34c58439 203 // if (color == 1) correct = true;
elirobelo 0:3bde34c58439 204 // }
elirobelo 0:3bde34c58439 205 //correct = true;
elirobelo 0:3bde34c58439 206 led1=!led1;
elirobelo 0:3bde34c58439 207 }
elirobelo 0:3bde34c58439 208 // if( strstr(webdata, "box=g") != NULL ) {
elirobelo 0:3bde34c58439 209 // color = 2;
elirobelo 0:3bde34c58439 210 //// while(!correct) {
elirobelo 0:3bde34c58439 211 //// color = checkColorSensor();
elirobelo 0:3bde34c58439 212 //// if (color == 2) correct = true;
elirobelo 0:3bde34c58439 213 //// }
elirobelo 0:3bde34c58439 214 // //check for green
elirobelo 0:3bde34c58439 215 // led2=!led2;
elirobelo 0:3bde34c58439 216 // }
elirobelo 0:3bde34c58439 217 if( strstr(webdata, "box=b") != NULL ) {
elirobelo 0:3bde34c58439 218 //check for blue
elirobelo 0:3bde34c58439 219 color = 3;
elirobelo 0:3bde34c58439 220 // while(!correct) {
elirobelo 0:3bde34c58439 221 // color = checkColorSensor();
elirobelo 0:3bde34c58439 222 // if (color == 3) correct = true;
elirobelo 0:3bde34c58439 223 // }
elirobelo 0:3bde34c58439 224 led3=!led3;
elirobelo 0:3bde34c58439 225 }
elirobelo 0:3bde34c58439 226 if( strstr(webdata, "direction=north") != NULL ) {
elirobelo 0:3bde34c58439 227 led4=!led4;
elirobelo 0:3bde34c58439 228 direction = 1;
elirobelo 0:3bde34c58439 229 // while(correct) {
elirobelo 0:3bde34c58439 230 // if (sen1.read() < .8) {
elirobelo 0:3bde34c58439 231 // //wait(.2);
elirobelo 0:3bde34c58439 232 // sol1 = 1;
elirobelo 0:3bde34c58439 233 // correct = false;
elirobelo 0:3bde34c58439 234 // }
elirobelo 0:3bde34c58439 235 // }
elirobelo 0:3bde34c58439 236 // sol1 = false;
elirobelo 0:3bde34c58439 237 }
elirobelo 0:3bde34c58439 238 if( strstr(webdata, "direction=south") != NULL ) {
elirobelo 0:3bde34c58439 239 led4=!led4;
elirobelo 0:3bde34c58439 240 direction = 2;
elirobelo 0:3bde34c58439 241 // while(correct) {
elirobelo 0:3bde34c58439 242 // if (sen2.read() < .8) {
elirobelo 0:3bde34c58439 243 // //wait(.2);
elirobelo 0:3bde34c58439 244 // sol2 = 1;
elirobelo 0:3bde34c58439 245 // correct = false;
elirobelo 0:3bde34c58439 246 // }
elirobelo 0:3bde34c58439 247 // }
elirobelo 0:3bde34c58439 248 // sol2 = false;
elirobelo 0:3bde34c58439 249 }
elirobelo 0:3bde34c58439 250 if( strstr(webdata, "direction=east") != NULL ) {
elirobelo 0:3bde34c58439 251 led4=!led4;
elirobelo 0:3bde34c58439 252 direction = 3;
elirobelo 0:3bde34c58439 253 // while(correct) {
elirobelo 0:3bde34c58439 254 // if (sen3.read() < .8) {
elirobelo 0:3bde34c58439 255 // //wait(.2);
elirobelo 0:3bde34c58439 256 // sol3 = 1;
elirobelo 0:3bde34c58439 257 // correct = false;
elirobelo 0:3bde34c58439 258 // }
elirobelo 0:3bde34c58439 259 // }
elirobelo 0:3bde34c58439 260 }
elirobelo 0:3bde34c58439 261 if( strstr(webdata, "direction=west") != NULL ) {
elirobelo 0:3bde34c58439 262 led4=!led4;
elirobelo 0:3bde34c58439 263 direction = 4;
elirobelo 0:3bde34c58439 264 // while(correct) {
elirobelo 0:3bde34c58439 265 // if (sen4.read() < .8) {
elirobelo 0:3bde34c58439 266 // //wait(.2);
elirobelo 0:3bde34c58439 267 // sol4 = 1;
elirobelo 0:3bde34c58439 268 // correct = false;
elirobelo 0:3bde34c58439 269 // }
elirobelo 0:3bde34c58439 270 // }
elirobelo 0:3bde34c58439 271 // sol4 = 0;
elirobelo 0:3bde34c58439 272 }
elirobelo 0:3bde34c58439 273 if( strstr(webdata, "POST") != NULL ) { // set update flag if POST request
elirobelo 0:3bde34c58439 274 update=1;
elirobelo 0:3bde34c58439 275 }
elirobelo 0:3bde34c58439 276 if( strstr(webdata, "GET") != NULL && strstr(webdata, "favicon") == NULL ) { // set update flag for GET request but do not want to update for favicon requests
elirobelo 0:3bde34c58439 277 update=1;
elirobelo 0:3bde34c58439 278 }
elirobelo 0:3bde34c58439 279 }
elirobelo 0:3bde34c58439 280 // Starts webserver
elirobelo 0:3bde34c58439 281 void startserver()
elirobelo 0:3bde34c58439 282 {
elirobelo 0:3bde34c58439 283 gettime();
elirobelo 0:3bde34c58439 284 //gettemp();
elirobelo 0:3bde34c58439 285 //getbattery();
elirobelo 0:3bde34c58439 286 pc.printf("++++++++++ Resetting ESP ++++++++++\r\n");
elirobelo 0:3bde34c58439 287 strcpy(cmdbuff,"node.restart()\r\n");
elirobelo 0:3bde34c58439 288 SendCMD();
elirobelo 0:3bde34c58439 289 wait(2);
elirobelo 0:3bde34c58439 290 getreply();
elirobelo 0:3bde34c58439 291
elirobelo 0:3bde34c58439 292 pc.printf("\n++++++++++ Starting Server ++++++++++\r\n> ");
elirobelo 0:3bde34c58439 293
elirobelo 0:3bde34c58439 294 // initial values
elirobelo 0:3bde34c58439 295 sprintf(cmdbuff, "count,time,analog1,analog2=0,\"%s\",\"%s\",\"%s\"\r\n",timebuf,Temp,Vcc);
elirobelo 0:3bde34c58439 296 SendCMD();
elirobelo 0:3bde34c58439 297 getreply();
elirobelo 0:3bde34c58439 298 wait(0.5);
elirobelo 0:3bde34c58439 299
elirobelo 0:3bde34c58439 300 //create server
elirobelo 0:3bde34c58439 301 sprintf(cmdbuff, "srv=net.createServer(net.TCP,%d)\r\n",SERVtimeout);
elirobelo 0:3bde34c58439 302 SendCMD();
elirobelo 0:3bde34c58439 303 getreply();
elirobelo 0:3bde34c58439 304 wait(0.5);
elirobelo 0:3bde34c58439 305 strcpy(cmdbuff,"srv:listen(80,function(conn)\r\n");
elirobelo 0:3bde34c58439 306 SendCMD();
elirobelo 0:3bde34c58439 307 getreply();
elirobelo 0:3bde34c58439 308 wait(0.3);
elirobelo 0:3bde34c58439 309 strcpy(cmdbuff,"conn:on(\"receive\",function(conn,payload) \r\n");
elirobelo 0:3bde34c58439 310 SendCMD();
elirobelo 0:3bde34c58439 311 getreply();
elirobelo 0:3bde34c58439 312 wait(0.3);
elirobelo 0:3bde34c58439 313
elirobelo 0:3bde34c58439 314 //print data to mbed
elirobelo 0:3bde34c58439 315 strcpy(cmdbuff,"print(payload)\r\n");
elirobelo 0:3bde34c58439 316 SendCMD();
elirobelo 0:3bde34c58439 317 getreply();
elirobelo 0:3bde34c58439 318 wait(0.2);
elirobelo 0:3bde34c58439 319
elirobelo 0:3bde34c58439 320 //web page data
elirobelo 0:3bde34c58439 321 strcpy(cmdbuff,"conn:send('<!DOCTYPE html><html><body><h1>Checkout</h1>')\r\n");
elirobelo 0:3bde34c58439 322 SendCMD();
elirobelo 0:3bde34c58439 323 getreply();
elirobelo 0:3bde34c58439 324 wait(0.4);
elirobelo 0:3bde34c58439 325 strcpy(cmdbuff,"conn:send('Hit count: '..count..'')\r\n");
elirobelo 0:3bde34c58439 326 SendCMD();
elirobelo 0:3bde34c58439 327 getreply();
elirobelo 0:3bde34c58439 328 wait(0.2);
elirobelo 0:3bde34c58439 329 strcpy(cmdbuff,"conn:send('<br>Last hit (based on mbed RTC time): '..time..'<br><hr>')\r\n");
elirobelo 0:3bde34c58439 330 SendCMD();
elirobelo 0:3bde34c58439 331 getreply();
elirobelo 0:3bde34c58439 332 wait(0.4);
elirobelo 0:3bde34c58439 333 strcpy(cmdbuff, "conn:send('<p><h2>Choose a Package Option</h2><ul>')\r\n");
elirobelo 0:3bde34c58439 334 SendCMD();
elirobelo 0:3bde34c58439 335 getreply();
elirobelo 0:3bde34c58439 336 wait(0.5);
elirobelo 0:3bde34c58439 337 strcpy(cmdbuff,"conn:send('<form method=\"POST\"')\r\n");
elirobelo 0:3bde34c58439 338 SendCMD();
elirobelo 0:3bde34c58439 339 getreply();
elirobelo 0:3bde34c58439 340 wait(0.3);
elirobelo 0:3bde34c58439 341
elirobelo 0:3bde34c58439 342
elirobelo 0:3bde34c58439 343 //Package Options
elirobelo 0:3bde34c58439 344 strcpy(cmdbuff, "conn:send('<p><input type=\"radio\" name=\"box\" value=\"r\" checked> Red')\r\n");
elirobelo 0:3bde34c58439 345 SendCMD();
elirobelo 0:3bde34c58439 346 getreply();
elirobelo 0:3bde34c58439 347 wait(0.3);
elirobelo 0:3bde34c58439 348 strcpy(cmdbuff, "conn:send('<p><input type=\"radio\" name=\"box\" value=\"b\" > Blue')\r\n");
elirobelo 0:3bde34c58439 349 SendCMD();
elirobelo 0:3bde34c58439 350 getreply();
elirobelo 0:3bde34c58439 351 wait(0.3);
elirobelo 0:3bde34c58439 352 // strcpy(cmdbuff, "conn:send('<p><input type=\"radio\" name=\"box\" value=\"g\" > Green')\r\n");
elirobelo 0:3bde34c58439 353 // SendCMD();
elirobelo 0:3bde34c58439 354 // getreply();
elirobelo 0:3bde34c58439 355 // wait(0.3);
elirobelo 0:3bde34c58439 356
elirobelo 0:3bde34c58439 357
elirobelo 0:3bde34c58439 358
elirobelo 0:3bde34c58439 359 //Direction Options
elirobelo 0:3bde34c58439 360 strcpy(cmdbuff, "conn:send('<br><p><h2>What direction?</h2><ul>')\r\n");
elirobelo 0:3bde34c58439 361 SendCMD();
elirobelo 0:3bde34c58439 362 getreply();
elirobelo 0:3bde34c58439 363 wait(0.5);
elirobelo 0:3bde34c58439 364
elirobelo 0:3bde34c58439 365 strcpy(cmdbuff, "conn:send('<p><input type=\"radio\" name=\"direction\" value=\"north\" checked> North')\r\n");
elirobelo 0:3bde34c58439 366 SendCMD();
elirobelo 0:3bde34c58439 367 getreply();
elirobelo 0:3bde34c58439 368 wait(0.3);
elirobelo 0:3bde34c58439 369 strcpy(cmdbuff, "conn:send('<p><input type=\"radio\" name=\"direction\" value=\"south\" > South')\r\n");
elirobelo 0:3bde34c58439 370 SendCMD();
elirobelo 0:3bde34c58439 371 getreply();
elirobelo 0:3bde34c58439 372 wait(0.3);
elirobelo 0:3bde34c58439 373 strcpy(cmdbuff, "conn:send('<p><input type=\"radio\" name=\"direction\" value=\"east\" > East')\r\n");
elirobelo 0:3bde34c58439 374 SendCMD();
elirobelo 0:3bde34c58439 375 getreply();
elirobelo 0:3bde34c58439 376 wait(0.3);
elirobelo 0:3bde34c58439 377 strcpy(cmdbuff, "conn:send('<p><input type=\"radio\" name=\"direction\" value=\"west\" > West')\r\n");
elirobelo 0:3bde34c58439 378 SendCMD();
elirobelo 0:3bde34c58439 379 getreply();
elirobelo 0:3bde34c58439 380 wait(0.3);
elirobelo 0:3bde34c58439 381
elirobelo 0:3bde34c58439 382
elirobelo 0:3bde34c58439 383 //Submit button
elirobelo 0:3bde34c58439 384 strcpy(cmdbuff,"conn:send('<p><input type=\"submit\" value=\"send-refresh\"></form>')\r\n");
elirobelo 0:3bde34c58439 385 SendCMD();
elirobelo 0:3bde34c58439 386 getreply();
elirobelo 0:3bde34c58439 387 wait(0.3);
elirobelo 0:3bde34c58439 388
elirobelo 0:3bde34c58439 389
elirobelo 0:3bde34c58439 390 // End web page data
elirobelo 0:3bde34c58439 391 strcpy(cmdbuff, "conn:on(\"sent\",function(conn) conn:close() end)\r\n"); // close current connection
elirobelo 0:3bde34c58439 392 SendCMD();
elirobelo 0:3bde34c58439 393 getreply();
elirobelo 0:3bde34c58439 394 wait(0.3);
elirobelo 0:3bde34c58439 395 strcpy(cmdbuff, "end)\r\n");
elirobelo 0:3bde34c58439 396 SendCMD();
elirobelo 0:3bde34c58439 397 getreply();
elirobelo 0:3bde34c58439 398 wait(0.2);
elirobelo 0:3bde34c58439 399 strcpy(cmdbuff, "end)\r\n");
elirobelo 0:3bde34c58439 400 SendCMD();
elirobelo 0:3bde34c58439 401 getreply();
elirobelo 0:3bde34c58439 402 wait(0.2);
elirobelo 0:3bde34c58439 403
elirobelo 0:3bde34c58439 404 strcpy(cmdbuff, "tmr.alarm(0, 1000, 1, function()\r\n");
elirobelo 0:3bde34c58439 405 SendCMD();
elirobelo 0:3bde34c58439 406 getreply();
elirobelo 0:3bde34c58439 407 wait(0.2);
elirobelo 0:3bde34c58439 408 strcpy(cmdbuff, "if wifi.sta.getip() == nil then\r\n");
elirobelo 0:3bde34c58439 409 SendCMD();
elirobelo 0:3bde34c58439 410 getreply();
elirobelo 0:3bde34c58439 411 wait(0.2);
elirobelo 0:3bde34c58439 412 strcpy(cmdbuff, "print(\"Connecting to AP...\\n\")\r\n");
elirobelo 0:3bde34c58439 413 SendCMD();
elirobelo 0:3bde34c58439 414 getreply();
elirobelo 0:3bde34c58439 415 wait(0.2);
elirobelo 0:3bde34c58439 416 strcpy(cmdbuff, "else\r\n");
elirobelo 0:3bde34c58439 417 SendCMD();
elirobelo 0:3bde34c58439 418 getreply();
elirobelo 0:3bde34c58439 419 wait(0.2);
elirobelo 0:3bde34c58439 420 strcpy(cmdbuff, "ip, nm, gw=wifi.sta.getip()\r\n");
elirobelo 0:3bde34c58439 421 SendCMD();
elirobelo 0:3bde34c58439 422 getreply();
elirobelo 0:3bde34c58439 423 wait(0.2);
elirobelo 0:3bde34c58439 424 strcpy(cmdbuff,"print(\"IP Address: \",ip)\r\n");
elirobelo 0:3bde34c58439 425 SendCMD();
elirobelo 0:3bde34c58439 426 getreply();
elirobelo 0:3bde34c58439 427 wait(0.2);
elirobelo 0:3bde34c58439 428 strcpy(cmdbuff,"tmr.stop(0)\r\n");
elirobelo 0:3bde34c58439 429 SendCMD();
elirobelo 0:3bde34c58439 430 getreply();
elirobelo 0:3bde34c58439 431 wait(0.2);
elirobelo 0:3bde34c58439 432 strcpy(cmdbuff,"end\r\n");
elirobelo 0:3bde34c58439 433 SendCMD();
elirobelo 0:3bde34c58439 434 getreply();
elirobelo 0:3bde34c58439 435 wait(0.2);
elirobelo 0:3bde34c58439 436 strcpy(cmdbuff,"end)\r\n");
elirobelo 0:3bde34c58439 437 SendCMD();
elirobelo 0:3bde34c58439 438 getreply();
elirobelo 0:3bde34c58439 439 wait(0.2);
elirobelo 0:3bde34c58439 440
elirobelo 0:3bde34c58439 441 pc.printf("\n\n++++++++++ Ready ++++++++++\r\n\n");
elirobelo 0:3bde34c58439 442 }
elirobelo 0:3bde34c58439 443
elirobelo 0:3bde34c58439 444
elirobelo 0:3bde34c58439 445 // ESP Command data send
elirobelo 0:3bde34c58439 446 void SendCMD()
elirobelo 0:3bde34c58439 447 {
elirobelo 0:3bde34c58439 448 int i;
elirobelo 0:3bde34c58439 449 char temp_char;
elirobelo 0:3bde34c58439 450 bool empty;
elirobelo 0:3bde34c58439 451 i = 0;
elirobelo 0:3bde34c58439 452 // Start Critical Section - don't interrupt while changing global buffer variables
elirobelo 0:3bde34c58439 453 NVIC_DisableIRQ(UART1_IRQn);
elirobelo 0:3bde34c58439 454 empty = (tx_in == tx_out);
elirobelo 0:3bde34c58439 455 while ((i==0) || (cmdbuff[i-1] != '\n')) {
elirobelo 0:3bde34c58439 456 // Wait if buffer full
elirobelo 0:3bde34c58439 457 if (((tx_in + 1) % buffer_size) == tx_out) {
elirobelo 0:3bde34c58439 458 // End Critical Section - need to let interrupt routine empty buffer by sending
elirobelo 0:3bde34c58439 459 NVIC_EnableIRQ(UART1_IRQn);
elirobelo 0:3bde34c58439 460 while (((tx_in + 1) % buffer_size) == tx_out) {
elirobelo 0:3bde34c58439 461 }
elirobelo 0:3bde34c58439 462 // Start Critical Section - don't interrupt while changing global buffer variables
elirobelo 0:3bde34c58439 463 NVIC_DisableIRQ(UART1_IRQn);
elirobelo 0:3bde34c58439 464 }
elirobelo 0:3bde34c58439 465 tx_buffer[tx_in] = cmdbuff[i];
elirobelo 0:3bde34c58439 466 i++;
elirobelo 0:3bde34c58439 467 tx_in = (tx_in + 1) % buffer_size;
elirobelo 0:3bde34c58439 468 }
elirobelo 0:3bde34c58439 469 if (esp.writeable() && (empty)) {
elirobelo 0:3bde34c58439 470 temp_char = tx_buffer[tx_out];
elirobelo 0:3bde34c58439 471 tx_out = (tx_out + 1) % buffer_size;
elirobelo 0:3bde34c58439 472 // Send first character to start tx interrupts, if stopped
elirobelo 0:3bde34c58439 473 esp.putc(temp_char);
elirobelo 0:3bde34c58439 474 }
elirobelo 0:3bde34c58439 475 // End Critical Section
elirobelo 0:3bde34c58439 476 NVIC_EnableIRQ(UART1_IRQn);
elirobelo 0:3bde34c58439 477 return;
elirobelo 0:3bde34c58439 478 }
elirobelo 0:3bde34c58439 479
elirobelo 0:3bde34c58439 480 // Get Command and ESP status replies
elirobelo 0:3bde34c58439 481 void getreply()
elirobelo 0:3bde34c58439 482 {
elirobelo 0:3bde34c58439 483 read_line();
elirobelo 0:3bde34c58439 484 sscanf(rx_line,replybuff);
elirobelo 0:3bde34c58439 485 }
elirobelo 0:3bde34c58439 486
elirobelo 0:3bde34c58439 487 // Read a line from the large rx buffer from rx interrupt routine
elirobelo 0:3bde34c58439 488 void read_line() {
elirobelo 0:3bde34c58439 489 int i;
elirobelo 0:3bde34c58439 490 i = 0;
elirobelo 0:3bde34c58439 491 // Start Critical Section - don't interrupt while changing global buffer variables
elirobelo 0:3bde34c58439 492 NVIC_DisableIRQ(UART1_IRQn);
elirobelo 0:3bde34c58439 493 // Loop reading rx buffer characters until end of line character
elirobelo 0:3bde34c58439 494 while ((i==0) || (rx_line[i-1] != '\r')) {
elirobelo 0:3bde34c58439 495 // Wait if buffer empty
elirobelo 0:3bde34c58439 496 if (rx_in == rx_out) {
elirobelo 0:3bde34c58439 497 // End Critical Section - need to allow rx interrupt to get new characters for buffer
elirobelo 0:3bde34c58439 498 NVIC_EnableIRQ(UART1_IRQn);
elirobelo 0:3bde34c58439 499 while (rx_in == rx_out) {
elirobelo 0:3bde34c58439 500 }
elirobelo 0:3bde34c58439 501 // Start Critical Section - don't interrupt while changing global buffer variables
elirobelo 0:3bde34c58439 502 NVIC_DisableIRQ(UART1_IRQn);
elirobelo 0:3bde34c58439 503 }
elirobelo 0:3bde34c58439 504 rx_line[i] = rx_buffer[rx_out];
elirobelo 0:3bde34c58439 505 i++;
elirobelo 0:3bde34c58439 506 rx_out = (rx_out + 1) % buffer_size;
elirobelo 0:3bde34c58439 507 }
elirobelo 0:3bde34c58439 508 // End Critical Section
elirobelo 0:3bde34c58439 509 NVIC_EnableIRQ(UART1_IRQn);
elirobelo 0:3bde34c58439 510 rx_line[i-1] = 0;
elirobelo 0:3bde34c58439 511 return;
elirobelo 0:3bde34c58439 512 }
elirobelo 0:3bde34c58439 513
elirobelo 0:3bde34c58439 514
elirobelo 0:3bde34c58439 515 // Interupt Routine to read in data from serial port
elirobelo 0:3bde34c58439 516 void Rx_interrupt() {
elirobelo 0:3bde34c58439 517 DataRX=1;
elirobelo 0:3bde34c58439 518 //led3=1;
elirobelo 0:3bde34c58439 519 // Loop just in case more than one character is in UART's receive FIFO buffer
elirobelo 0:3bde34c58439 520 // Stop if buffer full
elirobelo 0:3bde34c58439 521 while ((esp.readable()) && (((rx_in + 1) % buffer_size) != rx_out)) {
elirobelo 0:3bde34c58439 522 rx_buffer[rx_in] = esp.getc();
elirobelo 0:3bde34c58439 523 // Uncomment to Echo to USB serial to watch data flow
elirobelo 0:3bde34c58439 524 pc.putc(rx_buffer[rx_in]);
elirobelo 0:3bde34c58439 525 rx_in = (rx_in + 1) % buffer_size;
elirobelo 0:3bde34c58439 526 }
elirobelo 0:3bde34c58439 527 //led3=0;
elirobelo 0:3bde34c58439 528 return;
elirobelo 0:3bde34c58439 529 }
elirobelo 0:3bde34c58439 530
elirobelo 0:3bde34c58439 531
elirobelo 0:3bde34c58439 532 // Interupt Routine to write out data to serial port
elirobelo 0:3bde34c58439 533 void Tx_interrupt() {
elirobelo 0:3bde34c58439 534 //led2=1;
elirobelo 0:3bde34c58439 535 // Loop to fill more than one character in UART's transmit FIFO buffer
elirobelo 0:3bde34c58439 536 // Stop if buffer empty
elirobelo 0:3bde34c58439 537 while ((esp.writeable()) && (tx_in != tx_out)) {
elirobelo 0:3bde34c58439 538 esp.putc(tx_buffer[tx_out]);
elirobelo 0:3bde34c58439 539 tx_out = (tx_out + 1) % buffer_size;
elirobelo 0:3bde34c58439 540 }
elirobelo 0:3bde34c58439 541 //led2=0;
elirobelo 0:3bde34c58439 542 return;
elirobelo 0:3bde34c58439 543 }
elirobelo 0:3bde34c58439 544
elirobelo 0:3bde34c58439 545 void gettime()
elirobelo 0:3bde34c58439 546 {
elirobelo 0:3bde34c58439 547 time_t seconds = time(NULL);
elirobelo 0:3bde34c58439 548 strftime(timebuf,50,"%H:%M:%S %a %d %b %y", localtime(&seconds));
elirobelo 0:3bde34c58439 549 }
elirobelo 0:3bde34c58439 550
elirobelo 0:3bde34c58439 551 void setRTC()
elirobelo 0:3bde34c58439 552 {
elirobelo 0:3bde34c58439 553 t.tm_sec = (0); // 0-59
elirobelo 0:3bde34c58439 554 t.tm_min = (minute); // 0-59
elirobelo 0:3bde34c58439 555 t.tm_hour = (hour); // 0-23
elirobelo 0:3bde34c58439 556 t.tm_mday = (dayofmonth); // 1-31
elirobelo 0:3bde34c58439 557 t.tm_mon = (month-1); // 0-11 "0" = Jan, -1 added for Mbed RCT clock format
elirobelo 0:3bde34c58439 558 t.tm_year = ((year)+100); // year since 1900, current DCF year + 100 + 1900 = correct year
elirobelo 0:3bde34c58439 559 set_time(mktime(&t)); // set RTC clock
elirobelo 0:3bde34c58439 560 }
elirobelo 0:3bde34c58439 561
elirobelo 0:3bde34c58439 562 //void ALSread()
elirobelo 0:3bde34c58439 563 //{
elirobelo 0:3bde34c58439 564 // data_present = RGBsensor.Read(ISL29125_RGB, GRBdata);
elirobelo 0:3bde34c58439 565 // if(data_present) printf("RGB : %04X-%04X-%04X\r\n", GRBdata[1], GRBdata[0], GRBdata[2]);
elirobelo 0:3bde34c58439 566 // if(Overflow)
elirobelo 0:3bde34c58439 567 // {
elirobelo 0:3bde34c58439 568 // printf("\r\nIRQ : %d\r\n",Overflow);
elirobelo 0:3bde34c58439 569 // myled = !myled;
elirobelo 0:3bde34c58439 570 // Overflow = 0;
elirobelo 0:3bde34c58439 571 // }
elirobelo 0:3bde34c58439 572 //}
elirobelo 0:3bde34c58439 573