This commit is contained in:
Bluedragon 2022-04-27 01:50:48 +07:00
parent 60fa3d9a3f
commit cdfac6ba65
3 changed files with 420 additions and 194 deletions

View File

@ -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

View File

@ -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(
<div class="row">
<div class="col-2"><h4>OD 1-></h4></div>
<div class="col-3 text-end"><h3><span id="odo1">123.4567</span> km</h3></div>
<div class="col-4"><h3><span id="dir1">DIRECT</span></h3></div>
<div class="col-3"><h3><span id="dir1">DIRECT</span></h3></div>
<div class="col-1"><h3><span id="tdiff1">TDiff</span>:</h3></div>
<div class="col-3 text-end"><h3><span id="time1">00:00:00</span></h3></div>
</div>
<div class="row">
@ -148,7 +151,8 @@ const char HTML_startrally1[] PROGMEM = R"rawliteral(
<!--//ODO2-->
<div class="row">
<div class="col-5 "><h3>OD 2-><span id="odo2">123.456</span> km</h3></div>
<div class="col-4 "><h3><span id="dir2">DIRECT</span></h3></div>
<div class="col-3 "><h3><span id="dir2">DIRECT</span></h3></div>
<div class="col-1"><h3><span id="tdiff2">TDiff</span>:</h3></div>
<div class="col-3 text-end"><h3><span id="time2">00:00:00</span></h3></div>
</div>
<div class="row">

View File

@ -16,11 +16,11 @@
#include <AsyncJson.h>
#include <SPIFFS.h>
// #else
// #include <ESP8266WiFi.h>
// #include <ESPAsyncTCP.h>
// #include <Hash.h>
// #include <FS.h>
#else
#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <Hash.h>
#include <FS.h>
#endif
#include <ESPAsyncWebServer.h>
// #include <ESPmDNS.h>
@ -93,11 +93,11 @@ bool gGotRequestConstHTML[REQUESTCOUNT];
#define max(a,b) (((a) > (b)) ? (a) : (b))
#endif
// #include <Wire.h>
#include <Wire.h>
#include <ds3231.h>
#include <LiquidCrystal_I2C.h>
// #include <LiquidCrystal_PCF8574.h>
#include <AT24CX.h>
#include <AT24CX.h> //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<totstarttractsecs) totcurrentsecs+=86400;
if (!showTIME) {
//if ((long)(tottime1 - 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