add settime and fix load const

This commit is contained in:
Bluedragon 2022-05-01 08:14:34 +07:00
parent 702223dc58
commit d65d980642
3 changed files with 274 additions and 216 deletions

View File

@ -9,12 +9,24 @@
<link href="bootstrap.css" rel="stylesheet">
<script type = "text/javascript">
const ws = new WebSocket("ws://%serveripaddress%/wssettime");
ws.onopen = function() {console.log("WebSocket Connected");};
ws.onclose = function() {alert("WS Connection Closed");};
ws.onopen = function() {
console.log("WebSocket Connected");
if(document.getElementById("mainTime").classList.contains("bg-danger")){
document.getElementById("mainTime").classList.remove("bg-danger")
}
};
ws.onclose = function() {
// alert("WS Connection Closed");
if(!document.getElementById("mainTime").classList.contains("bg-danger")){
document.getElementById("mainTime").classList.add("bg-danger")
}
};
ws.onmessage = function(event) {
console.log(event.data);
var data = JSON.parse(event.data);
document.getElementById("counter").innerHTML = data.counter;
if (data.NTPTime=="N/A") document.getElementById("btnNTP").disabled = true;
else document.getElementById("btnNTP").disabled = false;
document.getElementById("counter").innerHTML = data.counter+";"+data.counter2;
document.getElementById("currenttrack").innerHTML = data.curTrip;
document.getElementById("currenttime").innerHTML = data.curTime;
document.getElementById("speed").innerHTML = data.curTripSpeed;
@ -32,9 +44,9 @@
<script src="bootstrap.bundle.min.js"></script>
<div class=" bg-secondary text-white">
<div class="row">
<div class="col-2 mt-1"><h2><span id="counter">12345</span></h2></div>
<div class="col-3 mt-1"><h2>TRACK <span id="currenttrack">A</span></h2></div>
<div class="col mt-1"><h2 class="text-center">Time: <span id="currenttime">00:00:00</span></h2></div>
<div class="col-2 mt-1"><h6><span id="counter">12345</span></h6></div>
<div class="col-3 mt-1"><h2>TRIP <span id="currenttrack">A</span></h2></div>
<div class="col mt-1 text-center" id="mainTime"><h2>Time: <span id="currenttime">00:00:00</span></h2></div>
<div class="col-3 mt-1 text-end"><h2><span id="speed">123.4</span>Km/h</h2></div>
<hr>
</div>
@ -45,7 +57,7 @@
<input type="time" step="any" maxlength="6" required oninput="javascript: if (this.value.length > this.maxLength) this.value = this.value.slice(0, this.maxLength);"
id="settime" name="settime" size="4">
<button class="btn btn-primary mb-2 fw-bold" onclick="setTime(0)">SET Time</button>
<button class="btn btn-primary mb-2 fw-bold" onclick="setTime(1)">Use NTP</button>
<button id="btnNTP" class="btn btn-primary mb-2 fw-bold" onclick="setTime(1)">Use NTP</button>
</h3></div>
</div>
<button ondblclick="location.href='/menu';" class="btn btn-primary fw-bold btn-sm mt-2 mb-2 ms-3">Back to Menu</button>

View File

@ -341,14 +341,24 @@ const char HTML_CALIBRATION[] PROGMEM = R"rawliteral(
<link href="bootstrap.css" rel="stylesheet">
<script type = "text/javascript">
const ws = new WebSocket("ws://%serveripaddress%/wscal");
ws.onopen = function() {console.log("WebSocket Connected");};
ws.onclose = function() {alert("WS Connection Closed");};
ws.onopen = function() {
console.log("WebSocket Connected");
if(document.getElementById("mainTime").classList.contains("bg-danger")){
document.getElementById("mainTime").classList.remove("bg-danger")
}
};
ws.onclose = function() {
// alert("WS Connection Closed");
if(!document.getElementById("mainTime").classList.contains("bg-danger")){
document.getElementById("mainTime").classList.add("bg-danger")
}
};
ws.onmessage = function(event) {
console.log(event.data);
var data = JSON.parse(event.data);
document.getElementById("currenttime").innerHTML = data.curTime;
document.getElementById("currenttrack").innerHTML = data.curTrip;
document.getElementById("counter").innerHTML = data.counter;
document.getElementById("counter").innerHTML = data.counter+";"+data.counter2;
document.getElementById("speed").innerHTML = data.curTripSpeed;
document.getElementById("caldist").innerHTML = data.caldist;
document.getElementById("calman").innerHTML = data.calman;
@ -364,9 +374,9 @@ const char HTML_CALIBRATION[] PROGMEM = R"rawliteral(
<script src="bootstrap.bundle.min.js"></script>
<div class=" bg-secondary text-white">
<div class="row">
<div class="col-2 mt-1"><h2><span id="counter">12345</span></h2></div>
<div class="col-3 mt-1"><h2>TRACK <span id="currenttrack">A</span></h2></div>
<div class="col mt-1"><h2 class="text-center">Time: <span id="currenttime">00:00:00</span></h2></div>
<div class="col-2 mt-1"><h5><span id="counter">12345</span></h5></div>
<div class="col-3 mt-1"><h2>TRIP <span id="currenttrack">A</span></h2></div>
<div class="col mt-1 text-center" id="mainTime"><h2>Time: <span id="currenttime">00:00:00</span></h2></div>
<div class="col-3 mt-1 text-end"><h2><span id="speed">123.4</span>Km/h</h2></div>
<hr>
</div>
@ -446,12 +456,24 @@ const char HTML_SETTIME[] PROGMEM = R"rawliteral(
<link href="bootstrap.css" rel="stylesheet">
<script type = "text/javascript">
const ws = new WebSocket("ws://%serveripaddress%/wssettime");
ws.onopen = function() {console.log("WebSocket Connected");};
ws.onclose = function() {alert("WS Connection Closed");};
ws.onopen = function() {
console.log("WebSocket Connected");
if(document.getElementById("mainTime").classList.contains("bg-danger")){
document.getElementById("mainTime").classList.remove("bg-danger")
}
};
ws.onclose = function() {
// alert("WS Connection Closed");
if(!document.getElementById("mainTime").classList.contains("bg-danger")){
document.getElementById("mainTime").classList.add("bg-danger")
}
};
ws.onmessage = function(event) {
console.log(event.data);
var data = JSON.parse(event.data);
document.getElementById("counter").innerHTML = data.counter;
if (data.NTPTime=="N/A") document.getElementById("btnNTP").disabled = true;
else document.getElementById("btnNTP").disabled = false;
document.getElementById("counter").innerHTML = data.counter+";"+data.counter2;
document.getElementById("currenttrack").innerHTML = data.curTrip;
document.getElementById("currenttime").innerHTML = data.curTime;
document.getElementById("speed").innerHTML = data.curTripSpeed;
@ -469,9 +491,9 @@ const char HTML_SETTIME[] PROGMEM = R"rawliteral(
<script src="bootstrap.bundle.min.js"></script>
<div class=" bg-secondary text-white">
<div class="row">
<div class="col-2 mt-1"><h2><span id="counter">12345</span></h2></div>
<div class="col-3 mt-1"><h2>TRACK <span id="currenttrack">A</span></h2></div>
<div class="col mt-1"><h2 class="text-center">Time: <span id="currenttime">00:00:00</span></h2></div>
<div class="col-2 mt-1"><h6><span id="counter">12345</span></h6></div>
<div class="col-3 mt-1"><h2>TRIP <span id="currenttrack">A</span></h2></div>
<div class="col mt-1 text-center" id="mainTime"><h2>Time: <span id="currenttime">00:00:00</span></h2></div>
<div class="col-3 mt-1 text-end"><h2><span id="speed">123.4</span>Km/h</h2></div>
<hr>
</div>
@ -482,7 +504,7 @@ const char HTML_SETTIME[] PROGMEM = R"rawliteral(
<input type="time" step="any" maxlength="6" required oninput="javascript: if (this.value.length > this.maxLength) this.value = this.value.slice(0, this.maxLength);"
id="settime" name="settime" size="4">
<button class="btn btn-primary mb-2 fw-bold" onclick="setTime(0)">SET Time</button>
<button class="btn btn-primary mb-2 fw-bold" onclick="setTime(1)">Use NTP</button>
<button id="btnNTP" class="btn btn-primary mb-2 fw-bold" onclick="setTime(1)">Use NTP</button>
</h3></div>
</div>
<button ondblclick="location.href='/menu';" class="btn btn-primary fw-bold btn-sm mt-2 mb-2 ms-3">Back to Menu</button>

View File

@ -70,6 +70,10 @@ String strSetTimeJson="{\"counter\":0}";
int globalClientRally=0;
int globalClientCalib=0;
int globalClientSetTime=0;
boolean gHasLcdClient=false;
boolean gHasRallyClient=false;
boolean gHasCalibClient=false;
boolean gHasSetTimeClient=false;
#define REQUESTCOUNT 3
AsyncWebServerRequest *gRequest[REQUESTCOUNT];
@ -177,7 +181,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=1000;
unsigned long prevCalculatingRallyMillis, calculatingRallyMillis=500;
unsigned long prevcalibrationtime, calibrationtimeinterval = 200;
unsigned long updatecounttime=0;
float temperature;
@ -197,6 +201,7 @@ unsigned long startsavemillis;
unsigned long broadcastwebsocket;
unsigned long timerWebsocketCalibration;
unsigned long timerWebsocketSetTime;
unsigned long timerDS3231Get;
volatile unsigned long howLongInMillis;
//#include <Button.h> //https://github.com/JChristensen/Button //from <Button.h> change to <JC_Button.h>
@ -430,98 +435,101 @@ void OnWiFiEvent(WiFiEvent_t event)
}
}
String getPin(){
struct tm timeinfo;
String hasil;
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
return hasil;
}
// StaticJsonBuffer<200> jsonBuffer;
// JsonObject& root = JsonBuffer.createObject();
DynamicJsonDocument testdoc(512);
//String datetime = &timeinfo;
char datetime[21];
char curtime[9];
strftime(datetime, 21, "%d %b %Y %H:%M:%S", &timeinfo);
strftime(curtime, 9, "%H:%M:%S", &timeinfo);
//Serial.println(&timeinfo);
//Serial.println(datetime);
testdoc["pin36"]=242;
testdoc["pin39"]=datetime;
testdoc["time"]=curtime;
// testdoc["datetime"]=datetime;
testdoc["pin5"]=millis();
testdoc["curtime"]=curtime;
testdoc["speed"]=String(float(random(1,20000))/100,1);
testdoc["counter"]=random(0,50000);
String bb[]={"A","B","C","D","E","F","G","H","I","J","K","L"};
testdoc["curtrack"]=bb[random(12)];
String dir[]={"FW","STOP","BACK"};
testdoc["dir1"]=dir[random(3)];
testdoc["dir2"]=dir[random(3)];
testdoc["time1"]=curtime;
testdoc["time2"]=curtime;
float odo1=float(millis())/10000;
float odo2=float(millis())/20000;
//Serial.println(odo1,3);
testdoc["odo1"]=String(odo1,3);
testdoc["odo2"]=String(odo2,3); // if disabled, the web will get undefined value
//serializeJson(testdoc,Serial);
serializeJson(testdoc,hasil);
//testdoc.printTo(hasil);
// testdoc.clear();
return hasil;
}
String getCalib(){
struct tm timeinfo;
String hasil;
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
return hasil;
}
DynamicJsonDocument testdoc(200);
//String datetime = &timeinfo;
char datetime[21];
char curtime[9];
strftime(datetime, 21, "%d %b %Y %H:%M:%S", &timeinfo);
strftime(curtime, 9, "%H:%M:%S", &timeinfo);
//Serial.println(&timeinfo);
//Serial.println(datetime);
// testdoc["datetime"]=datetime;
testdoc["curtime"]=curtime;
testdoc["speed"]=String(float(random(1,20000))/100,1);
testdoc["counter"]=random(0,50000);
String bb[]={"A","B","C","D","E","F","G","H","I","J","K","L"};
testdoc["curtrack"]=bb[random(12)];
float calkm=float(millis())/100000;
float calmeter=float(millis())/100;
testdoc["caldist"]=random(9);
testdoc["calman"]=random(100000, 150000);
testdoc["calkm"]=String(calkm,3);
testdoc["calmeter"]=String(calmeter,3);
//Serial.println(odo1,3);
testdoc["calval"]=String(calmeter*1000); // if disabled, the web will get undefined value
//serializeJson(testdoc,Serial);
serializeJson(testdoc,hasil);
//testdoc.printTo(hasil);
// testdoc.clear();
return hasil;
}
// String getPin(){ //can be delete
// struct tm timeinfo;
// String hasil;
// if(!getLocalTime(&timeinfo)){
// Serial.println("Failed to obtain time");
// return hasil;
// }
// // StaticJsonBuffer<200> jsonBuffer;
// // JsonObject& root = JsonBuffer.createObject();
// DynamicJsonDocument testdoc(512);
// //String datetime = &timeinfo;
// char datetime[21];
// char curtime[9];
// strftime(datetime, 21, "%d %b %Y %H:%M:%S", &timeinfo);
// strftime(curtime, 9, "%H:%M:%S", &timeinfo);
// //Serial.println(&timeinfo);
// //Serial.println(datetime);
// testdoc["pin36"]=242;
// testdoc["pin39"]=datetime;
// testdoc["time"]=curtime;
// // testdoc["datetime"]=datetime;
// testdoc["pin5"]=millis();
// testdoc["curtime"]=curtime;
// testdoc["speed"]=String(float(random(1,20000))/100,1);
// testdoc["counter"]=random(0,50000);
// String bb[]={"A","B","C","D","E","F","G","H","I","J","K","L"};
// testdoc["curtrack"]=bb[random(12)];
// String dir[]={"FW","STOP","BACK"};
// testdoc["dir1"]=dir[random(3)];
// testdoc["dir2"]=dir[random(3)];
// testdoc["time1"]=curtime;
// testdoc["time2"]=curtime;
// float odo1=float(millis())/10000;
// float odo2=float(millis())/20000;
// //Serial.println(odo1,3);
// testdoc["odo1"]=String(odo1,3);
// testdoc["odo2"]=String(odo2,3); // if disabled, the web will get undefined value
// //serializeJson(testdoc,Serial);
// serializeJson(testdoc,hasil);
// //testdoc.printTo(hasil);
// // testdoc.clear();
// return hasil;
// }
// String getCalibFunc(){ can be delete
// struct tm timeinfo;
// String hasil;
// if(!getLocalTime(&timeinfo)){
// Serial.println("Failed to obtain time");
// return hasil;
// }
// DynamicJsonDocument testdoc(200);
// //String datetime = &timeinfo;
// char datetime[21];
// char curtime[9];
// strftime(datetime, 21, "%d %b %Y %H:%M:%S", &timeinfo);
// strftime(curtime, 9, "%H:%M:%S", &timeinfo);
// //Serial.println(&timeinfo);
// //Serial.println(datetime);
// // testdoc["datetime"]=datetime;
// testdoc["curtime"]=curtime;
// testdoc["speed"]=String(float(random(1,20000))/100,1);
// testdoc["counter"]=random(0,50000);
// String bb[]={"A","B","C","D","E","F","G","H","I","J","K","L"};
// testdoc["curtrack"]=bb[random(12)];
// float calkm=float(millis())/100000;
// float calmeter=float(millis())/100;
// testdoc["caldist"]=random(9);
// testdoc["calman"]=random(100000, 150000);
// testdoc["calkm"]=String(calkm,3);
// testdoc["calmeter"]=String(calmeter,3);
// //Serial.println(odo1,3);
// testdoc["calval"]=String(calmeter*1000); // if disabled, the web will get undefined value
// //serializeJson(testdoc,Serial);
// serializeJson(testdoc,hasil);
// //testdoc.printTo(hasil);
// // testdoc.clear();
// return hasil;
// }
void printLocalTime(){
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
return;
}
t.hour=timeinfo.tm_hour;
t.min=timeinfo.tm_min;
t.sec=timeinfo.tm_sec;
t.mday=timeinfo.tm_mday;
t.mon=timeinfo.tm_mon;
t.year=timeinfo.tm_year;
DS3231_set(t);
if (WiFi.status() == WL_CONNECTED){
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain NTP time");
return;
}
} else return;
// t.hour=timeinfo.tm_hour;
// t.min=timeinfo.tm_min;
// t.sec=timeinfo.tm_sec;
// t.mday=timeinfo.tm_mday;
// t.mon=timeinfo.tm_mon;
// t.year=timeinfo.tm_year;
// DS3231_set(t);
Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
Serial.print("Day of week: ");
Serial.println(&timeinfo, "%A");
@ -665,7 +673,7 @@ unsigned long getValueSetTime(const char* st){
unsigned long getMemStime(uint8_t getmemsTimecurTrip);
String getsTime(uint8_t getsTimecurtrip){
String getShortsTime(uint8_t getsTimecurtrip){
unsigned long sTimeinconstanta;
int sTimeHour;
int sTimeMin;
@ -682,7 +690,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("getShortsTime:");Serial.print(sTimeHour);Serial.print(":");Serial.print(sTimeMin);Serial.print(";");Serial.println(sTime);
// }
return sTime;
}
@ -691,12 +699,14 @@ void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventT
if(type == WS_EVT_CONNECT){
globalClientRally++;
gHasRallyClient=true;
Serial.println("Websocket client connection received");
Serial.print("Rally Client=");Serial.println(globalClientRally);
Serial.print("IPAdd client:"); Serial.println(client->remoteIP());
client->text(strRallyJson);
} else if(type == WS_EVT_DISCONNECT){
globalClientRally--;
if (globalClientRally<=0) gHasRallyClient=false;
Serial.println("Client disconnected");
Serial.print("Rally Client=");Serial.println(globalClientRally);
Serial.print("IPAdd client:"); Serial.println(client->remoteIP());
@ -815,12 +825,14 @@ void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventT
void onWsEventCalibration(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len){
if(type == WS_EVT_CONNECT){
globalClientCalib++;
gHasCalibClient=true;
Serial.println("wscal Websocket client connection received");
Serial.print("Calib Client=");Serial.println(globalClientCalib);
Serial.print("IPAdd client:"); Serial.println(client->remoteIP());
client->text(strCalibJson);
} else if(type == WS_EVT_DISCONNECT){
globalClientCalib--;
if (globalClientCalib<=0) gHasCalibClient=false;
Serial.println("wscal Client disconnected");
Serial.print("Calib Client=");Serial.println(globalClientCalib);
Serial.print("IPAdd client:"); Serial.println(client->remoteIP());
@ -885,12 +897,14 @@ void onWsEventCalibration(AsyncWebSocket * server, AsyncWebSocketClient * client
void onWsEventSetTime(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len){
if(type == WS_EVT_CONNECT){
globalClientSetTime++;
gHasSetTimeClient=true;
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--;
if (globalClientSetTime<=0) gHasSetTimeClient=false;
Serial.println("wssettime Client disconnected");
Serial.print("SetTime Client=");Serial.println(globalClientSetTime);
Serial.print("IPAdd client:"); Serial.println(client->remoteIP());
@ -924,7 +938,8 @@ void onWsEventSetTime(AsyncWebSocket * server, AsyncWebSocketClient * client, Aw
int yMinVal=(uint8_t)(y.toInt());
Serial.print("x=");Serial.println(xHourVal);
Serial.print("y=");Serial.println(yMinVal);
DS3231_get(&mts);
//// DS3231_get(&mts);
mts = t;
mts.sec=0;
mts.min=yMinVal;
mts.hour=xHourVal;
@ -932,18 +947,22 @@ void onWsEventSetTime(AsyncWebSocket * server, AsyncWebSocketClient * client, Aw
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");
if (WiFi.status() == WL_CONNECTED){
if(!getLocalTime(&mtm)){
Serial.println("<SetTime>Failed to obtain NTP time");
// return;
} else {
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");
}
}
// else Serial.println("<SetTime>No WiFi");
}
}
}
@ -1039,6 +1058,10 @@ void memretrieveTrip(int pointer, int startaddress)
if (Trip[pointer].startHour >= 24) Trip[pointer].startHour = 23;
if (Trip[pointer].startMin >= 60) Trip[pointer].startMin = 59;
if (Trip[pointer].startSec >= 60) Trip[pointer].startSec = 59;
Serial.print(Trip[pointer].speed);Serial.print(";");
Serial.print(Trip[pointer].startHour);Serial.print(":");
Serial.print(Trip[pointer].startMin);Serial.print(":");
Serial.print(Trip[pointer].startSec);Serial.println("");
}
void constantatodigit()
@ -1169,7 +1192,7 @@ void lcdprint2digit(byte val)
if (val<10) lcd.print("0");
lcd.print(val);
}
void setTheTime(char *cmd)
void setTheTime(char *cmd) //// Not Used, Maybe Can delete
{
// ssmmhhWDDMMYYYY set time
@ -1440,7 +1463,7 @@ void constantaMenu()
//lcd.print(
lcd.setCursor(0,3);
lcd.print("Start Time:");
//DS3231_get(&t); //Get time
lcd.setCursor(12,3); //Go to second line of the LCD Screen
if(starttracthour<10)
{
@ -1595,7 +1618,8 @@ void redrawcalibrationMenuForESP32()
Calibrationtime = VSSCount;
// lcd.setCursor(xtemp,2);
// lcd.print(cur_distance_str);
getCalib["counter"]=VSSCount; /////
getCalib["counter2"]=VSSCount; /////
getCalib["counter"]=String(gVSSCountDiff);
getCalib["curTrip"]=String(Trip[curTrip].sub); /////
getCalib["curTripSpeed"]=String(Trip[curTrip].speed); /////
// String curTime = runningtimeforESP32(6,0);
@ -1623,23 +1647,28 @@ void fillSetTimeJsonForESP32()
{
DynamicJsonDocument docSetTime(512);
deserializeJson(docSetTime, strSetTimeJson);
docSetTime["counter"]=VSSCount; /////
docSetTime["counter2"]=VSSCount; /////
docSetTime["counter"]=String(gVSSCountDiff);
docSetTime["curTrip"]=String(Trip[curTrip].sub); /////
docSetTime["curTripSpeed"]=String(Trip[curTrip].speed); /////
DS3231_get(&t);
// DS3231_get(&t);
struct tm NTPTimeInfo;
if(!getLocalTime(&NTPTimeInfo)){
Serial.println("Failed to obtain NTP time");
// return;
String NTPTime;
if (WiFi.status() == WL_CONNECTED){
if(!getLocalTime(&NTPTimeInfo)){
Serial.println("<fillSetTime>Failed to obtain NTP time");
// return;
}
NTPTime = runningtimeforESP32(&NTPTimeInfo);
docSetTime["NTPTime"]=NTPTime;
} else {
// Serial.println("<fillSetTime>No WiFi");
docSetTime["NTPTime"]="N/A";
}
gcurTime = runningtimeforESP32(6,0);
String NTPTime;
NTPTime = runningtimeforESP32(&NTPTimeInfo);
docSetTime["curTime"]=gcurTime;
docSetTime["NTPTime"]=NTPTime;
strSetTimeJson = "";
serializeJson(docSetTime, strSetTimeJson);
}
@ -1674,7 +1703,7 @@ void fillSetTimeJsonForESP32()
void redrawrallyMenu()
{
// Serial.println("redrawRM");
DS3231_get(&t); //Get time
// DS3231_get(&t); //Get time
//runningtime(6,0);
//float distance, distance1, distance2;
@ -1884,7 +1913,7 @@ void calculationRally_BACKUP() //calculation only ESP32
{
DynamicJsonDocument getRally(1024);
deserializeJson(getRally, strRallyJson);
DS3231_get(&t); //Get time
// DS3231_get(&t); //Get time
// Serial.println("startCRal");
updateCount();
@ -2073,7 +2102,7 @@ void calculationRally_BACKUP() //calculation only ESP32
void calculationRally() //calculation only ESP32
{
DS3231_get(&t); //Get time
// DS3231_get(&t); //Get time
// Serial.println("startCRal");
updateCount();
@ -2390,14 +2419,30 @@ void IRAM_ATTR isr() { //esp32 only
ledstate=!ledstate;
}
void convertJsonTripToTripStruct(uint8_t iTrip, const char* strJson){
void convertJsonTripToTripStruct(uint8_t iTrip, const char* strJson){ //this also will check if loaded dist and time equal to the value from spiff and memload
// Serial.print(iTrip); Serial.print(";");Serial.println(strJson);
DynamicJsonDocument doc(256);
deserializeJson(doc, strJson);
char mspeed[7];
dtostrf(Trip[iTrip].speed, 6, 4, mspeed);
Serial.print(String(char(iTrip)));Serial.print(mspeed);Serial.print(" VS ");Serial.println(doc["speed"].as<String>());
// if (Trip[iTrip].speed!=doc["speed"])
if (strcmp(mspeed, doc["speed"].as<const char*>()) != 0)
{
Serial.print(String(char(iTrip)));Serial.println(" speed is different");
// Serial.print(String(char(iTrip)));Serial.print(Trip[iTrip].speed);Serial.print(" VS ");Serial.println(doc["speed"].as<String>());
// Trip[iTrip].speed = doc["speed"];
}
// if (Trip[iTrip].subTime!=doc["stime"])
// {
// Serial.print(String(iTrip));Serial.print(Trip[iTrip].subTime);Serial.print(" VS ");Serial.println(doc["time"].as<String>());
// Trip[iTrip].subTime = doc["time"];
// }
Trip[iTrip].distance = doc["dist"];
Trip[iTrip].subTime = doc["time"];
}
void fillTripArray(){
void fillTripArray(){ //run by setup()
char tempTrip[7]="/tripZ";
// Serial.println(tempTrip);
String tempReadFile;
@ -2473,7 +2518,7 @@ void handleloadConst(AsyncWebServerRequest *request, JsonVariant &json) {
deserializeJson(doc, tempTrip);
speedinconstanta = getMemSpeedInConstanta(i-65);
// sTimeinconstanta = getMemStime(i-65);
tempsTime = getsTime(i-65);
tempsTime = getShortsTime(i-65);
tempSpeed=String(speedinconstanta,5);
tempSpeed.remove(6);
// Serial.print(tempSpeed);Serial.println(speedinconstanta,3);
@ -2528,11 +2573,8 @@ char* unConstChar(const char* s) {
}
}
char *temp2char;
// char *charVal;
char gsTime[10];
char gSpeed[10];
void getTripFromSPIFF(uint8_t charcurTrip, char *&pDist, char **pSpeed, char **pTime, char **psTime){
void getTripFromSPIFF(uint8_t charcurTrip, char *pDist, char *pSpeed, char *pTime, char *psTime){ //read from the source ie:from mem and from SPIFF. not read fromStruct Trip.
// 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";
@ -2543,52 +2585,25 @@ void getTripFromSPIFF(uint8_t charcurTrip, char *&pDist, char **pSpeed, char **
tempSpeed.reserve(10);
String tempsTime;
tempsTime.reserve(10);
// for(uint8_t i=65; i<TRIPSIZE+65; i++){
tempTrip=readFile(SPIFFS, filename);
// Serial.print(tempTrip.length()); Serial.print(";");Serial.println(tempTrip);
deserializeJson(doc, tempTrip);
// speedinconstanta = getMemSpeedInConstanta(i-65);
// sTimeinconstanta = getMemStime(i-65);
// *pDist = doc["dist"];
// String xTemp1;
// xTemp.reserve(10);
// xTemp1=doc["dist"].as<String>();
// *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<const char*>());
// *pDist = "hi";
// *pSpeed = (char*)doc["speed"].as<const char*>(); //take from the eeprom data
*pTime = (char*)doc["time"].as<const char*>();
// *psTime = (char*)doc["stime"].as<const char*>();
// *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);
tempTrip=readFile(SPIFFS, filename);
// Serial.print(tempTrip.length()); Serial.print(";");Serial.println(tempTrip);
deserializeJson(doc, tempTrip);
float speedinconstanta = getMemSpeedInConstanta(charcurTrip-65);
tempsTime = getShortsTime(charcurTrip-65);
tempsTime.toCharArray(psTime, 10); // cannot use strcpy
// Serial.print(speedinconstanta);Serial.print(";");
// Serial.print(tempsTime);Serial.println(";");
// pDist = unConstChar( doc["dist"].as<const char*>());
strcpy(pDist, doc["dist"]);
// pTime = (char*)doc["time"].as<const char*>();
strcpy(pTime, doc["time"]);
dtostrf(speedinconstanta,6,4,pSpeed);
// dtostrf(speedinconstanta,1,4,gSpeed);
// Serial.println(gsTime);
}
void handleConstantaHTML(AsyncWebServerRequest *request) {
//PAGE.replace("%serveripaddress%", WiFi.localIP().toString());
@ -2606,10 +2621,10 @@ void handleConstantaHTML(AsyncWebServerRequest *request) {
PAGEROW.reserve(pageZiseConstRow);
PAGE = FPSTR(HTML_CONSTHEADER);
char *xDist;
char *xSpeed;
char *xTime;
char *xsTime;
char xDist[8];
char xSpeed[8];
char xTime[8];
char xsTime[8];
for (uint8_t i=65; i<(TRIPSIZE+65); i++){
PAGEROW = FPSTR(HTML_CONSTROW);
PAGEROW.replace("%A%", String(char(i)));
@ -2620,7 +2635,8 @@ void handleConstantaHTML(AsyncWebServerRequest *request) {
// 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);
// getTripFromSPIFF(i, xDist, &xSpeed, &xTime, &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(";");
@ -2667,7 +2683,6 @@ void handlesetConst(AsyncWebServerRequest *request, JsonVariant &json){
} else {
canSave = false;
}
// const char* speed = data["speed"].as<const char*>();
float speed = data["speed"].as<float>();
float dist = data["dist"].as<float>();
@ -2796,7 +2811,7 @@ Trip[9].startSec = 58;
#ifdef DEBUG
Serial.println("Setting time");
#endif
DS3231_init(DS3231_CONTROL_INTCN);
DS3231_init(DS3231_CONTROL_INTCN); //0X4 address
DS3231_get(&t); //Get time
blinkON=false;
@ -2804,10 +2819,11 @@ Trip[9].startSec = 58;
min60=t.min;
hour24=t.hour;
delay(100); // delay for reading mem.read
//mainMenu();
printUPchar();
printDOWNchar();
delay(100); // delay for reading mem.read
count1 = memretrieveLong(count1Address, RRcountSIZE, count1Seq); //(int startaddress, byte RRsize, unsigned long seq)
Serial.println(count1Seq);
int countaddresspointer = count1count2diffAddress*32;
@ -2938,7 +2954,7 @@ Serial.println("calibration and constanta");
}
Serial.print("try to connect to ssid:");Serial.print(ssid);Serial.print("; with pwd:");Serial.println(password);
WiFi.begin(ssid, password);
if (WiFi.waitForConnectResult() != WL_CONNECTED) {
if (WiFi.waitForConnectResult(15000) != WL_CONNECTED) {
Serial.println("WiFi Failed!");
//return;
}
@ -4155,11 +4171,13 @@ void loop() //loop from VSS RALLY V2
break;
}
}
gHasLcdClient=false;
if (MENU==RALLY) {
gHasLcdClient=true; //to start the get DS3231 time
if (((now1 - prevtemprally) >= tempintervalrally) && !isloadingConst) {
//if ((long)(now1 - prevtemprally) >= 0) {
testLoadTime=millis();
//rallyMenu();
if (!rallyEdit) {
iscalculatingRally=true;
@ -4169,14 +4187,15 @@ void loop() //loop from VSS RALLY V2
fillRallyLCDScreen();
iscalculatingRally=false;
}
Serial.println(millis()-testLoadTime);
// Serial.println(millis()-testLoadTime);
prevtemprally=now1;
//prevtemprally+=tempintervalrally;
}
}
if (MENU==SETTIME) {
gHasLcdClient=true;
//if ((long)(now1 - prevtempint) >=0 ){
if ((now1 - prevtempint) >=tempinterval ){
temperature = DS3231_get_treg(); //Get temperature
@ -4193,7 +4212,7 @@ void loop() //loop from VSS RALLY V2
}
//if ((long)(now1- prevsettime) >=0 ){ //show SET TIME MENU
if ((now1 - prevsettime) >=intervalsettime ){ //show SET TIME MENU
DS3231_get(&t); //Get time
// DS3231_get(&t); //Get time
if (prevsec!=t.sec) { //will update the LCD every sec(as long as the t.sec is different) eventhough intervalseetime is 250ms
settimeMenu();
prevsettime = now1;
@ -4235,7 +4254,7 @@ void loop() //loop from VSS RALLY V2
else if (VSSCountDiff < 70) intervalsavemillis = 60000;
else intervalsavemillis = 4000000;
if (VSSCountDiff > 0) savedCount = false;
if ((MENU!=CALIBRATION && MENU!=MAIN && MENU!=CONSTANTA) || globalClientRally) {
if ((MENU!=CALIBRATION && MENU!=MAIN && MENU!=CONSTANTA) || gHasRallyClient) {
// lcd.setCursor(0,0); ///
if (VSSCountDiff==0) gVSSCountDiff='0';//lcd.print("0");
else if (VSSCountDiff <= 10) gVSSCountDiff='1';//lcd.print("1");
@ -4266,7 +4285,7 @@ void loop() //loop from VSS RALLY V2
lcd.setCursor(x,y);
}
*/
if ((millis()-updatecounttime)>=250) {
if ((millis()-updatecounttime)>=50) {
// if ((millis()-updatecounttime)>=250) {
updateCount();
updatecounttime = millis();
@ -4281,20 +4300,20 @@ void loop() //loop from VSS RALLY V2
startsavemillis = millis();
}
if ((MENU==RALLY || globalClientRally) && ((now1 - prevCalculatingRallyMillis)>=calculatingRallyMillis)){
if ((MENU==RALLY || gHasRallyClient) && ((now1 - prevCalculatingRallyMillis)>=calculatingRallyMillis)){
if(semaphoreS){
prevCalculatingRallyMillis=millis();
Serial.println("St calculationRally()");
// Serial.println("St calculationRally()");
semaphoreS=false;
calculationRally();
Serial.print("end calculationRally() in:");Serial.println(millis()-prevCalculatingRallyMillis);
// Serial.print("end calculationRally() in:");Serial.println(millis()-prevCalculatingRallyMillis);
prevCalculatingRallyMillis=now1;
semaphoreS=true;
}
}
if ((millis()-broadcastwebsocket) > 330 && !isloadingConst && globalClientRally) {
if ((millis()-broadcastwebsocket) > 330 && !isloadingConst && gHasRallyClient) {
broadcastwebsocket = micros();
iscalculatingRally=true;
// calculationRally();
@ -4307,20 +4326,25 @@ void loop() //loop from VSS RALLY V2
broadcastwebsocket = millis();
}
if ((millis()-timerWebsocketCalibration) > 499 && !isloadingConst && globalClientCalib) {
if ((millis()-timerWebsocketCalibration) > 499 && !isloadingConst && gHasCalibClient) {
timerWebsocketCalibration = millis();
// if (globalClientCalib) {
// if (gHasCalibClient) {
redrawcalibrationMenuForESP32();
wscal.textAll(strCalibJson);
// }
}
if ((millis()-timerWebsocketSetTime) > 1000 && globalClientSetTime) {
if ((millis()-timerWebsocketSetTime) > 450 && gHasSetTimeClient) {
timerWebsocketSetTime = millis();
fillSetTimeJsonForESP32();
wssettime.textAll(strSetTimeJson);
}
if ((millis()-timerDS3231Get) > 500 && (gHasCalibClient || gHasRallyClient || gHasSetTimeClient || gHasLcdClient)) {
timerDS3231Get = millis();
DS3231_get(&t);
// Serial.println("<DS3231_get>");
}
if(!isloadingConst){
for (int i=(REQUESTCOUNT-1); i>=0; i--){
// for (int i=0; i<REQUESTCOUNT; i++){