|
|
@ -9,7 +9,8 @@
|
|
|
|
#define pinKLineRX 4
|
|
|
|
#define pinKLineRX 4
|
|
|
|
|
|
|
|
|
|
|
|
EncButton<EB_TICK, pinButton> btnUp(INPUT);
|
|
|
|
EncButton<EB_TICK, pinButton> btnUp(INPUT);
|
|
|
|
|
|
|
|
//#define DEBUG;
|
|
|
|
|
|
|
|
#define LOGS;
|
|
|
|
// avr
|
|
|
|
// avr
|
|
|
|
#define FIS_ENA 5
|
|
|
|
#define FIS_ENA 5
|
|
|
|
#define FIS_CLK 6
|
|
|
|
#define FIS_CLK 6
|
|
|
@ -28,7 +29,7 @@ VAGFISWriter fisWriter(FIS_CLK, FIS_DATA, FIS_ENA, 1);
|
|
|
|
|
|
|
|
|
|
|
|
int ADR_Engine_Speed = 10400;
|
|
|
|
int ADR_Engine_Speed = 10400;
|
|
|
|
int ADR_Dashboard_Speed = 10400;
|
|
|
|
int ADR_Dashboard_Speed = 10400;
|
|
|
|
|
|
|
|
uint8_t ErrorArray[10];
|
|
|
|
NewSoftwareSerial obd(pinKLineRX, pinKLineTX, false); // RX, TX, inverse logic
|
|
|
|
NewSoftwareSerial obd(pinKLineRX, pinKLineTX, false); // RX, TX, inverse logic
|
|
|
|
|
|
|
|
|
|
|
|
bool logoDash = 0;
|
|
|
|
bool logoDash = 0;
|
|
|
@ -142,6 +143,7 @@ float L100AVG;
|
|
|
|
// int ix = 1;
|
|
|
|
// int ix = 1;
|
|
|
|
bool SaveL100Flag = false;
|
|
|
|
bool SaveL100Flag = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String floatToString(float v)
|
|
|
|
String floatToString(float v)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
String res;
|
|
|
|
String res;
|
|
|
@ -619,6 +621,54 @@ bool readSensors(int group){
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// чтение ошибок. Пишется в массив ErrorArray - 0 элемент - количество ошибок, дальше их номера
|
|
|
|
|
|
|
|
bool readErrors(){
|
|
|
|
|
|
|
|
// uint8_t ErrorArray[10];
|
|
|
|
|
|
|
|
memset(ErrorArray, 0, sizeof(ErrorArray));
|
|
|
|
|
|
|
|
char s[64];
|
|
|
|
|
|
|
|
sprintf(s, "\x03%c\x07\x03", blockCounter);
|
|
|
|
|
|
|
|
#ifdef DEBUG
|
|
|
|
|
|
|
|
Serial.println(F("TUTTUTTUTTUTTUT"));
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
if (!KWPSendBlock(s, 4)) return false;
|
|
|
|
|
|
|
|
int size = 0;
|
|
|
|
|
|
|
|
KWPReceiveBlock(s, 64, size);
|
|
|
|
|
|
|
|
if (s[3] == '\xFF' && s[4] == '\xFF') {
|
|
|
|
|
|
|
|
#ifdef DEBUG
|
|
|
|
|
|
|
|
Serial.println(F("No errors in ECU"));
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (s[2] != '\xFC') {
|
|
|
|
|
|
|
|
#ifdef DEBUG
|
|
|
|
|
|
|
|
Serial.println(F("Invalid answer from ECU"));
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#ifdef LOGS
|
|
|
|
|
|
|
|
Serial.println(F("------readErrors------"));
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
int count = (size-4) / 3;
|
|
|
|
|
|
|
|
#ifdef DEBUG
|
|
|
|
|
|
|
|
Serial.print(F("count="));
|
|
|
|
|
|
|
|
Serial.println(count);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
for (int idx=0; idx < count; idx++){
|
|
|
|
|
|
|
|
byte a=s[3 + idx*3];
|
|
|
|
|
|
|
|
byte b=s[3 + idx*3+1];
|
|
|
|
|
|
|
|
byte k=s[3 + idx*3+2];
|
|
|
|
|
|
|
|
int v = a*256+b;
|
|
|
|
|
|
|
|
ErrorArray[0] = count;
|
|
|
|
|
|
|
|
ErrorArray[idx+1] = v;
|
|
|
|
|
|
|
|
#ifdef LOGS
|
|
|
|
|
|
|
|
Serial.println(v);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// конец чтения ошибок
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void getECUSensor(int groupNum)
|
|
|
|
void getECUSensor(int groupNum)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (currAddr != ADR_Engine)
|
|
|
|
if (currAddr != ADR_Engine)
|
|
|
@ -696,7 +746,7 @@ void loop()
|
|
|
|
if (btnUp.hasClicks(1))
|
|
|
|
if (btnUp.hasClicks(1))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
currPage++;
|
|
|
|
currPage++;
|
|
|
|
if (currPage > 9)
|
|
|
|
if (currPage > 10)
|
|
|
|
currPage = 1;
|
|
|
|
currPage = 1;
|
|
|
|
eeprom_update_byte(0, currPage);
|
|
|
|
eeprom_update_byte(0, currPage);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -705,7 +755,7 @@ void loop()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
currPage--;
|
|
|
|
currPage--;
|
|
|
|
if (currPage < 1)
|
|
|
|
if (currPage < 1)
|
|
|
|
currPage = 9;
|
|
|
|
currPage = 10;
|
|
|
|
eeprom_update_byte(0, currPage);
|
|
|
|
eeprom_update_byte(0, currPage);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -713,6 +763,15 @@ void loop()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
case 1:
|
|
|
|
case 1:
|
|
|
|
fisWriter.sendString("AUDI", "QUATTRO");
|
|
|
|
fisWriter.sendString("AUDI", "QUATTRO");
|
|
|
|
|
|
|
|
// if (currAddr != ADR_Engine)
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// connect(ADR_Engine, ADR_Engine_Speed);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// else
|
|
|
|
|
|
|
|
// {
|
|
|
|
|
|
|
|
// readErrors();
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
case 2:
|
|
|
@ -784,6 +843,20 @@ void loop()
|
|
|
|
case 9:
|
|
|
|
case 9:
|
|
|
|
getDashboardSensor(2);
|
|
|
|
getDashboardSensor(2);
|
|
|
|
fisWriter.sendString("FUEL:", String(fuelLevel));
|
|
|
|
fisWriter.sendString("FUEL:", String(fuelLevel));
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 10:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (currAddr != ADR_Engine)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
connect(ADR_Engine, ADR_Engine_Speed);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
readErrors();
|
|
|
|
|
|
|
|
fisWriter.sendString(String(ErrorArray[0]), String(ErrorArray[1]));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -889,6 +962,10 @@ void loop()
|
|
|
|
mess = ".............";
|
|
|
|
mess = ".............";
|
|
|
|
}else if(engineSpeed < 4900){
|
|
|
|
}else if(engineSpeed < 4900){
|
|
|
|
mess = "..............";
|
|
|
|
mess = "..............";
|
|
|
|
|
|
|
|
}else if(engineSpeed < 5200){
|
|
|
|
|
|
|
|
mess = "...............";
|
|
|
|
|
|
|
|
}else if(engineSpeed < 5500){
|
|
|
|
|
|
|
|
mess = "..............";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
fisWriter.sendStringFS(1,18,0x05,mess);
|
|
|
|
fisWriter.sendStringFS(1,18,0x05,mess);
|
|
|
|
}
|
|
|
|
}
|
|
|
|