diff --git a/platformio.ini b/platformio.ini index 5ba9adb..8c4cb0c 100644 --- a/platformio.ini +++ b/platformio.ini @@ -14,19 +14,7 @@ board = lolin32_lite framework = arduino monitor_speed = 115200 lib_deps = - ottowinter/ESPAsyncWebServer-esphome@^2.1.0 - esphome/AsyncTCP-esphome@^1.2.2 - SPIFFS - bblanchon/ArduinoJson@^6.19.4 - khoih-prog/ESPAsync_WiFiManager@^1.12.2 rodan/ds3231@^1.0 - ;fmalpartida/LiquidCrystal@^1.5.0 - https://github.com/cyberp/AT24Cx.git https://github.com/JChristensen/JC_Button.git - - ;arduino-libraries/LiquidCrystal@^1.0.7 https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library.git - ;https://github.com/mathertel/LiquidCrystal_PCF8574.git - ;LiquidCrystal_PCF8574 - - + https://github.com/cyberp/AT24Cx.git diff --git a/src/index.h b/src/index.h index dcab25b..658bf88 100644 --- a/src/index.h +++ b/src/index.h @@ -56,6 +56,8 @@ const char HTML_startrally1[] PROGMEM = R"rawliteral( document.getElementById("odo2").innerHTML = data.curDist2; document.getElementById("time1").innerHTML = data.time1; document.getElementById("time2").innerHTML = data.time2; + document.getElementById("tdiff1").innerHTML = data.TDiff; + document.getElementById("tdiff2").innerHTML = data.TDiff; // } }; @@ -123,7 +125,8 @@ const char HTML_startrally1[] PROGMEM = R"rawliteral(

OD 1->

123.4567 km

-

DIRECT

+

DIRECT

+

TDiff:

00:00:00

@@ -148,7 +151,8 @@ const char HTML_startrally1[] PROGMEM = R"rawliteral(

OD 2->123.456 km

-

DIRECT

+

DIRECT

+

TDiff:

00:00:00

