From 702223dc58f1342e08b69e51bd6500dab2863b04 Mon Sep 17 00:00:00 2001 From: Bluedragon Date: Sat, 30 Apr 2022 04:03:38 +0700 Subject: [PATCH] add Set Time Page --- data/constanta.html | 12 +- data/settime.html | 64 +++++ src/constanta.h | 12 +- src/index.h | 70 ++++++ src/main.cpp | 602 +++++++++++++++++++++++++++++++++----------- 5 files changed, 599 insertions(+), 161 deletions(-) create mode 100644 data/settime.html diff --git a/data/constanta.html b/data/constanta.html index df3a374..189092b 100644 --- a/data/constanta.html +++ b/data/constanta.html @@ -69,15 +69,15 @@ const char HTML_CONSTROW[] PROGMEM = R"rawliteral(
+ id="%dist%" name="%dist%" class="form-control dist" onkeypress="return onlyNumberKey(event,this)" onchange="chback(this)" value="%distval%">
-
+
+ id="%time%" name="%time%" class="form-control time" onkeypress="return onlyNumberKey(event,this)" onchange="chback(this)" value="%timeval%">
-
+
@@ -125,7 +125,7 @@ const char HTML_CONSTEND[] PROGMEM = R"rawliteral( // console.log(String.fromCharCode(i)); // data = '{"req":"'+String.fromCharCode(i)+'"}' - xhr.send(data); + // xhr.send(data); // } }; diff --git a/data/settime.html b/data/settime.html new file mode 100644 index 0000000..5b07727 --- /dev/null +++ b/data/settime.html @@ -0,0 +1,64 @@ + + Rally TerraTrip v1 Set Main Time + + + + + + + + + +
+
+

12345

+

TRACK A

+

Time: 00:00:00

+

123.4Km/h

+
+
+ +
+

Set Time (NTP Time:9)->

+

+ + + +

