Regenerating PPM signal based on distances from ultrasonic sensors, ESP8266 for connectin via wifi. Autonomous quadcopter behaviour, autonomou height holding. Flying direction based on front and back ultrasonic sensors.

Dependencies:   ConfigFile HCSR04 PID PPM2 mbed-rtos mbed

Branch:
DistanceRegulation
Revision:
34:5dca557e982f
Parent:
33:a2f9fea05cb9
Child:
37:76bfd4e9c383
--- a/ESP8266/Server.h	Sun Feb 18 17:10:48 2018 +0000
+++ b/ESP8266/Server.h	Sun Feb 25 18:32:13 2018 +0000
@@ -16,8 +16,8 @@
 char cmdbuff[32];
 char replybuff[1024];
 char webcount[8];
-char webdata[1024]; // This may need to be bigger depending on WEB browser used
-char webbuff[4096];     // Currently using 1986 characters, Increase this if more web page data added
+char webdata[2048]; // This may need to be bigger depending on WEB browser used
+char webbuff[8192];     // Currently using 1986 characters, Increase this if more web page data added
 char type[16];
 char channel[2];
 char ip_address[20];
@@ -45,7 +45,7 @@
 //serverThread.start(serverRun);
 
 void callback(){
-    //pc.printf("callback!!!!!!!!!!!!!!!!_________________________\n\r");
+    ////pc.printf("callback!!!!!!!!!!!!!!!!_________________________\n\r");
     led3 = 1;
     while (esp.readable()) {
         webbuff[count] = esp.getc();
@@ -61,7 +61,7 @@
 void serverRun(){
     reset=0;
     
-    pc.printf("\f\n\r------------ ESP8266 Hardware Reset --------------\n\r");
+    //pc.printf("\f\n\r------------ ESP8266 Hardware Reset --------------\n\r");
     //wait(0.5);
     reset=1;
     timeout=6000;
@@ -71,6 +71,7 @@
     startserver();
     webcounter = 0;
     Timer timer;
+    bool pageWasSent = false;
     while(1){
         if(DataRX==1) {
             timer.reset();
@@ -78,25 +79,27 @@
             ReadWebData();
             // Save data to configFile
             //writeSettingsToConfig();
-            if (servreq == 1 && weberror == 0) {
-                    pc.printf("Send page \n\r");
+            if ((servreq == 1 && weberror == 0) && pageWasSent == false) {
+                    //////pc.printf("Send page \n\r");
                     // send HTTP Response
                     sendpage();
+                    pageWasSent = true;
                     
             }
             else{
-                pc.printf("Page was not sent \n\r");    
+                ////pc.printf("Page was not sent \n\r");    
             }
             esp.attach(&callback);
-            pc.printf(" IPD Data:\r\n\n Link ID = %d,\r\n IPD Header Length = %d \r\n IPD Type = %s\r\n", linkID, ipdLen, type);
-            pc.printf("HTTP Packet: \n\n%s", webdata);
-            pc.printf("Web Characters sent : %d\n\n", bufl);
-            pc.printf("-------------------------------------\n\n");
+            ////pc.printf(" IPD Data:\r\n\n Link ID = %d,\r\n IPD Header Length = %d \r\n IPD Type = %s\r\n", linkID, ipdLen, type);
+            ////pc.printf("HTTP Packet: \n\n%s", webdata);
+            ////pc.printf("Web Characters sent : %d\n\n", bufl);
+            ////pc.printf("-------------------------------------\n\n");
             servreq=0;
             memset(_serverMessage, '\0', sizeof(_serverMessage));
         }
-        if(timer.read_ms() > 1500){
-            pc.printf("starting reading new configuration in server task\n\r");
+        if(timer.read_ms() > 3000){
+            pageWasSent = false;
+            ////pc.printf("starting reading new configuration in server task\n\r");
             // when stop sending answers
             timer.stop();
             timer.reset();
@@ -119,7 +122,7 @@
             
         }
         
-        //Thread::wait(10);
+        Thread::wait(100);
     }
 }
 
@@ -129,22 +132,22 @@
     strcpy(webbuff, "<!DOCTYPE html>");
     strcat(webbuff, "<html><head><title>ESP8266 Mbed LPC1768</title></head>");
     strcat(webbuff, "<body>");
-    strcat(webbuff, "<div style=\"text-align:center; background-color:#F4F4F4; color:#00AEDB;\"><h1>ESP8266 Mbed IoT Web PID Controller</h1>");
-    strcat(webbuff, "Hit Count - ");
-    strcat(webbuff, webcount);
-    strcat(webbuff, "</div><br /><hr>");
+    //strcat(webbuff, "<div style=\"text-align:center; background-color:#F4F4F4; color:#00AEDB;\"><h1>ESP8266 Mbed IoT Web PID Controller</h1>");
+    //strcat(webbuff, "Hit Count - ");
+    //strcat(webbuff, webcount);
+    //strcat(webbuff, "</div><br /><hr>");
     //server message (mostly errors)
-    strcat(webbuff, "<div stye=\"text-align:center; background-color:#F4F4F4; color:#00AEDB;\"><h3>Server messages</h3>");
-    strcat(webbuff, _serverMessage);
-    strcat(webbuff, "</div><br><hr>");
-    strcat(webbuff, "<p><form method=\"POST\">");
-    if(led1==0) {
-        strcat(webbuff, "<p><input type=\"radio\" name=\"led1\" value=\"0\" checked>  LED 1 off");
-        strcat(webbuff, "<br><input type=\"radio\" name=\"led1\" value=\"1\" >  LED 1 on<br>");
-    } else {
-        strcat(webbuff, "<p><input type=\"radio\" name=\"led1\" value=\"0\" >  LED 1 off");
-        strcat(webbuff, "<br><input type=\"radio\" name=\"led1\" value=\"1\" checked>  LED 1 on<br>");
-    }
+    //strcat(webbuff, "<div stye=\"text-align:center; background-color:#F4F4F4; color:#00AEDB;\"><h3>Server messages</h3>");
+    //strcat(webbuff, _serverMessage);
+    //strcat(webbuff, "</div><br><hr>");
+    strcat(webbuff, "<form method=\"POST\">");
+    //if(led1==0) {
+    //    strcat(webbuff, "<p><input type=\"radio\" name=\"led1\" value=\"0\" checked>  LED 1 off");
+    //    strcat(webbuff, "<br><input type=\"radio\" name=\"led1\" value=\"1\" >  LED 1 on<br>");
+    //} else {
+    //    strcat(webbuff, "<p><input type=\"radio\" name=\"led1\" value=\"0\" >  LED 1 off");
+    //    strcat(webbuff, "<br><input type=\"radio\" name=\"led1\" value=\"1\" checked>  LED 1 on<br>");
+    //}
     // ground regulation
     if(_tempGroundRegulation) {
         strcat(webbuff, "<p><input type=\"radio\" name=\"groundRegulation\" value=\"1\" checked>  Ground regulation ON");
@@ -185,24 +188,20 @@
     ConvertToCharArray(_groundSetPoint);
     strcat(webbuff, _str);
     strcat(webbuff, "\"><br>");
-    strcat(webbuff, "<p><input type=\"radio\" name=\"nothing\" value=\"1\" checked>");
-    strcat(webbuff, "<p><input type=\"submit\" value=\"send-refresh\" style=\"background: #3498db;");
-    strcat(webbuff, "background-image:-webkit-linear-gradient(top, #3498db, #2980b9);");
-    strcat(webbuff, "background-image:linear-gradient(to bottom, #3498db, #2980b9);");
-    strcat(webbuff, "-webkit-border-radius:12;border-radius: 12px;font-family: Arial;color:#ffffff;font-size:20px;padding:");
-    strcat(webbuff, "10px 20px 10px 20px; border:solid #103c57 3px;text-decoration: none;");
-    strcat(webbuff, "background: #3cb0fd;");
-    strcat(webbuff, "background-image:-webkit-linear-gradient(top,#3cb0fd,#1a5f8a);");
-    strcat(webbuff, "background-image:linear-gradient(to bottom,#3cb0fd,#1a5f8a);");
-    strcat(webbuff, "text-decoration:none;\"></form>");
+    strcat(webbuff, "<p><input type=\"radio\" name=\"nothing\" value=\"1\" checked></p>");
+    strcat(webbuff, "<p><input type=\"submit\"></p>");
+    strcat(webbuff, "</form>");
     strcat(webbuff, "</body></html>");
 // end of WEB page data
     bufl = strlen(webbuff); // get total page buffer length
     sprintf(cmdbuff,"AT+CIPSEND=%d,%d\r\n", linkID, bufl); // send IPD link channel and buffer character length.
+    pc.printf("%s \n\r", cmdbuff);
     timeout=200;
     getcount=7;
     SendCMD();
+    Thread::wait(1000);
     getreply();
+    pc.printf("%s \n\r", replybuff);
     SendWEB();  // send web page
     memset(webbuff, '\0', sizeof(webbuff));
     sendcheck();
@@ -222,31 +221,31 @@
         }
     }
     if(weberror==1) { // restart connection
-        pc.printf("sendcheck - restarting connection \n\r");
+        //pc.printf("sendcheck - restarting connection \n\r");
         strcpy(cmdbuff, "AT+CIPMUX=1\r\n");
         timeout=500;
         getcount=10;
         SendCMD();
         getreply();
-        pc.printf(replybuff);
+        //pc.printf(replybuff);
         sprintf(cmdbuff,"AT+CIPSERVER=0,%d\r\n", port);
         timeout=500;
         getcount=10;
         SendCMD();
         getreply();
-        pc.printf(replybuff);
+        //pc.printf(replybuff);
         sprintf(cmdbuff,"AT+CIPSERVER=1,%d\r\n", port);
         timeout=500;
         getcount=10;
         SendCMD();
         getreply();
-        pc.printf(replybuff);
+        //pc.printf(replybuff);
     } else {
-        pc.printf("sendcheck ok \n\r");
+        //pc.printf("sendcheck ok \n\r");
         sprintf(cmdbuff, "AT+CIPCLOSE=%s\r\n",channel); // close current connection
         SendCMD();
         getreply();
-        pc.printf(replybuff);
+        //pc.printf(replybuff);
     }
     t2.reset();
 }
@@ -274,7 +273,7 @@
     int x = strcspn (webbuff,"+");
     if(x) {
         strcpy(webdata, webbuff + x);
-        //pc.printf("webdata received: %s", webdata);
+        //////pc.printf("webdata received: %s", webdata);
         weberror=0;
         int numMatched = sscanf(webdata,"+IPD,%d,%d:%s", &linkID, &ipdLen, type);
         if (strstr(webdata, "led1=1") != NULL ) {
@@ -290,127 +289,127 @@
             _tempGroundRegulation = false;
         // pid min Output
         if (strstr(webdata, "groundPidMinOutput") != NULL ){
-            //pc.printf("\n\r looking for data \n\r");
+            //////pc.printf("\n\r looking for data \n\r");
             char* p_webdata = strstr(webdata, "groundPidMinOutput");
             p_webdata = p_webdata + strlen("groundPidMinOutput") + 1;
             int i = 0;
             while(*p_webdata != '&'){
-                pc.printf("%c", *p_webdata);
+                ////pc.printf("%c", *p_webdata);
                 _str[i] = *p_webdata;
                 p_webdata += 1;   
                 i++; 
             }
-            pc.printf("\n\r");
+            ////pc.printf("\n\r");
             _str[i] = '\0';
-            //pc.printf("groundPidMinOutput: %s", _str);
+            //////pc.printf("groundPidMinOutput: %s", _str);
             _groundPidMinOutput = atof(_str);
-            //pc.printf("\n\r end of looking for data \n\r");
+            //////pc.printf("\n\r end of looking for data \n\r");
         }
         //pid max output
         if (strstr(webdata, "groundPidMaxOutput") != NULL ){
-            //pc.printf("\n\r looking for data \n\r");
+            //////pc.printf("\n\r looking for data \n\r");
             char* p_webdata = strstr(webdata, "groundPidMaxOutput");
             p_webdata = p_webdata + strlen("groundPidMaxOutput") + 1;
             int i = 0;
             while(*p_webdata != '&'){
-                pc.printf("%c", *p_webdata);
+                ////pc.printf("%c", *p_webdata);
                 _str[i] = *p_webdata;
                 p_webdata += 1;   
                 i++; 
             }
-            //pc.printf("\n\r");
+            //////pc.printf("\n\r");
             _str[i] = '\0';
-            //pc.printf("groundPidMaxOutput: %s", _str);
+            //////pc.printf("groundPidMaxOutput: %s", _str);
             _groundPidMaxOutput = atof(_str);
-            //pc.printf("\n\r end of looking for data \n\r");
+            //////pc.printf("\n\r end of looking for data \n\r");
         }
         //bias
         if (strstr(webdata, "bias") != NULL ){
-            //pc.printf("\n\r looking for data \n\r");
+            //////pc.printf("\n\r looking for data \n\r");
             char* p_webdata = strstr(webdata, "bias");
             p_webdata = p_webdata + strlen("bias") + 1;
             int i = 0;
             while(*p_webdata != '&'){
-                pc.printf("%c", *p_webdata);
+                ////pc.printf("%c", *p_webdata);
                 _str[i] = *p_webdata;
                 p_webdata += 1;   
                 i++; 
             }
-            //pc.printf("\n\r");
+            //////pc.printf("\n\r");
             _str[i] = '\0';
-            //pc.printf("bias: %s", _str);
+            //////pc.printf("bias: %s", _str);
             _bias = atof(_str);
-            //pc.printf("\n\r end of looking for data \n\r");
+            //////pc.printf("\n\r end of looking for data \n\r");
         }
         // PID values
         if (strstr(webdata, "proportional") != NULL ){
-            //pc.printf("\n\r looking for data \n\r");
+            //////pc.printf("\n\r looking for data \n\r");
             char* p_webdata = strstr(webdata, "proportional");
             p_webdata = p_webdata + strlen("proportional") + 1;
             int i = 0;
             while(*p_webdata != '&'){
-                pc.printf("%c", *p_webdata);
+                ////pc.printf("%c", *p_webdata);
                 _str[i] = *p_webdata;
                 p_webdata += 1;   
                 i++; 
             }
-            //pc.printf("\n\r");
+            //////pc.printf("\n\r");
             _str[i] = '\0';
-            //pc.printf("proportional: %s", _str);
+            //////pc.printf("proportional: %s", _str);
             _newP = atof(_str);
-            //pc.printf("\n\r end of looking for data \n\r");
+            //////pc.printf("\n\r end of looking for data \n\r");
         }
         if (strstr(webdata, "integral") != NULL){
-            //pc.printf("\n\r looking for data \n\r");
+            //////pc.printf("\n\r looking for data \n\r");
             char* p_webdata = strstr(webdata, "integral");
             p_webdata = p_webdata + strlen("integral") + 1;
             int i = 0;
             while(*p_webdata != '&'){
-                pc.printf("%c", *p_webdata);
+                ////pc.printf("%c", *p_webdata);
                 _str[i] = *p_webdata;
                 p_webdata += 1;   
                 i++; 
             }
-            //pc.printf("\n\r");
+            //////pc.printf("\n\r");
             _str[i] = '\0';
-            //pc.printf("integral: %s", _str);
+            //////pc.printf("integral: %s", _str);
             _newI = atof(_str);
-            //pc.printf("\n\r end of looking for data \n\r");    
+            //////pc.printf("\n\r end of looking for data \n\r");    
             
         }
         if (strstr(webdata, "derivative") != NULL){
-            //pc.printf("\n\r looking for data \n\r");
+            //////pc.printf("\n\r looking for data \n\r");
             char* p_webdata = strstr(webdata, "derivative");
             p_webdata = p_webdata + strlen("derivative") + 1;
             int i = 0;
             while(*p_webdata != '&'){
-                pc.printf("%c", *p_webdata);
+                ////pc.printf("%c", *p_webdata);
                 _str[i] = *p_webdata;
                 p_webdata += 1;   
                 i++; 
             }
-            //pc.printf("\n\r");
+            //////pc.printf("\n\r");
             _str[i] = '\0';
-            //pc.printf("derivative: %s", _str);
+            //////pc.printf("derivative: %s", _str);
             _newD = atof(_str);
-            //pc.printf("\n\r end of looking for data \n\r");       
+            //////pc.printf("\n\r end of looking for data \n\r");       
         }
         if (strstr(webdata, "groundSetPoint") != NULL){
-            //pc.printf("\n\r looking for data \n\r");
+            //////pc.printf("\n\r looking for data \n\r");
             char* p_webdata = strstr(webdata, "groundSetPoint");
             p_webdata = p_webdata + strlen("groundSetPoint") + 1;
             int i = 0;
             while(*p_webdata != '&'){
-                pc.printf("%c", *p_webdata);
+                ////pc.printf("%c", *p_webdata);
                 _str[i] = *p_webdata;
                 p_webdata += 1;   
                 i++; 
             }
-            //pc.printf("\n\r");
+            //////pc.printf("\n\r");
             _str[i] = '\0';
-            //pc.printf("groundSetPoint: %s", _str);
+            //////pc.printf("groundSetPoint: %s", _str);
             _groundSetPoint = atof(_str);
-            //pc.printf("\n\r end of looking for data \n\r");       
+            //////pc.printf("\n\r end of looking for data \n\r");       
         }
         sprintf(channel, "%d",linkID);
         if (strstr(webdata, "GET") != NULL) {
@@ -430,37 +429,37 @@
 }
 
 void startserver(){
-    pc.printf("++++++++++ Resetting ESP ++++++++++\r\n");
+    //pc.printf("++++++++++ Resetting ESP ++++++++++\r\n");
     strcpy(cmdbuff,"AT+RST\r\n");
     timeout=8000;
     getcount=1000;
     SendCMD();
     getreply();  
-    pc.printf(replybuff);
-    pc.printf("%d",count);
+    //pc.printf(replybuff);
+    //pc.printf("%d",count);
     if (strstr(replybuff, "OK") != NULL) {
-        pc.printf("\n++++++++++ Starting Server ++++++++++\r\n");
+        //////pc.printf("\n++++++++++ Starting Server ++++++++++\r\n");
         strcpy(cmdbuff, "AT+CIPMUX=1\r\n");  // set multiple connections.
         timeout=500;
         getcount=20;
         SendCMD();
         getreply();
-        pc.printf(replybuff);
+        //pc.printf(replybuff);
         sprintf(cmdbuff,"AT+CIPSERVER=1,%d\r\n", port);
         timeout=500;
         getcount=20;
         SendCMD();
         getreply();
-        pc.printf(replybuff);
+        //pc.printf(replybuff);
         wait(1);
         sprintf(cmdbuff,"AT+CIPSTO=%d\r\n",SERVtimeout);
         timeout=500;
         getcount=50;
         SendCMD();
         getreply();
-        pc.printf(replybuff);
+        //pc.printf(replybuff);
         wait(5);
-        pc.printf("\n Getting Server IP \r\n");
+        //pc.printf("\n Getting Server IP \r\n");
         strcpy(cmdbuff, "AT+CIFSR\r\n");
         timeout=2500;
         getcount=200;  
@@ -471,19 +470,19 @@
                 weberror=1;   // wait for valid IP
             }
         }
-        pc.printf("\n Enter WEB address (IP) found below in your browser \r\n\n");
-        pc.printf("\n The MAC address is also shown below,if it is needed \r\n\n");
+        //pc.printf("\n Enter WEB address (IP) found below in your browser \r\n\n");
+        //pc.printf("\n The MAC address is also shown below,if it is needed \r\n\n");
         replybuff[strlen(replybuff)-1] = '\0';
         //char* IP = replybuff + 5;
         sprintf(webdata,"%s", replybuff);
         //SAVE IP ADDRESS
         get_ip_address(webdata);
-        pc.printf("ip_address: %s\n\r",ip_address);
-        pc.printf(webdata);
-        pc.printf("\n\n++++++++++ Ready ++++++++++\r\n\n");
+        //pc.printf("ip_address: %s\n\r",ip_address);
+        //pc.printf(webdata);
+        //pc.printf("\n\n++++++++++ Ready ++++++++++\r\n\n");
         esp.attach(&callback);
     } else {
-        pc.printf("\n++++++++++ ESP8266 error, check power/connections ++++++++++\r\n");
+        //pc.printf("\n++++++++++ ESP8266 error, check power/connections ++++++++++\r\n");
         while(1) {}
     }
     t2.reset();