diff --git a/src/main.cpp b/src/main.cpp index 83492db..825d81d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,11 +16,11 @@ #include #include -// #else -// #include -// #include -// #include -// #include +#else + #include + #include + #include + #include #endif #include // #include @@ -93,11 +93,11 @@ bool gGotRequestConstHTML[REQUESTCOUNT]; #define max(a,b) (((a) > (b)) ? (a) : (b)) #endif -// #include +#include #include #include // #include -#include +#include //don't forget to change the AT24CX.h -> #define AT24CX_ID 0x57 and comment the B1010000. and also comment Wire.begin on AT24CX.cpp //#define BUFF_MAX 128 @@ -153,14 +153,14 @@ const int lcdRows = 4; #define LED_BUILTIN 22 // LED built in pada ESP32 Lolin32 Lite // set LCD address, number of columns and rows // if you don't know your display address, run an I2C scanner sketch -LiquidCrystal_I2C lcd(0x28, lcdColumns, lcdRows); // marcoschwartz. ujungnya jelek ->remark -LiquidCrystal_I2C lcd2(I2C_ADDR, lcdColumns, lcdRows); // marcoschwartz. ujungnya jelek ->remark +// LiquidCrystal_I2C lcd(0x28, lcdColumns, lcdRows); // marcoschwartz. ujungnya jelek ->remark +LiquidCrystal_I2C lcd(I2C_ADDR, lcdColumns, lcdRows); // marcoschwartz. ujungnya jelek ->remark // LiquidCrystal_PCF8574 lcd(0.27); /*-----( Declare objects )-----*/ //LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin); // LiquidCrystal_I2C lcd(I2C_ADDR); -AT24CX mem; +AT24CX mem; //don't forget to change the AT24CX.h -> #define AT24CX_ID 0x57 and comment the B1010000. and also comment Wire.begin on AT24CX.cpp boolean cursorON=true; boolean blinkON=true; //************************************ END LCD DISPLAY ******************************************* @@ -171,6 +171,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 prevcalibrationtime, calibrationtimeinterval = 200; unsigned long updatecounttime=0; float temperature; @@ -309,6 +310,8 @@ byte prevTrip=0; // // + + void notFound(AsyncWebServerRequest *request) { request->send(404); } @@ -1138,7 +1141,51 @@ String runningtimeforESP32(byte x1,byte y1) // Serial.print("runningtimeforesp:");Serial.println(runningTIME); return runningTIME; } - +String runningtimeforESP32test1(byte x1,byte y1) +{ + // String runningTIME; + char runningTIME[9]="00:00:00"; + // lcd.setCursor(x1,y1); //Go to second line of the LCD Screen + if(t.hour<10) + { + // lcd.print("0"); + runningTIME[0]='0'; + runningTIME[1]=t.hour; + } else { + // lcd.print(t.hour); + // lcd.print(":"); + runningTIME[0]=t.hour/10; + runningTIME[1]=t.hour%10; + } + runningTIME[2]=':'; + if(t.min<10) + { + // lcd.print("0"); + // runningTIME+="0"; + runningTIME[3]='0'; + runningTIME[4]=t.min; + } else { + // lcd.print(t.min); + // lcd.print(":"); + runningTIME[3]=t.min/10; + runningTIME[4]=t.min%10; + } + runningTIME[5]=':'; + if(t.sec<10) + { + runningTIME[6]='0'; + runningTIME[7]=t.sec; + } else { + // lcd.print(t.sec); + runningTIME[6]=t.sec/10; + runningTIME[7]=t.sec%10; + } + runningTIME[8]='\0'; + // Serial.print("t.hour:");Serial.println(t.hour); + // Serial.print("runningtimeforesp:");Serial.println(runningTIME); + Serial.print("runningtimeforesp:");Serial.println(runningTIME); + return String(runningTIME); +} void settimeMenu() { lcd.setCursor(0,0); @@ -1158,8 +1205,8 @@ void calibrationMenu() { MENU = CALIBRATION; lcd.clear(); - lcd.setCursor(0,0); - lcd.print("Calibration Back"); + // lcd.setCursor(0,0); + // lcd.print("Calibration Back"); lcd.setCursor(0,1); lcd.print("Set Distance(Km): "); lcd.print(calibrationDistance); @@ -1337,7 +1384,7 @@ void redrawcalibrationMenu() lcd.print(cur_distance_str); // } } - +String gcurTime; void redrawcalibrationMenuForESP32() { DynamicJsonDocument getCalib(512); @@ -1353,8 +1400,9 @@ void redrawcalibrationMenuForESP32() getCalib["counter"]=VSSCount; ///// getCalib["curTrip"]=String(Trip[curTrip].sub); ///// getCalib["curTripSpeed"]=String(Trip[curTrip].speed); ///// - String curTime = runningtimeforESP32(6,0); - getCalib["curTime"]=curTime; + // String curTime = runningtimeforESP32(6,0); + gcurTime = runningtimeforESP32(6,0); + getCalib["curTime"]=gcurTime; getCalib["caldist"]=calibrationDistance; getCalib["calman"]= Calibration; @@ -1374,30 +1422,38 @@ void redrawcalibrationMenuForESP32() } -// char digitClock(int v){ -// if (v < 10) -// return '0' + v; -// else -// return 'A' + (v-10); +// // char digitClock(int v){ +// // if (v < 10) +// // return '0' + v; +// // else +// // return 'A' + (v-10); +// // } +// void digitClock(int v){ +// // lcd.setCursor(x,y); +// if (v < 10){ +// lcd.print("0"); +// lcd.print(v); +// // return '0' + v; +// } +// else lcd.print(v); // } -void digitClock(int v){ - // lcd.setCursor(x,y); - if (v < 10){ - lcd.print("0"); - lcd.print(v); - // return '0' + v; - } - else lcd.print(v); -} -void digitClock(int v, byte x, byte y){ - lcd.setCursor(x,y); - if (v < 10){ - lcd.print("0"); - lcd.print(v); - // return '0' + v; - } - else lcd.print(v); -} +// void digitClock(int v, byte x, byte y){ +// lcd.setCursor(x,y); +// if (v < 10){ +// lcd.print("0"); +// lcd.print(v); +// // return '0' + v; +// } +// else lcd.print(v); +// } + + char cur_speed_str[6]; + char cur_distance1_str[7]; + char cur_distance2_str[7]; + char cur_time1_str[12]; + char cur_time2_str[12]; + + // String gcurTime; // dah di declare di atas void redrawrallyMenu() { @@ -1449,48 +1505,47 @@ void redrawrallyMenu() runningtime(6,0); // lcd.setCursor(11,2); - char cur_speed_str[9]; + // char cur_speed_str[6]; int speedtemp=(int)speed1; int speedtemp2=(int)((speed1 - (int)speed1)*10); - sprintf(cur_speed_str, "%3d.%01dKm/h", speedtemp , speedtemp2 ); + sprintf(cur_speed_str, "%3d.%01d", speedtemp , speedtemp2 ); // Serial.print(count1); Serial.print(";");Serial.print(Calibration); Serial.print(";");Serial.print(speed1); Serial.print(";");Serial.println(cur_speed_str); // Serial.print(distance1); Serial.print(";");Serial.print(startdistance); Serial.print(";");Serial.print(startspeed); Serial.println(";"); // lcd.print(cur_speed_str); - char cur_distance1_str[8]; - char cur_distance2_str[8]; + // char cur_distance1_str[7]; + // char cur_distance2_str[7]; // lcd.setCursor(0,1); -// Serial.print(";redrawRM 2;"); + if (distance1<100) { - sprintf(cur_distance1_str, "%02d.%03dKm", (int)distance1, (int)((distance1 - (int)distance1)*1000)); + sprintf(cur_distance1_str, "%02d.%03d", (int)distance1, (int)((distance1 - (int)distance1)*1000)); } else if (distance1<1000) { - sprintf(cur_distance1_str, "%02d.%02dKm", (int)distance1, (int)((distance1 - (int)distance1)*100)); + sprintf(cur_distance1_str, "%02d.%02d", (int)distance1, (int)((distance1 - (int)distance1)*100)); } else { - sprintf(cur_distance1_str, "%03d.%01dKm", (int)distance1, (int)((distance1 - (int)distance1)*10)); + sprintf(cur_distance1_str, "%03d.%01d", (int)distance1, (int)((distance1 - (int)distance1)*10)); } // lcd.print(cur_distance1_str); // lcd.setCursor(0,3); if (distance2<100) { - sprintf(cur_distance2_str, "%02d.%03dKm", (int)distance2, (int)((distance2 - (int)distance2)*1000)); + sprintf(cur_distance2_str, "%02d.%03d", (int)distance2, (int)((distance2 - (int)distance2)*1000)); } else if (distance2<1000) { - sprintf(cur_distance2_str, "%02d.%02dKm", (int)distance2, (int)((distance2 - (int)distance2)*100)); + sprintf(cur_distance2_str, "%02d.%02d", (int)distance2, (int)((distance2 - (int)distance2)*100)); } else { - sprintf(cur_distance2_str, "%03d.%01dKm", (int)distance2, (int)((distance2 - (int)distance2)*10)); + sprintf(cur_distance2_str, "%03d.%01d", (int)distance2, (int)((distance2 - (int)distance2)*10)); } // lcd.print(cur_distance2_str); - // Serial.print(";redrawRM 3;"); float distancetime1 = distance1 * 60 / constanta; float distancetime2 = distance2 * 60 / constanta; //Calculating all about TIME,TDiff(including passing 23:59:59) // lcd.setCursor(9,1); - uint8_t secs1, mins1, hours1; + int secs1, mins1, hours1; secs1 = (distancetime1-(int)distancetime1)*60; mins1 = (int)distancetime1 % 60; @@ -1499,7 +1554,8 @@ void redrawrallyMenu() unsigned long totsecs1 = secs1 + (mins1*60) + ((long)hours1*3600); unsigned long totstarttractsecs = starttractsec + (starttractmin*60) + ((long)starttracthour*3600); unsigned long tottime1 = totsecs1 + totstarttractsecs; - boolean negatifsign = false; + boolean negatifsign1 = false; + boolean negatifsign2 = false; // Serial.print(";redrawRM 4;"); //Serial.print((long)starttracthour*3600); Serial.print(";"); Serial.print(starttractmin*60); Serial.println(";"); //Serial.print(totsecs1); Serial.print(";"); Serial.print(totstarttractsecs); Serial.print(";"); @@ -1509,59 +1565,54 @@ void redrawrallyMenu() if (!showTIME) { if (tottime1 >= totcurrentsecs) { //positif means we are too fast, slow down please. // Serial.println("pos"); - negatifsign = false; + negatifsign1 = false; tottime1 = tottime1 - totcurrentsecs; } else { //negatif means we need to hurry, its late // Serial.println("neg"); - negatifsign = true; + negatifsign1 = true; tottime1 = totcurrentsecs - tottime1; } } - //Serial.print(negatifsign);Serial.print(";"); Serial.println(tottime1); + //Serial.print(negatifsign1);Serial.print(";"); Serial.println(tottime1); hours1 = ((int)(tottime1 / 3600))%24; mins1 = (int)((tottime1 % 3600)/60); secs1 = (tottime1 % 60); - char cur_time1_str[12]; + // char cur_time1_str[12]; if (showTIME) { - // lcd.setCursor(9,1); - // lcd.print(dircount[dircount1]); - // lcd.print(" "); - // digitClock(hours1); - // lcd.print(":"); - // digitClock(mins1); - // lcd.print(":"); - // digitClock(secs1); - - sprintf(cur_time1_str, "%s %02d:%02d:%02d", dircount[dircount1], hours1, mins1, secs1); + // sprintf(cur_time1_str, "%s %02d:%02d:%02d", dircount[dircount1], hours1, mins1, secs1); + sprintf(cur_time1_str, " %02d:%02d:%02d", hours1, mins1, secs1); } else { - if (hours1 < 10) sprintf(cur_time1_str, "%s %s%01d:%02d:%02d", dircount[dircount1], (negatifsign?"-":" "), hours1, mins1, secs1); - else sprintf(cur_time1_str, "%s%s%02d:%02d:%02d", dircount[dircount1], (negatifsign?"-":" "), hours1, mins1, secs1); + // if (hours1 < 10) sprintf(cur_time1_str, "%s %s%01d:%02d:%02d", dircount[dircount1], (negatifsign1?"-":" "), hours1, mins1, secs1); + if (hours1 < 10) sprintf(cur_time1_str, " %s%01d:%02d:%02d", (negatifsign1?"-":" "), hours1, mins1, secs1); + // else sprintf(cur_time1_str, "%s%s%02d:%02d:%02d", dircount[dircount1], (negatifsign1?"-":" "), hours1, mins1, secs1); + else sprintf(cur_time1_str, "%s%02d:%02d:%02d", (negatifsign1?"-":" "), hours1, mins1, secs1); } + // lcd.setCursor(9,1); // lcd.print(cur_time1_str); + // Serial.println(cur_time1_str); + // Serial.print((hours1));Serial.print(":");Serial.print((mins1));Serial.print(":");Serial.println((secs1)); // Serial.print(";redrawRM 5;"); // Print Second TIME // lcd.setCursor(9,3); - uint8_t secs2, mins2, hours2; - + int secs2, mins2, hours2; secs2 = (distancetime2-(int)distancetime2)*60; mins2 = (int)distancetime2 % 60; hours2 = (int)distancetime2 / 60; unsigned long totsecs2 = secs2 + (mins2*60) + ((long)hours2*3600); unsigned long tottime2 = totsecs2 + totstarttractsecs; -//Serial.println(tottime2); if (!showTIME) { if (tottime2 >= totcurrentsecs) { //positif means we are too fast, slow down please. - negatifsign = false; + negatifsign2 = false; tottime2 = tottime2 - totcurrentsecs; } else { //negatif means we need to hurry, its late - negatifsign = true; + negatifsign2 = true; tottime2 = totcurrentsecs - tottime2 ; } } @@ -1569,66 +1620,51 @@ void redrawrallyMenu() hours2 = ((int)(tottime2 / 3600))%24; mins2 = (int)((tottime2 % 3600)/60); secs2 = (tottime2 % 60); - char cur_time2_str[11]; + // char cur_time2_str[12]; if (showTIME) { - lcd.setCursor(9,3); - lcd.print(dircount[dircount2]); - lcd.print(" "); - digitClock(hours2); - lcd.print(":"); - digitClock(mins2); - lcd.print(":"); - digitClock(secs2); - - // sprintf(cur_time2_str, "%s %02d:%02d:%02d", dircount[dircount2], hours2, mins2, secs2); + sprintf(cur_time2_str, " %02d:%02d:%02d", hours2, mins2, secs2); } else { - if (hours2<10) sprintf(cur_time2_str, "%s %s%01d:%02d:%02d", dircount[dircount2], (negatifsign?"-":" "), hours2, mins2, secs2); - else sprintf(cur_time2_str, "%s%s%02d:%02d:%02d", dircount[dircount2], (negatifsign?"-":" "), hours2, mins2, secs2); + if (hours2<10) sprintf(cur_time2_str, " %s%01d:%02d:%02d", (negatifsign2?"-":" "), hours2, mins2, secs2); + else sprintf(cur_time2_str, "%s%02d:%02d:%02d", (negatifsign2?"-":" "), hours2, mins2, secs2); } - // lcd.setCursor(4,0); - // lcd.print(Trip[curTrip].sub); - // lcd.setCursor(0,2); - // lcd.print(Trip[curTrip].speed); - // lcd.print("Km/H"); + lcd.setCursor(4,0); + lcd.print(Trip[curTrip].sub); + lcd.setCursor(0,2); + lcd.print(Trip[curTrip].speed); + lcd.print("Km/H"); - // lcd.setCursor(11,2); + lcd.setCursor(11,2); + lcd.print(cur_speed_str); + lcd.print("Km/H"); - // lcd.print(cur_speed_str); + lcd.setCursor(0,1); - // lcd.setCursor(0,1); - - // lcd.print(cur_distance1_str); + lcd.print(cur_distance1_str); + lcd.print("Km"); + lcd.setCursor(9,1); + lcd.print(dircount[dircount1]); + lcd.print(cur_time1_str); - // lcd.setCursor(0,3); - - // lcd.print(cur_distance2_str); - - // lcd.setCursor(9,1); - // lcd.print(dircount[dircount1]); - // // lcd.print(cur_time1_str); - // digitClock(hours1,12,1); - // lcd.print(":"); - // // lcd.print(digitClock(mins1)); - // digitClock(mins1); - // lcd.print(":"); - // // lcd.print(digitClock(secs1)); - // digitClock(secs1); - // // Serial.print(digitClock(hours1));Serial.print(":");Serial.print(digitClock(mins1));Serial.print(":");Serial.println(digitClock(secs1)); - - // // lcd.setCursor(9,3); + lcd.setCursor(0,3); - // // lcd.print(cur_time2_str); + lcd.print(cur_distance2_str); + lcd.print("Km"); + lcd.setCursor(9,3); + lcd.print(dircount[dircount2]); + lcd.print(cur_time2_str); + +// Serial.print("x=");Serial.print(x);Serial.print("y=");Serial.print(y);Serial.println(""); lcd.setCursor(x,y); // Serial.println("END redrawRM"); } -void calculationRally() //calculation only ESP32 +void calculationRally_BACKUP() //calculation only ESP32 { DynamicJsonDocument getRally(1024); deserializeJson(getRally, getRallyJson); @@ -1669,7 +1705,7 @@ void calculationRally() //calculation only ESP32 // lcd.print("Km/H"); getRally["Trip"]=String(Trip[curTrip].sub); ///// getRally["TSpeed"]=String(Trip[curTrip].speed); ///// - char sTime[9]; + char sTime[9]; //global can move to the sprintf to change change constanta sprintf(sTime, "%02u:%02u:%02u", Trip[curTrip].startHour, Trip[curTrip].startMin, Trip[curTrip].startSec); getRally["TsTime"]=sTime; ///// getRally["TTime"]=String(Trip[curTrip].subTime); ///// @@ -1677,45 +1713,46 @@ void calculationRally() //calculation only ESP32 // Serial.print(Trip[curTrip].sub);Serial.print(Trip[curTrip].speed);Serial.print(";");Serial.println(Trip[curTrip].startHour); - String curTime = runningtimeforESP32(6,0); - getRally["Time"]=curTime; + gcurTime = runningtimeforESP32(6,0); + // String curTime = runningtimeforESP32(6,0); + // char curTime []= runningtimeforESP32(6,0); + getRally["Time"]=gcurTime; // lcd.setCursor(11,2); - char cur_speed_str[7]; + // char cur_speed_str[6]; sprintf(cur_speed_str, "%3d.%01d", (int)speed1, (int)((speed1 - (int)speed1)*10)); // lcd.print(cur_speed_str); getRally["curSpeed"]=cur_speed_str; ///// - // char cur_distance1_str[8]; - // char cur_distance2_str[8]; - char cur_distance1_plain[7]; - char cur_distance2_plain[7]; + + // char cur_distance1_plain[7]; + // char cur_distance2_plain[7]; // lcd.setCursor(0,1); if (distance1<100) { - sprintf(cur_distance1_plain, "%02d.%03d", (int)distance1, (int)((distance1 - (int)distance1)*1000)); + sprintf(cur_distance1_str, "%02d.%03d", (int)distance1, (int)((distance1 - (int)distance1)*1000)); } else if (distance1<1000) { - sprintf(cur_distance1_plain, "%02d.%02d", (int)distance1, (int)((distance1 - (int)distance1)*100)); + sprintf(cur_distance1_str, "%02d.%02d", (int)distance1, (int)((distance1 - (int)distance1)*100)); } else { - sprintf(cur_distance1_plain, "%03d.%01d", (int)distance1, (int)((distance1 - (int)distance1)*10)); + sprintf(cur_distance1_str, "%03d.%01d", (int)distance1, (int)((distance1 - (int)distance1)*10)); } // lcd.print(cur_distance1_str); - getRally["curDist1"]=String(cur_distance1_plain); + getRally["curDist1"]=String(cur_distance1_str); // lcd.setCursor(0,3); if (distance2<100) { - sprintf(cur_distance2_plain, "%02d.%03d", (int)distance2, (int)((distance2 - (int)distance2)*1000)); + sprintf(cur_distance2_str, "%02d.%03d", (int)distance2, (int)((distance2 - (int)distance2)*1000)); } else if (distance2<1000) { - sprintf(cur_distance2_plain, "%02d.%02d", (int)distance2, (int)((distance2 - (int)distance2)*100)); + sprintf(cur_distance2_str, "%02d.%02d", (int)distance2, (int)((distance2 - (int)distance2)*100)); } else { - sprintf(cur_distance2_plain, "%03d.%01d", (int)distance2, (int)((distance2 - (int)distance2)*10)); + sprintf(cur_distance2_str, "%03d.%01d", (int)distance2, (int)((distance2 - (int)distance2)*10)); } // lcd.print(cur_distance2_str); - getRally["curDist2"]=cur_distance2_plain; + getRally["curDist2"]=cur_distance2_str; float distancetime1 = distance1 * 60 / constanta; float distancetime2 = distance2 * 60 / constanta; @@ -1754,17 +1791,17 @@ void calculationRally() //calculation only ESP32 secs1 = (tottime1 % 60); // char cur_time1_str[12]; - char cur_time1_plain[10]; + // char cur_time1_plain[10]; if (showTIME) { - sprintf(cur_time1_plain, "%02d:%02d:%02d", hours1, mins1, secs1); + sprintf(cur_time1_str, " %02d:%02d:%02d", hours1, mins1, secs1); } else { - if (hours1<10) sprintf(cur_time1_plain, "%s%01d:%02d:%02d", (negatifsign?"-":" "), hours1, mins1, secs1); - else sprintf(cur_time1_plain, "%s%02d:%02d:%02d", (negatifsign?"-":" "), hours1, mins1, secs1); + if (hours1<10) sprintf(cur_time1_str, " %s%01d:%02d:%02d", (negatifsign?"-":" "), hours1, mins1, secs1); + else sprintf(cur_time1_str, "%s%02d:%02d:%02d", (negatifsign?"-":" "), hours1, mins1, secs1); } // lcd.print(cur_time1_str); - getRally["time1"]=cur_time1_plain; + getRally["time1"]=cur_time1_str; getRally["dir1"]=dircount[dircount1]; // Print Second TIME @@ -1795,26 +1832,19 @@ void calculationRally() //calculation only ESP32 hours2 = ((int)(tottime2 / 3600))%24; mins2 = (int)((tottime2 % 3600)/60); secs2 = (tottime2 % 60); - char cur_time2_str[12]; - char cur_time2_plain[9]; - if (showTIME) { - sprintf(cur_time2_str, "%s %02d:%02d:%02d", dircount[dircount2], hours2, mins2, secs2); - } - else { - if (hours2<10) sprintf(cur_time2_str, "%s %s%01d:%02d:%02d", dircount[dircount2], (negatifsign?"-":" "), hours2, mins2, secs2); - else sprintf(cur_time2_str, "%s%s%02d:%02d:%02d", dircount[dircount2], (negatifsign?"-":" "), hours2, mins2, secs2); - } + // char cur_time2_str[12]; + // char cur_time2_plain[9]; if (showTIME) { - sprintf(cur_time2_plain, "%02d:%02d:%02d", hours2, mins2, secs2); + sprintf(cur_time2_str, " %02d:%02d:%02d", hours2, mins2, secs2); } else { - if (hours2<10) sprintf(cur_time2_plain, "%s%01d:%02d:%02d", (negatifsign?"-":" "), hours2, mins2, secs2); - else sprintf(cur_time2_plain, "%s%02d:%02d:%02d", (negatifsign?"-":" "), hours2, mins2, secs2); + if (hours2<10) sprintf(cur_time2_str, " %s%01d:%02d:%02d", (negatifsign?"-":" "), hours2, mins2, secs2); + else sprintf(cur_time2_str, "%s%02d:%02d:%02d", (negatifsign?"-":" "), hours2, mins2, secs2); } // lcd.print(cur_time2_str); - getRally["time2"]=cur_time2_plain; + getRally["time2"]=cur_time2_str; getRally["dir2"]=dircount[dircount2]; // lcd.setCursor(x,y); @@ -1824,6 +1854,206 @@ void calculationRally() //calculation only ESP32 // Serial.println("ENDCRal"); } ///// calculation only for esp32 + +void calculationRally() //calculation only ESP32 +{ + DS3231_get(&t); //Get time + // Serial.println("startCRal"); + updateCount(); + + distance1 = (float)count1/((float)Calibration); // * 1); + distance2 = (float)count2/((float)Calibration); + float speed1=0; + + if ((distance1 - startdistance) > 0) { + speed1 = (distance1-startdistance)/(millis()-startspeed)*3600000; + } + + startdistance = distance1; + startspeed = millis(); //startspeed is only one no startspeed2 + + if ((millis()-startsavemillis)>0) { + + if (distance1 != prevdistance1) { + mem.writeFloat(832,distance1); + prevdistance1 = distance1; + } + if (distance2 != prevdistance2) { + mem.writeFloat(864,distance2); + prevdistance2 = distance2; + } + saveCount(); + startsavemillis=millis()+2500; + } + // Serial.print(Trip[curTrip].sub);Serial.print(Trip[curTrip].speed);Serial.print(";");Serial.println(Trip[curTrip].startHour); + + gcurTime = runningtimeforESP32(6,0); + + sprintf(cur_speed_str, "%3d.%01d", (int)speed1, (int)((speed1 - (int)speed1)*10)); + + if (distance1<100) { + sprintf(cur_distance1_str, "%02d.%03d", (int)distance1, (int)((distance1 - (int)distance1)*1000)); + } + else if (distance1<1000) { + sprintf(cur_distance1_str, "%02d.%02d", (int)distance1, (int)((distance1 - (int)distance1)*100)); + } + else { + sprintf(cur_distance1_str, "%03d.%01d", (int)distance1, (int)((distance1 - (int)distance1)*10)); + } + + if (distance2<100) { + sprintf(cur_distance2_str, "%02d.%03d", (int)distance2, (int)((distance2 - (int)distance2)*1000)); + } + else if (distance2<1000) { + sprintf(cur_distance2_str, "%02d.%02d", (int)distance2, (int)((distance2 - (int)distance2)*100)); + } + else { + sprintf(cur_distance2_str, "%03d.%01d", (int)distance2, (int)((distance2 - (int)distance2)*10)); + } + + float distancetime1 = distance1 * 60 / constanta; + float distancetime2 = distance2 * 60 / constanta; + +//Calculating all about TIME,TDiff(including passing 23:59:59) + int secs1, mins1, hours1; + + secs1 = (distancetime1-(int)distancetime1)*60; + mins1 = (int)distancetime1 % 60; + hours1 = (int)distancetime1 / 60; + unsigned long totcurrentsecs = t.sec + (t.min*60) + ((long)t.hour*3600); + unsigned long totsecs1 = secs1 + (mins1*60) + ((long)hours1*3600); + unsigned long totstarttractsecs = starttractsec + (starttractmin*60) + ((long)starttracthour*3600); + unsigned long tottime1 = totsecs1 + totstarttractsecs; + boolean negatifsign = false; + + if (totcurrentsecs=0) { //positif means we are too fast, slow down please. + if (tottime1 >= totcurrentsecs) { //positif means we are too fast, slow down please. + // Serial.println("pos"); + negatifsign = false; + tottime1 = tottime1 - totcurrentsecs; + } + else { //negatif means we need to hurry, its late + // Serial.println("neg"); + negatifsign = true; + tottime1 = totcurrentsecs - tottime1; + } + } + //Serial.print(negatifsign);Serial.print(";"); Serial.println(tottime1); + hours1 = ((int)(tottime1 / 3600))%24; + mins1 = (int)((tottime1 % 3600)/60); + secs1 = (tottime1 % 60); + + if (showTIME) { + sprintf(cur_time1_str, " %02d:%02d:%02d", hours1, mins1, secs1); + } + else { + if (hours1<10) sprintf(cur_time1_str, " %s%01d:%02d:%02d", (negatifsign?"-":" "), hours1, mins1, secs1); + else sprintf(cur_time1_str, "%s%02d:%02d:%02d", (negatifsign?"-":" "), hours1, mins1, secs1); + } + +// Print Second TIME + int secs2, mins2, hours2; + + secs2 = (distancetime2-(int)distancetime2)*60; + mins2 = (int)distancetime2 % 60; + hours2 = (int)distancetime2 / 60; + + unsigned long totsecs2 = secs2 + (mins2*60) + ((long)hours2*3600); + unsigned long tottime2 = totsecs2 + totstarttractsecs; + + if (!showTIME) { + if (tottime2 >= totcurrentsecs) { //positif means we are too fast, slow down please. + negatifsign = false; + tottime2 = tottime2 - totcurrentsecs; + } + else { //negatif means we need to hurry, its late + negatifsign = true; + tottime2 = totcurrentsecs - tottime2 ; + } + } + + hours2 = ((int)(tottime2 / 3600))%24; + mins2 = (int)((tottime2 % 3600)/60); + secs2 = (tottime2 % 60); + + if (showTIME) { + sprintf(cur_time2_str, " %02d:%02d:%02d", hours2, mins2, secs2); + } + else { + if (hours2<10) sprintf(cur_time2_str, " %s%01d:%02d:%02d", (negatifsign?"-":" "), hours2, mins2, secs2); + else sprintf(cur_time2_str, "%s%02d:%02d:%02d", (negatifsign?"-":" "), hours2, mins2, secs2); + } + // Serial.println("ENDCRal"); +} ///// calculation only for esp32 + +void fillRallyJsonWithData() { + DynamicJsonDocument getRally(1024); + deserializeJson(getRally, getRallyJson); + getRally["Trip"]=String(Trip[curTrip].sub); ///// + getRally["TSpeed"]=String(Trip[curTrip].speed); ///// + char sTime[9]; //global can move to the sprintf to change change constanta + sprintf(sTime, "%02u:%02u:%02u", Trip[curTrip].startHour, Trip[curTrip].startMin, Trip[curTrip].startSec); + getRally["TsTime"]=sTime; ///// + getRally["TTime"]=String(Trip[curTrip].subTime); ///// + getRally["TDist"]=String(Trip[curTrip].distance); ///// + getRally["Time"]=gcurTime; + getRally["curSpeed"]=cur_speed_str; ///// + getRally["curDist1"]=String(cur_distance1_str); + getRally["curDist2"]=cur_distance2_str; + getRally["time1"]=cur_time1_str; + getRally["dir1"]=dircount[dircount1]; + + getRally["time2"]=cur_time2_str; + getRally["dir2"]=dircount[dircount2]; + + getRally["counter"]=VSSCount; + if (showTIME) getRally["TDiff"]="Time"; //add 1 space + else getRally["TDiff"]="TDiff"; + getRallyJson=""; + serializeJson(getRally, getRallyJson); +} + +void fillRallyLCDScreen(){ + lcd.setCursor(6,0); + lcd.print(gcurTime); + if (showTIME) lcd.print(" Time "); //add 1 space + else lcd.print(" TDiff"); + lcd.setCursor(4,0); + lcd.print(Trip[curTrip].sub); + lcd.setCursor(0,2); + lcd.print(Trip[curTrip].speed); + lcd.print("Km/H"); + + lcd.setCursor(11,2); + lcd.print(cur_speed_str); + lcd.print("Km/H"); + + lcd.setCursor(0,1); + + lcd.print(cur_distance1_str); + lcd.print("Km"); + + lcd.setCursor(9,1); + lcd.print(dircount[dircount1]); + lcd.print(cur_time1_str); + + + lcd.setCursor(0,3); + + lcd.print(cur_distance2_str); + lcd.print("Km"); + + lcd.setCursor(9,3); + lcd.print(dircount[dircount2]); + lcd.print(cur_time2_str); + +// Serial.print("x=");Serial.print(x);Serial.print("y=");Serial.print(y);Serial.println(""); + + lcd.setCursor(x,y); +} void set_cursor_pos(int new_pos) { /* @@ -2150,12 +2380,14 @@ void setup() { Serial.println("Starting Rally"); //#endif // pinMode(ledPin, OUTPUT); - uint32_t freqhx=100000; + uint32_t freqhz=400000; // Wire.begin(15, 13, freqhx); //for lolin32lite sda=15; scl=13 pinMode(simulatorPWMPin,OUTPUT); pinMode(LED_BUILTIN, OUTPUT); pinMode(interruptPin, INPUT); //Pull down using resistor to ground attachInterrupt(digitalPinToInterrupt(interruptPin), blink, FALLING); + + // attachInterrupt(digitalPinToInterrupt(interruptPin), blink, FALLING); // attachInterrupt(interruptPin, isr, FALLING); // Wire.begin(I2C_SDA, I2C_SCL); //for lolin32lite sda=15; scl=13 @@ -2174,7 +2406,7 @@ void setup() { btnESC.begin(); //DS3231_init(DS3231_INTCN); - //memset(recv, 0, BUFF_MAX); + // //memset(recv, 0, BUFF_MAX); #ifdef DEBUG Serial.println("GET time"); #endif @@ -2215,24 +2447,27 @@ Trip[9].startSec = 58; - +Wire.begin(I2C_SDA, I2C_SCL, freqhz); //for lolin32lite sda=15; scl=13 //**************************LCD Setup******************************** delay(100); // lcd.begin (20,4); // initialize the lcd // lcd.init(); lcd.begin(); - lcd2.begin(); + // lcd2.begin(); + // Wire.begin(I2C_SDA, I2C_SCL); //for lolin32lite sda=15; scl=13 // Switch on the backlight /// lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); - lcd.backlight(); - lcd2.backlight(); + // lcd.backlight(); + // lcd2.backlight(); /// lcd.setBacklight(LED_ON); - lcd2.print("hello rally"); - delay(3000); + + // lcd2.print("hello rally20"); + + //***************************END LCD Setup******************************** - getCalibJson.reserve(512); +getCalibJson.reserve(512); getRallyJson.reserve(512); #ifdef DEBUG Serial.println("Setting time"); @@ -2260,14 +2495,14 @@ DS3231_init(DS3231_CONTROL_INTCN); //printmemLong(0,20); //startaddress, size Serial.print("count1=");Serial.print(count1);Serial.print(";count2=");Serial.print(count2);Serial.print("countdiff=");Serial.println(count1count2diff); -//TESTING MEM AT24cx EEPROM check the address in the library #define ..... 0x57 - // Serial.println("Write 42 to address 12"); - // mem.write(12, 42); - // Serial.println("Read byte from address 12 ..."); - // byte b = mem.read(12); - // Serial.print("... read: "); - // Serial.println(b, DEC); - // Serial.println(); +// // TESTING MEM AT24cx EEPROM check the address in the library #define ..... 0x57 +// Serial.println("Write 42 to address 12"); +// mem.write(12, 42); +// Serial.println("Read byte from address 12 ..."); +// byte b = mem.read(12); +// Serial.print("... read: "); +// Serial.println(b, DEC); +// Serial.println(); //count1Seq = 4294967290; /* @@ -3592,7 +3827,10 @@ void loop() //loop from VSS RALLY V2 //rallyMenu(); if (!rallyEdit) { iscalculatingRally=true; - redrawrallyMenu(); //Distance is edited? + // redrawrallyMenu(); //Distance is edited? + // calculationRally(); + Serial.println(millis()-testLoadTime); + fillRallyLCDScreen(); iscalculatingRally=false; } Serial.println(millis()-testLoadTime); @@ -3600,7 +3838,9 @@ void loop() //loop from VSS RALLY V2 //prevtemprally+=tempintervalrally; } } - + if ((MENU==RALLY || globalClientCalib) && ((now1 - prevCalculatingRallyMillis)>=calculatingRallyMillis)){ + calculationRally(); + } if (MENU==SETTIME) { //if ((long)(now1 - prevtempint) >=0 ){ if ((now1 - prevtempint) >=tempinterval ){ @@ -3708,26 +3948,21 @@ void loop() //loop from VSS RALLY V2 if ((millis()-broadcastwebsocket) > 333 && !isloadingConst && globalClientRally) { broadcastwebsocket = millis(); iscalculatingRally=true; - calculationRally(); + // calculationRally(); + Serial.print("calculationRallyTime=");Serial.println(millis()-broadcastwebsocket); + fillRallyJsonWithData(); iscalculatingRally=false; // Serial.println(getRallyJson); - // Serial.println(millis()-broadcastwebsocket); ws.textAll(getRallyJson); - // char pingPong[] = "{\"ping\":1}"; - // ws.textAll(pingPong); + Serial.print("calculationRallyToTTime=");Serial.println(millis()-broadcastwebsocket); } if ((millis()-broadcastwebsocketcalib) > 499 && !isloadingConst && globalClientCalib) { broadcastwebsocketcalib = millis(); - //calculationRally(); redrawcalibrationMenuForESP32(); // Serial.println(getCalibJson); wscal.textAll(getCalibJson); - - - // Serial.print("VSSCount="); Serial.println(VSSCount); - // Serial.print(ledstate); Serial.print(";");Serial.println(simstate); } if(!isloadingConst){ for (int i=(REQUESTCOUNT-1); i>=0; i--){ @@ -3743,7 +3978,6 @@ void loop() //loop from VSS RALLY V2 gGotRequest[i]=false; Serial.print("REMOVE:");Serial.println(i); } - } } VSSCount=millis(); //VSSCount Simulator