+
+ +
+ + + \ No newline at end of file diff --git a/src/constanta.h b/src/constanta.h index ad2780f..717d6f8 100644 --- a/src/constanta.h +++ b/src/constanta.h @@ -70,15 +70,15 @@ const char HTML_CONSTROW[] PROGMEM = R"rawliteral(
+ id="%dist%" name="%dist%" class="form-control dist" onkeypress="return onlyNumberKey(event,this)" onchange="chback(this)" value="%distval%">
-
+
+ id="%time%" name="%time%" class="form-control time" onkeypress="return onlyNumberKey(event,this)" onchange="chback(this)" value="%timeval%">
-
+
@@ -126,7 +126,7 @@ const char HTML_CONSTEND[] PROGMEM = R"rawliteral( // console.log(String.fromCharCode(i)); // data = '{"req":"'+String.fromCharCode(i)+'"}' - xhr.send(data); + // xhr.send(data); // } }; diff --git a/src/index.h b/src/index.h index 04f0d90..92b9a46 100644 --- a/src/index.h +++ b/src/index.h @@ -429,4 +429,74 @@ const char HTML_CALIBRATION[] PROGMEM = R"rawliteral( } +)rawliteral"; + + + + +const char HTML_SETTIME[] PROGMEM = R"rawliteral( + + Rally TerraTrip v1 Set Main Time + + + + + + + + + +
+
+

12345

+

TRACK A

+

Time: 00:00:00

+

123.4Km/h

+
+
+ +
+

Set Time (NTP Time:9)->

+

+ + + +

+
+ +
+ + + )rawliteral"; \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 421efbc..7b7c292 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -35,6 +35,7 @@ AsyncWebServer server(80); AsyncWebSocket ws("/ws"); AsyncWebSocket wscal("/wscal"); +AsyncWebSocket wssettime("/wssettime"); //WiFiManager wifiManager; // REPLACE WITH YOUR NETWORK CREDENTIALS @@ -63,10 +64,12 @@ const int daylightOffset_sec = 0; uint8_t STATE, dircount1, dircount2; //The current state machine state //volatile DynamicJsonDocument getRally(200); -String getRallyJson="{\"counter\":0}"; -String getCalibJson="{\"counter\":0}"; +String strRallyJson="{\"counter\":0}"; +String strCalibJson="{\"counter\":0}"; +String strSetTimeJson="{\"counter\":0}"; int globalClientRally=0; int globalClientCalib=0; +int globalClientSetTime=0; #define REQUESTCOUNT 3 AsyncWebServerRequest *gRequest[REQUESTCOUNT]; @@ -74,7 +77,7 @@ JsonVariant gJson[REQUESTCOUNT]; uint8_t gReqCount=0; bool gGotRequest[REQUESTCOUNT]; boolean grequestIsFull=false; - +boolean semaphoreS = true; AsyncWebServerRequest *gRequestConstHTML[REQUESTCOUNT]; @@ -174,7 +177,7 @@ unsigned int recv_size = 0; unsigned long prevsettime, intervalsettime = 250; unsigned long prevtempint, tempinterval=60000; unsigned long prevtemprally, tempintervalrally=333; -unsigned long prevCalculatingRallyMillis, calculatingRallyMillis=333; +unsigned long prevCalculatingRallyMillis, calculatingRallyMillis=1000; unsigned long prevcalibrationtime, calibrationtimeinterval = 200; unsigned long updatecounttime=0; float temperature; @@ -192,7 +195,8 @@ byte y; unsigned long startmillis, startVSSCount; unsigned long startsavemillis; unsigned long broadcastwebsocket; -unsigned long broadcastwebsocketcalib; +unsigned long timerWebsocketCalibration; +unsigned long timerWebsocketSetTime; volatile unsigned long howLongInMillis; //#include //https://github.com/JChristensen/Button //from change to @@ -400,7 +404,7 @@ String processor(const String& var){ // } return String(); } -String procConst(const String& var){ +String processorConstant(const String& var){ Serial.print("proConst->"); Serial.print(var); return String(); @@ -678,7 +682,7 @@ String getsTime(uint8_t getsTimecurtrip){ char sTime[6]; // if (sTimeHour<10){ sprintf(sTime, "%02d:%02d", sTimeHour, sTimeMin); - Serial.print(getsTimecurtrip);Serial.print("getsTime:");Serial.print(sTimeHour);Serial.print(":");Serial.print(sTimeMin);Serial.print(";");Serial.println(sTime); + // Serial.print(getsTimecurtrip);Serial.print("getsTime:");Serial.print(sTimeHour);Serial.print(":");Serial.print(sTimeMin);Serial.print(";");Serial.println(sTime); // } return sTime; } @@ -690,7 +694,7 @@ void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventT Serial.println("Websocket client connection received"); Serial.print("Rally Client=");Serial.println(globalClientRally); Serial.print("IPAdd client:"); Serial.println(client->remoteIP()); - client->text(getRallyJson); + client->text(strRallyJson); } else if(type == WS_EVT_DISCONNECT){ globalClientRally--; Serial.println("Client disconnected"); @@ -808,13 +812,13 @@ void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventT } } -void onWsEvent2(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len){ +void onWsEventCalibration(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len){ if(type == WS_EVT_CONNECT){ globalClientCalib++; Serial.println("wscal Websocket client connection received"); Serial.print("Calib Client=");Serial.println(globalClientCalib); Serial.print("IPAdd client:"); Serial.println(client->remoteIP()); - client->text(getCalibJson); + client->text(strCalibJson); } else if(type == WS_EVT_DISCONNECT){ globalClientCalib--; Serial.println("wscal Client disconnected"); @@ -878,6 +882,72 @@ void onWsEvent2(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEvent } } +void onWsEventSetTime(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len){ + if(type == WS_EVT_CONNECT){ + globalClientSetTime++; + Serial.println("wssettime Websocket client connection received"); + Serial.print("SetTime Client=");Serial.println(globalClientSetTime); + Serial.print("IPAdd client:");Serial.println(client->remoteIP()); + client->text(strSetTimeJson); + } else if(type == WS_EVT_DISCONNECT){ + globalClientSetTime--; + Serial.println("wssettime Client disconnected"); + Serial.print("SetTime Client=");Serial.println(globalClientSetTime); + Serial.print("IPAdd client:"); Serial.println(client->remoteIP()); + } else if(type == WS_EVT_DATA){ + Serial.print("wssettime IPAdd client:"); Serial.println(client->remoteIP()); + Serial.printf("[%u] get Text: %s\n", len, data); + String message = String((char*)( data)); + Serial.println(message); + + DynamicJsonDocument doc(32); + // Deserialize the data + DeserializationError error = deserializeJson(doc, message); + // parse the parameters we expect to receive (TO-DO: error handling) + // test if parsing succeeds + if (error){ + Serial.print("wssettime deserialiseJson() failed: "); + Serial.println(error.c_str()); + client->text(error.c_str()); + return; + } + // String setTime=doc["setTime"]; + const char* setTime = doc["setTime"].as(); + Serial.print("setTime=");Serial.println(setTime); + struct ts mts; + struct tm mtm; + if (setTime!=NULL){ + if (isShortTime(setTime)){ + String x = getSplitValue(setTime, ':', 0); + uint8_t xHourVal=(uint8_t)(x.toInt()); + String y = getSplitValue(setTime, ':', 1); + int yMinVal=(uint8_t)(y.toInt()); + Serial.print("x=");Serial.println(xHourVal); + Serial.print("y=");Serial.println(yMinVal); + DS3231_get(&mts); + mts.sec=0; + mts.min=yMinVal; + mts.hour=xHourVal; + DS3231_set(mts); + Serial.println("Manual Time Saved"); + // } else if(setTime=="NTP") { //save NTP Time to DS3231 + } else if(strcmp(setTime, "NTP") == 0) { //save NTP Time to DS3231 + if(!getLocalTime(&mtm)){ + Serial.println("Failed to obtain NTP time"); + // return; + } + mts.hour = mtm.tm_hour; + mts.min = mtm.tm_min; + mts.sec = mtm.tm_sec; + mts.mday = mtm.tm_mday; + mts.mon = mtm.tm_mon; + mts.year = mtm.tm_year; + DS3231_set(mts); + Serial.println("NTP Saved"); + } + } + } +} // void configModeCallback (WiFiManager *myWiFiManager) { // Serial.println("Entered config mode"); // Serial.println(WiFi.softAPIP()); @@ -1225,6 +1295,41 @@ String runningtimeforESP32(byte x1,byte y1) // Serial.print("runningtimeforesp:");Serial.println(runningTIME); return runningTIME; } + +String runningtimeforESP32(struct tm *mt) +{ + String runningTIME; + // lcd.setCursor(x1,y1); //Go to second line of the LCD Screen + if(mt->tm_hour<10) + { + // lcd.print("0"); + runningTIME="0"; + } + // lcd.print(t.hour); + // lcd.print(":"); + runningTIME+=mt->tm_hour; + runningTIME+=":"; + if(mt->tm_min<10) + { + // lcd.print("0"); + runningTIME+="0"; + } + // lcd.print(t.min); + // lcd.print(":"); + runningTIME+=mt->tm_min; + runningTIME+=":"; + if(mt->tm_sec<10) + { + // lcd.print("0"); + runningTIME+="0"; + } + // lcd.print(t.sec); + runningTIME+=mt->tm_sec; + // Serial.print("t.hour:");Serial.println(t.hour); + // Serial.print("runningtimeforesp:");Serial.println(runningTIME); + return runningTIME; +} + String runningtimeforESP32test1(byte x1,byte y1) { // String runningTIME; @@ -1481,7 +1586,7 @@ void redrawcalibrationMenu() void redrawcalibrationMenuForESP32() { DynamicJsonDocument getCalib(512); - deserializeJson(getCalib, getCalibJson); + deserializeJson(getCalib, strCalibJson); float distance; Calibrationcount = Calibrationcount + (VSSCount-Calibrationtime); distance = (float)Calibrationcount/((float)Calibration); @@ -1510,10 +1615,34 @@ void redrawcalibrationMenuForESP32() getCalib["calmeter"]=String(float(Calibration)/1000,3); getCalib["calval"]= Calibration; - getCalibJson = ""; - serializeJson(getCalib, getCalibJson); + strCalibJson = ""; + serializeJson(getCalib, strCalibJson); } +void fillSetTimeJsonForESP32() +{ + DynamicJsonDocument docSetTime(512); + deserializeJson(docSetTime, strSetTimeJson); + + docSetTime["counter"]=VSSCount; ///// + docSetTime["curTrip"]=String(Trip[curTrip].sub); ///// + docSetTime["curTripSpeed"]=String(Trip[curTrip].speed); ///// + DS3231_get(&t); + struct tm NTPTimeInfo; + if(!getLocalTime(&NTPTimeInfo)){ + Serial.println("Failed to obtain NTP time"); + // return; + } + gcurTime = runningtimeforESP32(6,0); + String NTPTime; + NTPTime = runningtimeforESP32(&NTPTimeInfo); + docSetTime["curTime"]=gcurTime; + + docSetTime["NTPTime"]=NTPTime; + + strSetTimeJson = ""; + serializeJson(docSetTime, strSetTimeJson); +} // // char digitClock(int v){ // // if (v < 10) @@ -1754,7 +1883,7 @@ void redrawrallyMenu() void calculationRally_BACKUP() //calculation only ESP32 { DynamicJsonDocument getRally(1024); - deserializeJson(getRally, getRallyJson); + deserializeJson(getRally, strRallyJson); DS3231_get(&t); //Get time // Serial.println("startCRal"); updateCount(); @@ -1936,8 +2065,8 @@ void calculationRally_BACKUP() //calculation only ESP32 // lcd.setCursor(x,y); getRally["counter"]=VSSCount; - getRallyJson=""; - serializeJson(getRally, getRallyJson); + strRallyJson=""; + serializeJson(getRally, strRallyJson); // Serial.println("ENDCRal"); } ///// calculation only for esp32 @@ -1948,16 +2077,17 @@ void calculationRally() //calculation only ESP32 // Serial.println("startCRal"); updateCount(); - distance1 = (float)count1/((float)Calibration); // * 1); - distance2 = (float)count2/((float)Calibration); + float speed1=0; + distance2 = (float)count2/((float)Calibration); + distance1 = (float)count1/((float)Calibration); // * 1); if ((distance1 - startdistance) > 0) { speed1 = (distance1-startdistance)/(millis()-startspeed)*3600000; } - - startdistance = distance1; startspeed = millis(); //startspeed is only one no startspeed2 + startdistance = distance1; + if ((millis()-startsavemillis)>0) { @@ -1973,7 +2103,7 @@ void calculationRally() //calculation only ESP32 startsavemillis=millis()+2500; } // Serial.print(Trip[curTrip].sub);Serial.print(Trip[curTrip].speed);Serial.print(";");Serial.println(Trip[curTrip].startHour); - + delay(1); gcurTime = runningtimeforESP32(6,0); sprintf(gcur_speed_str, "%3d.%01d", (int)speed1, (int)((speed1 - (int)speed1)*10)); @@ -1997,7 +2127,7 @@ void calculationRally() //calculation only ESP32 else { sprintf(gcur_distance2_str, "%03d.%01d", (int)distance2, (int)((distance2 - (int)distance2)*10)); } - + delay(1); float distancetime1 = distance1 * 60 / constanta; float distancetime2 = distance2 * 60 / constanta; @@ -2028,6 +2158,7 @@ void calculationRally() //calculation only ESP32 tottime1 = totcurrentsecs - tottime1; } } + delay(1); //Serial.print(negatifsign);Serial.print(";"); Serial.println(tottime1); hours1 = ((int)(tottime1 / 3600))%24; mins1 = (int)((tottime1 % 3600)/60); @@ -2040,7 +2171,7 @@ void calculationRally() //calculation only ESP32 if (hours1<10) sprintf(gcur_time1_str, " %s%01d:%02d:%02d", (negatifsign?"-":" "), hours1, mins1, secs1); else sprintf(gcur_time1_str, "%s%02d:%02d:%02d", (negatifsign?"-":" "), hours1, mins1, secs1); } - +delay(1); // Print Second TIME int secs2, mins2, hours2; @@ -2061,7 +2192,7 @@ void calculationRally() //calculation only ESP32 tottime2 = totcurrentsecs - tottime2 ; } } - +delay(1); hours2 = ((int)(tottime2 / 3600))%24; mins2 = (int)((tottime2 % 3600)/60); secs2 = (tottime2 % 60); @@ -2078,7 +2209,7 @@ void calculationRally() //calculation only ESP32 void fillRallyJsonWithData() { DynamicJsonDocument getRally(1024); - deserializeJson(getRally, getRallyJson); + deserializeJson(getRally, strRallyJson); getRally["Trip"]=String(Trip[curTrip].sub); getRally["TSpeed"]=String(Trip[curTrip].speed); sprintf(gcurTripStartTime, "%02u:%02u:%02u", Trip[curTrip].startHour, Trip[curTrip].startMin, Trip[curTrip].startSec); @@ -2099,8 +2230,8 @@ void fillRallyJsonWithData() { getRally["counter"]=String(gVSSCountDiff); if (showTIME) getRally["TDiff"]="Time"; //add 1 space else getRally["TDiff"]="TDiff"; - getRallyJson=""; - serializeJson(getRally, getRallyJson); + strRallyJson=""; + serializeJson(getRally, strRallyJson); } void fillRallyLCDScreen() { @@ -2315,10 +2446,155 @@ void handelSetWifi(AsyncWebServerRequest *request){ // Serial.println("ini /setwifi aja");Serial.println(inputMessage); request->send(200, "text/text", inputMessage); } + + +void handleloadConst(AsyncWebServerRequest *request, JsonVariant &json) { + // Serial.print("ptr hloadconst:");Serial.println((unsigned int)request,HEX); + // isloadingConst=true; + String constTrip; + String tempTrip; + tempTrip.reserve(100); + String tripload; + + tripload = "{\"alltrip\":"; + tripload+="["; + uint8_t maxI=81; + DynamicJsonDocument doc(256); + float speedinconstanta; + // unsigned long sTimeinconstanta; + String tempSpeed; + tempSpeed.reserve(10); + String tempsTime; + tempsTime.reserve(10); + for(uint8_t i=65; ibeginResponseStream("application/json"); + // DynamicJsonDocument doc(1024); + // deserializeJson(doc, tripload); + // doc["ok"]=1; + // serializeJson(doc, *response); + request->send(200, "text/plain", tripload); // handle data and respond + // request->send(tripload); + // isloadingConst=false; + Serial.print("constLoadTime=");Serial.println(millis()-howLongInMillis); + } + +char* unConstChar(const char* s) { + if(!s) + return NULL; + int i; + char* res = NULL; + res = (char*) malloc(strlen(s)+1); + if(!res){ + fprintf(stderr, "Memory Allocation Failed! Exiting...\n"); + exit(EXIT_FAILURE); + } else{ + for (i = 0; s[i] != '\0'; i++) { + res[i] = s[i]; + } + res[i] = '\0'; + return res; + } +} + +char *temp2char; +// char *charVal; +char gsTime[10]; +char gSpeed[10]; +void getTripFromSPIFF(uint8_t charcurTrip, char *&pDist, char **pSpeed, char **pTime, char **psTime){ + // Serial.print((uint32_t) psTime);Serial.print(";");Serial.print((uint32_t) *psTime);Serial.print(";");Serial.println((uint32_t) **psTime); + DynamicJsonDocument doc(200); + char filename[7] = "/tripZ"; + filename[5]=charcurTrip; + String tempTrip; + tempTrip.reserve(128); + String tempSpeed; + tempSpeed.reserve(10); + String tempsTime; + tempsTime.reserve(10); + // for(uint8_t i=65; i(); + // *pDist = (char*)xTemp1.c_str(); + // char charVal[10]; + float speedinconstanta = getMemSpeedInConstanta(charcurTrip-65); + tempsTime = getsTime(charcurTrip-65); + // Serial.print(speedinconstanta);Serial.print(";"); + // Serial.print(tempsTime);Serial.println(";"); + pDist = unConstChar( doc["dist"].as()); + // *pDist = "hi"; + // *pSpeed = (char*)doc["speed"].as(); //take from the eeprom data + *pTime = (char*)doc["time"].as(); + // *psTime = (char*)doc["stime"].as(); + // *pSpeed =(char*) (String(speedinconstanta,4).c_str()); //not working + // char hsTime[10]; + char charVal[10]; + tempsTime.toCharArray(gsTime, 10); + dtostrf(speedinconstanta,1,4,gSpeed); + // Serial.println(gsTime); + // const char *tempchar=tempsTime.c_str(); + // temp2char=(char*)tempchar; + // Serial.println(tempchar); + // Serial.println((char*)tempchar); + // Serial.println(temp2char); + // Serial.println((uint32_t) &temp2char); + // Serial.println((uint32_t) temp2char); + // *psTime = &(char*)tempchar; + // *psTime = temp2char; + // strncpy(charVal, tempsTime.c_str(), 6); + *psTime = gsTime; + // *psTime = charVal; + *pSpeed = gSpeed; + // Serial.println((uint32_t) gsTime); + // Serial.println((uint32_t) *psTime); + // dtostrf(speedinconstanta,1,4,charVal); + // *pSpeed = charVal; + // Serial.println(charVal); + +} void handleConstantaHTML(AsyncWebServerRequest *request) { //PAGE.replace("%serveripaddress%", WiFi.localIP().toString()); //request->send_P(200, "text/html", HTML_CALIBRATION, processor); // isloadingConst=true; + // Serial.print("ptr hloadconstHTML:");Serial.println((unsigned int)request,HEX); howLongInMillis=millis(); int pageZise; int pageZiseConstRow; @@ -2330,25 +2606,45 @@ void handleConstantaHTML(AsyncWebServerRequest *request) { PAGEROW.reserve(pageZiseConstRow); PAGE = FPSTR(HTML_CONSTHEADER); + char *xDist; + char *xSpeed; + char *xTime; + char *xsTime; for (uint8_t i=65; i<(TRIPSIZE+65); i++){ PAGEROW = FPSTR(HTML_CONSTROW); PAGEROW.replace("%A%", String(char(i))); - PAGEROW.replace("%speed%", "speed"+String(char(i))); PAGEROW.replace("%dist%", "dist"+String(char(i))); + PAGEROW.replace("%speed%", "speed"+String(char(i))); PAGEROW.replace("%time%", "time"+String(char(i))); PAGEROW.replace("%stime%", "stime"+String(char(i))); // Serial.println(PAGEROW); + // Fill with data + // Serial.print((uint32_t) xsTime);Serial.print(";");Serial.print((uint32_t) *xsTime);Serial.print(";");Serial.println((uint32_t) &xsTime); + getTripFromSPIFF(i, xDist, &xSpeed, &xTime, &xsTime); + // Serial.print((uint32_t) xsTime);Serial.print(";");Serial.print((uint32_t) *xsTime);Serial.print(";");Serial.println((uint32_t) &xsTime); + Serial.print(String(char(i)));Serial.print(";"); + Serial.print(xDist);Serial.print(";"); + Serial.print(xSpeed);Serial.print(";"); + Serial.print(xTime);Serial.print(";"); + Serial.print(xsTime);Serial.println(";"); + PAGEROW.replace("%distval%", xDist); + PAGEROW.replace("%speedval%", xSpeed); + PAGEROW.replace("%timeval%", xTime); + PAGEROW.replace("%stimeval%", xsTime); PAGE += PAGEROW; } PAGE += FPSTR(HTML_CONSTEND); // Serial.println(PAGE); - Serial.print(pageZise); - Serial.print("PAGE Size:"); - Serial.println(PAGE.length()); + request->send(200, "text/html", PAGE); // request->send(SPIFFS, "/constanta.html", String(), false, procConst); // read from spiif straight away // isloadingConst=false; + Serial.println(millis()); + Serial.print("PAGE Size:");Serial.println(pageZise); + Serial.print("Actual Size:");Serial.println(PAGE.length()); } + + void handlesetConst(AsyncWebServerRequest *request, JsonVariant &json){ isloadingConst=true; // JsonObject& jsonObj = json.as(); @@ -2375,7 +2671,7 @@ void handlesetConst(AsyncWebServerRequest *request, JsonVariant &json){ // const char* speed = data["speed"].as(); float speed = data["speed"].as(); float dist = data["dist"].as(); - const char* time = data["time"].as();//.as(); + int time = data["time"].as();//.as(); // if (!isNumeric(speed)){ // canSave = false; // } @@ -2392,6 +2688,9 @@ void handlesetConst(AsyncWebServerRequest *request, JsonVariant &json){ if (constvaluesettime==-1){ canSave = false; } + if (!(speed<100)) canSave = false; + if (!(dist<1000)) canSave = false; + if (!(time<1000)) canSave = false; Serial.print(constconstanta,3); Serial.print(";"); Serial.println(constCurTrip); Serial.print(constvaluesettime); Serial.print(";"); Serial.println(speed); @@ -2427,70 +2726,6 @@ void handlesetConst(AsyncWebServerRequest *request, JsonVariant &json){ } -void handleloadConst(AsyncWebServerRequest *request, JsonVariant &json) { - isloadingConst=true; - // while(iscalculatingRally) { - // yield(); - // } - String constTrip; - String tempTrip; - tempTrip.reserve(100); - String tripload; - - tripload = "{\"alltrip\":"; - tripload+="["; - uint8_t maxI=81; - DynamicJsonDocument doc(256); - float speedinconstanta; - // unsigned long sTimeinconstanta; - String tempSpeed; - tempSpeed.reserve(10); - String tempsTime; - tempsTime.reserve(10); - for(uint8_t i=65; ibeginResponseStream("application/json"); - // DynamicJsonDocument doc(1024); - // deserializeJson(doc, tripload); - // doc["ok"]=1; - // serializeJson(doc, *response); - request->send(200, "text/plain", tripload); // handle data and respond - // request->send(tripload); - isloadingConst=false; - Serial.print("constLoadTime=");Serial.println(millis()-howLongInMillis); - } - void setup() { // @@ -2555,8 +2790,9 @@ Trip[9].startSec = 58; //***************************END LCD Setup******************************** - getCalibJson.reserve(512); - getRallyJson.reserve(512); + strCalibJson.reserve(512); + strRallyJson.reserve(512); + strSetTimeJson.reserve(200); #ifdef DEBUG Serial.println("Setting time"); #endif @@ -2789,19 +3025,36 @@ Serial.println("calibration and constanta"); server.on("/bootstrap.css", HTTP_GET, [] (AsyncWebServerRequest *request) { // request->send_P(200, "text/html", HTML_startrally1, processor); - Serial.println("load /bootstrap.css"); + Serial.println("load /bootstrap.css");Serial.println(millis()); + while(!semaphoreS){ + delay(1); + } + semaphoreS = false; + Serial.println("load1 /bootstrap.css");Serial.println(millis()); request->send(SPIFFS, "/bootstrap.css", "text/css"); + // request->send(SPIFFS, "/tripA", "text/plain"); + semaphoreS = true; + // request->send(SPIFFS, "/bootstrap.css", "text/css"); }); server.on("/bootstrap.bundle.min.js", HTTP_GET, [] (AsyncWebServerRequest *request) { // request->send_P(200, "text/html", HTML_startrally1, processor); - Serial.println("load /bootstrap.bundle.min.js"); + Serial.print("load /bootstrap.bundle.min.js");Serial.println(millis()); + while(!semaphoreS){ + delay(1); + } + semaphoreS = false; + Serial.print("load1 /bootstrap.bundle.min.js");Serial.println(millis()); + // request->send(SPIFFS, "/tripA", "text/plain"); request->send(SPIFFS, "/bootstrap.bundle.min.js", "text/javascript"); + semaphoreS = true; + // request->send(SPIFFS, "/bootstrap.bundle.min.js", "text/javascript"); + }); server.on("/bootstrap.min.js", HTTP_GET, [] (AsyncWebServerRequest *request) { // request->send_P(200, "text/html", HTML_startrally1, processor); - Serial.println("load /bootstrap.min.js"); + Serial.print("load /bootstrap.min.js");Serial.println(millis()); request->send(SPIFFS, "/bootstrap.min.js", "text/javascript"); }); @@ -2874,6 +3127,21 @@ Serial.println("calibration and constanta"); // Serial.println("TOGGLE 2"); // request->redirect("/startrally1"); // }); + server.on("/settime", HTTP_GET, [] (AsyncWebServerRequest *request) { + int params = request->params(); //showing all params + for(int i=0;igetParam(i); + if(p->isFile()){ //p->isPost() is also true + Serial.printf("FILE[%s]: %s, size: %u\n", p->name().c_str(), p->value().c_str(), p->size()); + } else if(p->isPost()){ + Serial.printf("POST[%s]: %s\n", p->name().c_str(), p->value().c_str()); + } else { + Serial.printf("GET[%s]: %s\n", p->name().c_str(), p->value().c_str()); + } + } + //PAGE.replace("%serveripaddress%", WiFi.localIP().toString()); + request->send_P(200, "text/html", HTML_SETTIME, processor); + }); server.on("/calibration", HTTP_GET, [] (AsyncWebServerRequest *request) { int params = request->params(); //showing all params @@ -2891,63 +3159,85 @@ Serial.println("calibration and constanta"); request->send_P(200, "text/html", HTML_CALIBRATION, processor); }); server.on("/constanta", HTTP_GET, [] (AsyncWebServerRequest *request) { - Serial.println("start /const"); - if (grequestConstHTMLIsFull) { - Serial.println("XXXXXXXXXXXXXXXXXXXX CONSTHTML FULLLL"); - // request->send(200, "text/plain", "{\"response\":\"request Const is full\"}"); - Serial.println("XXXXXXXXXXXXXXXXXXXX CONSTHTML SENT"); - } else { - for (uint8_t i=0; isend(200, "text/plain", "{\"response\":\"request Const is full\"}"); + // Serial.println("XXXXXXXXXXXXXXXXXXXX CONSTHTML SENT"); + // } else { + // for (uint8_t i=0; isend(200, "text/plain", "{\"response\":\"request is full\"}"); - Serial.println("XXXXXXXXXXXXXXXXXXXX SENT"); - } else { - for (uint8_t i=0; isend(200, "text/plain", "{\"response\":\"request is full\"}"); + // Serial.println("XXXXXXXXXXXXXXXXXXXX SENT"); + // } else { + // for (uint8_t i=0; i=calculatingRallyMillis)){ - calculationRally(); - prevCalculatingRallyMillis=now1; + if(semaphoreS){ + prevCalculatingRallyMillis=millis(); + Serial.println("St calculationRally()"); + semaphoreS=false; + calculationRally(); + Serial.print("end calculationRally() in:");Serial.println(millis()-prevCalculatingRallyMillis); + prevCalculatingRallyMillis=now1; + + semaphoreS=true; + } } if ((millis()-broadcastwebsocket) > 330 && !isloadingConst && globalClientRally) { @@ -4003,18 +4301,24 @@ void loop() //loop from VSS RALLY V2 fillRallyJsonWithData(); // Serial.print("calculationRallyTime=");Serial.println(micros()-broadcastwebsocket); iscalculatingRally=false; - // Serial.println(getRallyJson); - ws.textAll(getRallyJson); + // Serial.println(strRallyJson); + ws.textAll(strRallyJson); // Serial.print("calculationRallyToTTime=");Serial.println(micros()-broadcastwebsocket); broadcastwebsocket = millis(); } - if ((millis()-broadcastwebsocketcalib) > 499 && !isloadingConst && globalClientCalib) { - broadcastwebsocketcalib = millis(); - redrawcalibrationMenuForESP32(); - // Serial.println(getCalibJson); + if ((millis()-timerWebsocketCalibration) > 499 && !isloadingConst && globalClientCalib) { + timerWebsocketCalibration = millis(); + // if (globalClientCalib) { + redrawcalibrationMenuForESP32(); + wscal.textAll(strCalibJson); + // } + } - wscal.textAll(getCalibJson); + if ((millis()-timerWebsocketSetTime) > 1000 && globalClientSetTime) { + timerWebsocketSetTime = millis(); + fillSetTimeJsonForESP32(); + wssettime.textAll(strSetTimeJson); } if(!isloadingConst){