Бортовой компьютер для Опель Зафира.

MaksVV
Offline
Зарегистрирован: 06.08.2015

переводчик (драйвера экрана) либо  UTFT.h  (для твоего старого экрана),   либо UTFTGLUE.h   либо   MCUFRIEND_kbv.h  .  Вместе их не надо. Последние две подходят для твоего нового экрана. 

UTFTGLUE совместима по функциям с твоим новым экраном, но вроде как тормозит.  MCUFRIEND_kbv.h  имеет  другие функции и фиг знает тормозит или нет. 

Вот описание драйверов экрана MCUFRIEND_kbv.h   

viki13viki
Offline
Зарегистрирован: 14.11.2016

я закоменчу френда. но нужно чтобы скетч заработал. перекинешь сюда чтобы не бегать на прошлую страницу когда подправишь

viki13viki
Offline
Зарегистрирован: 14.11.2016

попробовал еще раза 1536

Send request INIT to PCM  6461
Receive PCM: 83 Message fail timeout
Send request INIT to PCM  11020
Send request INIT to PCM  15248
Receive PCM: 83 Message fail timeout
Send request INIT to PCM  19490
Send request INIT to PCM  23718
Receive PCM: 83 Message fail timeout
 

если закоментить френда то ошибка компиляции

no matching function for call to 'UTFTGLUE::setFont(const GFXfont*)'

MaksVV
Offline
Зарегистрирован: 06.08.2015

делай это

MaksVV пишет:

и напиши простой скетч с периодическим выводом на экран статических переменных (пусть они будут, но не обновляются от эбу, чтоб скетч был простой, а просто ++ каждый вывод на экран, ну хотябы пара переменных пусть наращивается). Будет ли мигать? 

viki13viki
Offline
Зарегистрирован: 14.11.2016

дак щас вообще не инитится эбу. это нужно подправить. а потом с миганиме разбератся буду. он же уже работал, после какихто последних подправок перестал общатся с эбу. нужно вернуть состояние когда он работал, пусть мигает, я буду копать. мне главное чтобы твоя система работала. остальное я уже разберусь

MaksVV
Offline
Зарегистрирован: 06.08.2015

дак закоменти в лупе LCDDataprint() и всё. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

вот тебе скетч для проверки экрана, тормозит или нет

uint32_t prevData = 0; 
uint32_t curmillis = 0; 
#include <Adafruit_GFX.h>
#include <UTFTGLUE.h>              
UTFTGLUE myGLCD(0x1581a,A2,A1,A3,A4,A0);


float L100M = 0;           //расход на 100 км измеренный за поездку
 float L100 = 0;            //мгновенный расход литров на 100км
 float LHor = 0;           //мгновенный расход топлива литров в час
 float L100SR = 0;         //расход литров на 100км измеренный раз в интервал kmL  
 float L100SR_TFT = 0;     // самый средний из расходов на 100км, он выводится на экран

 int L100_Eeprom[11]= {10,10,10,10,10,10,10,10,10,10,10};
 int FuelZamer[10]= {0};  // массив для измерения уровня (количества) топлива 
 int ZamerNumber = 0;     // номер замера уровня (количества) топлива 
 int n_eeprom = 0;        // текущий адрес ячейки еепром для записи расхода
 
 int MAF = 0;              //26,27 байты   Sensor de flujo de aire en masa
 float BoostPres = 0;      //28,29 байты   Presión de refuerzo
 int RPM = 0;              //32,33 байты   Velocidad del motor
 int EGRmg = 0;            //34,35 байты   Comando EGR (Comando de recirculación de gases de escape)
 float BoostPresCom = 0;   //38,39 байты   Comando de presión de refuerzo
 int Speed = 0;            //44,45 байты   Velocidad del vehículo
 float DesaInjQua = 0;     //50,51 байты   Cantidad de inyección deseada
 float InjQua = 0;         //52,53 байты   Cantidad de la inyección
 float StaDaliv = 0;       //54,55 байты   Inicio de la entrega
 int PumpRPM = 0;          //56,57 байты   Velocidad de la bomba
 float EGRPul = 0;         //62,63 байты   Relación de impulsos EGR (recirculación de gases de escape
 float SolenPul = 0;       //64,65 байты   Velocidad de solenoide de control de nivel de remolino Relación de impulsos
 float SolenPre = 0;       //70,71 байты   Relación de impulsos Presión Electroválvula de presión
 float DesInj = 0;         //72,73 байты   Inyección deseada Inicio
 float ActInj = 0;         //16,17 байты   Inicio de la inyección real
 int TempAir = 0;          //74,75 байты   Temperatura del aire de admisión
 int Temp = 0;             //14,15 байты   Temperatura del refrigerante
 int TempOil = 0;          //18,19 байты   Temperatura del aceite del motor
 int TempFuel = 0;         //58,59 байты   Temperatura del combustible
 
 //все что касается топлива
 float Fuel = 0;  //остаток топлива 
 float Fuel2 = 0;  //остаток мгновенного топлива байт 16 , датчика в баке
 int FuelIGN = 0;      // количество топлвива в баке на момент включения зажигания
 int Fuel_last = 0;   // для формул
 bool flagFuelIGN = 0; // флаг записан ли остаток топлива в момент вкл. зажигания 
 float FuelTrip = 0;     // количество литров топлива, израсходованное за один цикл включения зажигания
 
 //все что касается километража
 float kmAge = 0;             //пробег, полученный со щитка приборов
 int kmAgeIGN = 0;          //пробег который был в момент включения зажигания 
 int kmAge_last = 0;       // для формул
 bool flagkmAgeIGN = 0;     //флаг записан ли пробег в момент вкл. зажигания 
 float kmTrip = 0;            //пробег за один цикл включения зажигания
 int kmL = 10;               // интервал, через который будет происходить обновление среднего расхода на 100км
 int km = 0;              // переменная для расчетов
 int kmeeprom = 10;         // интервал, через который будет происходить подсчет среднеарифмитического расхода  L100SR_TFT
 int kmTFT =  0;     // переменная для расчетов периодического подсчета среднеарифмитического расхода топлива L100SR_TFT
 int kmREFUELING = 0;            // пробег до заправки на остатке топлива 
 


void setup() {
 Serial.begin(115200);
myGLCD.InitLCD(3);
myGLCD.clrScr();



}

void loop() {
curmillis = millis();
  LCDDataPrint();

}

void LCDDataPrint(){
   
     
  if (curmillis - prevData > 50){  
 MAF++;
 RPM ++;
 EGRmg++;
 Speed++;
 PumpRPM++;          
 TempAir++; 
 Temp++;             
 TempOil++;          
 TempFuel++;
 
     myGLCD.setColor(255, 255, 255);      //цвет текста
     //myGLCD.setBackColor(0,0,0);   //затирание текста
     //myGLCD.setTextColor(0xFFFF, 0x0000); 
     myGLCD.printNumI(Speed, 350, 7, 3);
  
 
     myGLCD.printNumF(LHor, 1, 60, 40, '.',5);
     myGLCD.printNumF(L100, 1, 210, 40,'.',5 );
     myGLCD.printNumF(L100M, 1, 60, 75,'.',5 );
     myGLCD.printNumF(L100SR_TFT, 1, 210, 75,'.',5 );
     myGLCD.printNumI(kmREFUELING, 60, 110,5 ); 
  
     myGLCD.printNumF(Fuel, 1, 210, 110,'.',5);
     
     myGLCD.printNumF(kmTrip, 1, 60, 145,'.',5);
     myGLCD.printNumF(FuelTrip, 1, 210, 145,'.',5);
     myGLCD.printNumI(PumpRPM, 210, 180,5);
     myGLCD.printNumI(RPM, 210, 215,5);
     myGLCD.printNumF(Fuel2, 1, 0, 215,'.',5);      
     myGLCD.printNumI(Temp, 415, 40, 3);
     myGLCD.printNumI(TempOil, 415, 75, 3);
     myGLCD.printNumI(TempFuel, 415, 110,3); 
 //  myGLCD.printNumI(sensors.getTempCByIndex(0), 415, 145 , 3);
 
     myGLCD.printNumI(TempAir, 415, 215, 3); 
   
   
    prevData = curmillis;
  //  Serial.println(millis());
    }}

 

viki13viki
Offline
Зарегистрирован: 14.11.2016

не мигает не тормозит , цифры меняются красиво

я нашел причину. шрифт сабака такая. закоментил и все гладко работает не мигает

MaksVV
Offline
Зарегистрирован: 06.08.2015

кстати изза шрифта как раз и тормозит наверное 

MaksVV
Offline
Зарегистрирован: 06.08.2015

закоменти в сетапе и самом верху строчки связанные со шрифтом Gobold 

viki13viki
Offline
Зарегистрирован: 14.11.2016

да я выше написал. сабака бы его нюхала. все работает нужно ща доработать увеличить шрифт.я закоментил френад а помом по обибкам увидел шрифты. закоментил и все стало пучком . ща с шрифтом разберусь.....

viki13viki
Offline
Зарегистрирован: 14.11.2016

залил вот это

#include <Adafruit_GFX.h>
 //#include <MCUFRIEND_kbv.h>
 #include <UTFTGLUE.h>//use GLUE class and constructor
 #include "TouchScreen.h"
 #include <stdint.h>
 #include <SPI.h>
 #include <EEPROM.h>
 MCUFRIEND_kbv tft;
 #include "Fonts/Gobold_Bold14pt7b.h";

#define MINPRESSURE 200
#define MAXPRESSURE 1000

//pin 20 SCL , 21 SDA датчик реального времени
 #include <Wire.h>
 #include "RTClib.h"
 RTC_DS3231 rtc;       

UTFTGLUE myGLCD(0x1581,A2,A1,A3,A4,A0); //all dummy args
 
 const int XP = 6, XM = A2, YP = A1, YM = 7; 
 const int TS_LEFT = 136, TS_RT = 907, TS_TOP = 139, TS_BOT = 942;
 TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
 uint16_t ID;
 int x, y;
 char currentPage;
 float h;
 float t;
 bool Dvoet = 0;
 

#include <SoftwareSerial.h>
 #define TX_PCM 13
 SoftwareSerial K_LINE_PCM   (12, TX_PCM); //RХ,TХ

#define PCM_address  0x11        // адрес PCM 
#define DIAG_address 0xF1        // адрес диагностики

#define debugPCM                 // раскоментировать эту строку для отладки в Serial порту обмена с PCM
//#define debugGAUGE             // раскоментировать эту строку для отладки в Serial порту обмена co щитком приборов

 
 uint32_t curmillis = 0;         // снимок текущего времени 
 uint32_t prevRequest  = 0;      // таймер периодических запосов на PCM
 uint16_t RequestPeriod = 3500;  // периодичность запросов на PCM

 uint32_t prevRESETheader=0; // таймер сброса сообщения, если данные оборвались посередине сообщения 
 bool RESETheader_timer;     // таймер сброса сообщения, если данные оборвались посередине сообщения 
 
 uint32_t prev_NOanswer=0;   // таймер контроля неответов от ЭБУ после подачи запросов
 bool NOanswer_timer = 0;    // таймер контроля неответов от ЭБУ после подачи запросов
 byte noanswers = 0;         // количество подряд неответов от ЭБУ 
 
 uint32_t timerdelay = 0;    // таймер ожидания байт (для успевания появления данных в буфере UART)
 bool Delay = 0;             // таймер ожидания байт (для успевания появления данных в буфере UART)
 byte waitbyte_RX = 1;       // задержка, мс для успевания появления данных в буфере RX 
                             // (подрегулировать в зависимости от уровня жизнидеятельности на Марсе) 
 #define TIMER_DELAY Delay = 0; timerdelay = curmillis  // включение этого таймера
  
byte delaybyte_TX  = 1;   // задержка между отправкой байт в запросах, мс
byte header = 0;          // состояние заголовка
byte message_size = 0;    // размер тела сообщения
byte j = 3;               // инкремент
byte n = 3;               // количество старт байт
const byte bufsize = 150; // размер буфера принятого сообщения
byte MessageRx_PCM [bufsize] = {0}; // буфер принятого сообщения
byte crc =0;              // байт контрольной суммы 

  
// возможные варианты запросов на ЭБУ:
enum REQUEST {
 INIT,    
 PID,     
 DTCERASE,
 DTCREAD,
 PRESENT,
 };

// текстовки запросов для отладки 
char* textRequest[] = {
 "INIT",    
 "PID_2101",     
 "DTC_ERASE",
 "DTC_READ",
 "PRESENT",
    } ;

 // сами запросы
 byte PCM_Message_TX[][5] = {
 {1,  0x81,           0,0,0},      // запрос инициализации
 {2,  0x21,0x01,        0,0},      // запрос пид 2101
 {3,  0x14,0xFF,0x00,     0},      // запрос на стирание ошибок
 {4,  0x18,0x00,0xFF,0x00  },      // запрос на чтение ошибок
 {1,  0x3E,           0,0,0},      // запрос присутствия 
                            };

byte request = INIT;               // переменная, показывающая какой запрос будем делать

//-------------------------------------------переменные бортовика

 float L100M = 0;           //расход на 100 км измеренный за поездку
 float L100 = 0;            //мгновенный расход литров на 100км
 float LHor = 0;           //мгновенный расход топлива литров в час
 float L100SR = 0;         //расход литров на 100км измеренный раз в интервал kmL  
 float L100SR_TFT = 0;     // самый средний из расходов на 100км, он выводится на экран

 int L100_Eeprom[11]= {10,10,10,10,10,10,10,10,10,10,10};
 int FuelZamer[10]= {0};  // массив для измерения уровня (количества) топлива 
 int ZamerNumber = 0;     // номер замера уровня (количества) топлива 
 int n_eeprom = 0;        // текущий адрес ячейки еепром для записи расхода
 
 int MAF = 0;              //26,27 байты   Sensor de flujo de aire en masa
 float BoostPres = 0;      //28,29 байты   Presión de refuerzo
 int RPM = 0;              //32,33 байты   Velocidad del motor
 int EGRmg = 0;            //34,35 байты   Comando EGR (Comando de recirculación de gases de escape)
 float BoostPresCom = 0;   //38,39 байты   Comando de presión de refuerzo
 int Speed = 0;            //44,45 байты   Velocidad del vehículo
 float DesaInjQua = 0;     //50,51 байты   Cantidad de inyección deseada
 float InjQua = 0;         //52,53 байты   Cantidad de la inyección
 float StaDaliv = 0;       //54,55 байты   Inicio de la entrega
 int PumpRPM = 0;          //56,57 байты   Velocidad de la bomba
 float EGRPul = 0;         //62,63 байты   Relación de impulsos EGR (recirculación de gases de escape
 float SolenPul = 0;       //64,65 байты   Velocidad de solenoide de control de nivel de remolino Relación de impulsos
 float SolenPre = 0;       //70,71 байты   Relación de impulsos Presión Electroválvula de presión
 float DesInj = 0;         //72,73 байты   Inyección deseada Inicio
 float ActInj = 0;         //16,17 байты   Inicio de la inyección real
 int TempAir = 0;          //74,75 байты   Temperatura del aire de admisión
 int Temp = 0;             //14,15 байты   Temperatura del refrigerante
 int TempOil = 0;          //18,19 байты   Temperatura del aceite del motor
 int TempFuel = 0;         //58,59 байты   Temperatura del combustible
 
 //все что касается топлива
 float Fuel = 0;  //остаток топлива 
 float Fuel2 = 0;  //остаток мгновенного топлива байт 16 , датчика в баке
 int FuelIGN = 0;      // количество топлвива в баке на момент включения зажигания
 int Fuel_last = 0;   // для формул
 bool flagFuelIGN = 0; // флаг записан ли остаток топлива в момент вкл. зажигания 
 float FuelTrip = 0;     // количество литров топлива, израсходованное за один цикл включения зажигания
 
 //все что касается километража
 float kmAge = 0;             //пробег, полученный со щитка приборов
 int kmAgeIGN = 0;          //пробег который был в момент включения зажигания 
 int kmAge_last = 0;       // для формул
 bool flagkmAgeIGN = 0;     //флаг записан ли пробег в момент вкл. зажигания 
 float kmTrip = 0;            //пробег за один цикл включения зажигания
 int kmL = 10;               // интервал, через который будет происходить обновление среднего расхода на 100км
 int km = 0;              // переменная для расчетов
 int kmeeprom = 10;         // интервал, через который будет происходить подсчет среднеарифмитического расхода  L100SR_TFT
 int kmTFT =  0;     // переменная для расчетов периодического подсчета среднеарифмитического расхода топлива L100SR_TFT
 int kmREFUELING = 0;            // пробег до заправки на остатке топлива 
 
 unsigned long prevWatch = 0;
 unsigned long prevDvoet = 0;
 unsigned long prevData  = 0;

 
void setup() {
   uint16_t ID = myGLCD.readID();
   if (ID == 0xD3D3) ID = 0x1581; // write-only shield
   myGLCD.begin(ID);  
   myGLCD.InitLCD(3);
   myGLCD.clrScr();
   //myGLCD.setFont(&Gobold_Bold14pt7b);  

   Wire.begin();
   rtc.begin();
   
   //загрузка стартовой страницы
   currentPage = '0';       
   drawHomeScreen();  

   //подсчет среднеарифметического усредненного расхода
   for (int i = 0; i < 11; i++) L100_Eeprom [i]= EEPROM.read(i);
   for (int i = 0; i < 11; i++) L100SR_TFT = L100SR_TFT +  L100_Eeprom [i];
   L100SR_TFT = (float)L100SR_TFT/110.0;
   if (L100SR_TFT<0) L100SR_TFT = 0;
   if (L100SR_TFT>99) L100SR_TFT = 99;
   
   // строка ниже используется для настройки даты и времени часов 
   // раскоментировать, выставить времая и дату, залить в ардуино. в скетче закоментировать
   // обратно и залить еще раз, иначе каждый раз будет по новой выствлятся это же время и дата
   // (год, месяц, день, часы, минуты, секунды)
   //rtc.adjust(DateTime(2017, 7, 21, 13, 57, 0));
 
 
 #if defined debugPCM or debugGAUGE   
   Serial.begin(115200);
 #endif
   K_LINE_PCM.begin(10400);
   pinMode(TX_PCM, OUTPUT);
  
             }


    void loop() 
                {
curmillis = millis();              // снимок текущего времени

if (curmillis - prevRequest > RequestPeriod && header == 0) 
    {
  if (request == INIT) fastinit();                                          // при необходимости делаем переподключение к PCM
  else {sendMessagePCM(request); if (request == PID) RequestPeriod = 600; } // отправляем на PCM текущий запрос
  prevRequest = curmillis;
    }

receivePCM ();// приём сообщений от PCM
LCDDataPrint(); 
Menu ();               
if (curmillis - prevWatch > 3000)  { Watch (); prevWatch = curmillis;}
if (curmillis - prevDvoet > 500)  { if (!Dvoet) {myGLCD.print(":", 290, 5);} else {myGLCD.print(" ", 285, 0);} prevDvoet = curmillis; Dvoet=!Dvoet;}                
                
                }// end loop


 void fastinit() {
   digitalWrite (TX_PCM, HIGH);  // bus idle
   delay(1500);              
   digitalWrite (TX_PCM, LOW);  // first part fastinit  (25 ms LOW)
   delay(25);
   digitalWrite (TX_PCM, HIGH); // second part fastinit (25 ms HIGH)
   delay(25);               
   K_LINE_PCM.begin(10400);
   sendMessagePCM(INIT);        // send start communication message 
      }  
 
  
  void receivePCM () {

 if (K_LINE_PCM.available() ){
    
 // первый старт байт
 if (header == 0 && Delay){TIMER_DELAY ; MessageRx_PCM[0]=K_LINE_PCM.read();  
         if (MessageRx_PCM[0]!=0xFF && bitRead (MessageRx_PCM[0],7)){header = 1; RESETheader_timer = 1; prevRESETheader = curmillis; 
               #ifdef debugPCM
                  Serial.print (F("Receive PCM: ")); printDebugRX(MessageRx_PCM[0]);
               #endif               
                                                }
                          }                  

 // второй старт байт
 if (header == 1 && Delay){TIMER_DELAY ; MessageRx_PCM[1]=K_LINE_PCM.read(); 
 #ifdef debugPCM
      printDebugRX (MessageRx_PCM[1]);
 #endif
      if (MessageRx_PCM[1]==DIAG_address){ header = 2;} 
      else {
        #ifdef debugPCM 
        Serial.println(F(" PCM Message fail address")); 
        #endif
        header = 0; RESETheader_timer = 0;}} 

 // третий старт байт
 if (header == 2 && Delay){ 
  TIMER_DELAY ;
  MessageRx_PCM[2]=K_LINE_PCM.read(); 
  #ifdef debugPCM
  printDebugRX (MessageRx_PCM[2]);
  #endif
  if (MessageRx_PCM[2]==PCM_address){ message_size = MessageRx_PCM[0]; prevRESETheader = curmillis;
       if (MessageRx_PCM[0] !=0x80) {header = 4;  bitWrite (message_size, 7 , 0);j=3;n=3;}
       else {header = 3; j=4;n=4;}
       if (message_size > bufsize) message_size = bufsize;  crc = 0;} 
  else {header = 0; 
        #ifdef debugPCM 
        Serial.println(F("PCM Message fail address")); 
        #endif
        RESETheader_timer = 0;}
  
                          }  
// если размер сообщения указан в дополнительном байте (нулевой байт 0x80) читаем этот дополнительный байт:
if (header == 3 && Delay){
  TIMER_DELAY ; prevRESETheader = curmillis;
  MessageRx_PCM[3]=K_LINE_PCM.read(); 
  #ifdef debugPCM
  printDebugRX(MessageRx_PCM[3]);
  #endif
  message_size = MessageRx_PCM[3]; 
  if (message_size > bufsize) message_size = bufsize;  
  crc = 0; header = 4;  
                         }

  // пишем тело сообщения 
 if (header == 4 && Delay && j< message_size+n+1) {
 MessageRx_PCM[j] = K_LINE_PCM.read(); prevRESETheader = curmillis;
 if (j<message_size+n) crc+= MessageRx_PCM[j]; // подсчёт КС
 
 if (j==message_size+n) header = 5; 
 TIMER_DELAY ; 
 #ifdef debugPCM
 printDebugRX(MessageRx_PCM[j]);
 #endif  
 j++;                                             } 
 }

 // сообщение приняли, действуем
 if (header == 5) {TIMER_DELAY ;  
 #ifdef debugPCM
 Serial.println();
 #endif  
 NOanswer_timer = 0; noanswers = 0;    // сбрасываем таймер контроля неответов 

for(byte i = 0; i<n; i++) crc+=MessageRx_PCM[i]; // прибавляем к контрольной сумме старт байты

 // если контрольная сумма верна: 
if ( crc == MessageRx_PCM[message_size+n]) 
{  
  #ifdef debugPCM
  Serial.print (F("Received message is OK! Checksum is correct!"));  Serial.print (F("  ")); Serial.println (millis()); // Если КС совпала, тут чёнибудь нужное делаем
  printDebugRX_CSgood(); 
  #endif
      if (MessageRx_PCM[n]==0xC1 && MessageRx_PCM[n+1]==0x6B && MessageRx_PCM[n+2]==0x8F) {
              if (currentPage!=3) {request = PID; RequestPeriod = 70;} else request = DTCREAD, RequestPeriod = 3000; prevRequest = curmillis; // receive good INIT
                                                                                          }
 else if (MessageRx_PCM[n]==0x58) Troublecodes (); // DTC
 else if (MessageRx_PCM[n]==0x54 && MessageRx_PCM[n+1]==0xFF && MessageRx_PCM[n+2]==0x00){ request = DTCREAD; RequestPeriod = 3000; prevRequest = curmillis;} // DTC are cleared
 else if (MessageRx_PCM[n]==0x61 && MessageRx_PCM[n+1]==0x01) {dataVars() ; RequestPeriod = 70; prevRequest = curmillis; }           // receive DataStream
 
 
 }   

// если контрольная сумма не совпала: 
#ifdef debugPCM
  else Serial.println("CRC fail!!!" );
#endif
message_size = 0; header=0; RESETheader_timer = 0; j=3; crc = 0;
}

// таймер ожидания байт (для успевания появления данных в буфере UART)
if (!Delay && curmillis - timerdelay > waitbyte_RX) Delay = 1; 

// таймер сброса целостности сообщения (если данные оборвались посередине сообщения)
if (RESETheader_timer && curmillis - prevRESETheader > 200) { 
  #ifdef debugPCM 
  Serial.println(F("Message fail timeout")); 
  #endif 
  RESETheader_timer = 0; header = 0;}   
 
// если нет ответа после запроса: +1 к счетчику неответов. Если накопилось 6 и более: делаем реинит.  
if (request!=INIT && NOanswer_timer && curmillis - prev_NOanswer > RequestPeriod - RequestPeriod/10) 
         {
     NOanswer_timer = 0; noanswers++; 
     if (noanswers>=6) { noanswers = 0; request = INIT; RequestPeriod = 3500;}
         }
}// end receivePCM


void Troublecodes () 
{
  if (MessageRx_PCM[n]==0x58 && MessageRx_PCM[n+1]==0x00){
    myGLCD.clrScr();             
    drawscreen_three();      
    myGLCD.print("NO DTC", 165, 145);
    Serial.println ("     NO DTC  "); }
    
  //при получении этого сообщения выдавать на третий экран "DTC BORRADO"
  if (MessageRx_PCM[n]==0x54 && MessageRx_PCM[n+1]==0xFF && MessageRx_PCM[n+2]==0x00){
    myGLCD.clrScr();             
    drawscreen_three();      
    myGLCD.print("DTC BORRADO", 165, 145);
    Serial.println ("     DTC BORRADO  "); }
   
  // при получении сообщения о наличии ошибок DTC разберем сообщение выведем на экран ошибки
  if (MessageRx_PCM[n]==0x58 && MessageRx_PCM[n+1]>0){
     Serial.println ("DTC is found!");
     myGLCD.clrScr();             
     drawscreen_three();       

  for (int i=0; i<MessageRx_PCM[n+8-7]; i++ ) {
     int y = i*35;
     bool nolA=0; bool nolB =0;
  if (!bitRead(MessageRx_PCM[n+11-7+(i*3)],6) && bitRead(MessageRx_PCM[n+11-7+(i*3)],7)){ myGLCD.setColor (0,255,0);
     myGLCD.print(" -Passive-", 300, (75+y));} // если DTC пасивныый делаем цвет зеленый 
  if (bitRead(MessageRx_PCM[n+11-7+(i*3)],7) && bitRead(MessageRx_PCM[n+11-7+(i*3)],6)) {myGLCD.setColor (255,0,0);  
     myGLCD.print(" -Active-", 300, (75+y));} // если DTC активный, делаем цвет красный 
     myGLCD.print("ERROR ", 50, (75+y));
     myGLCD.printNumI((i+1), 150, (75+y));
     
  if (!bitRead(MessageRx_PCM[n+9-7+(i*3)],6) && !bitRead(MessageRx_PCM[n+9-7+(i*3)],7)) myGLCD.print(": P", 170, (75+y));
  if (bitRead(MessageRx_PCM[n+9-7+(i*3)],6) && !bitRead(MessageRx_PCM[n+9-7+(i*3)],7)) myGLCD.print(": C", 170, (75+y));
  if (!bitRead(MessageRx_PCM[n+9-7+(i*3)],6) && bitRead(MessageRx_PCM[n+9-7+(i*3)],7)) myGLCD.print(": B", 170, (75+y));
  if (bitRead(MessageRx_PCM[n+9-7+(i*3)],6) && bitRead(MessageRx_PCM[n+9-7+(i*3)],7)) myGLCD.print(": U", 170, (75+y));

  if (MessageRx_PCM[n+9-7+(i*3)]==0x00) {myGLCD.print("00", 230, (75+y)); nolA = 1;}
  if (MessageRx_PCM[n+9-7+(i*3)]<=0x0F&&MessageRx_PCM[n+9-7+(i*3)]!=0) {myGLCD.print("0", 230, (75+y)); nolA = 1;} 
  if (nolA)myGLCD.print(String (MessageRx_PCM[n+9-7+(i*3)],HEX), 246, (75+y)); 
  else myGLCD.print(String (MessageRx_PCM[n+9-7+(i*3)],HEX), 230, (75+y));

  if (MessageRx_PCM[n+10-7+(i*3)]==0x00) {myGLCD.print("00", 262, (75+y)); nolB = 1;}
  if (MessageRx_PCM[n+10-7+(i*3)]<=0x0F&&MessageRx_PCM[n+10-7+(i*3)]!=0) {myGLCD.print("0", 262, (75+y)); nolB = 1;}
  if (nolB)myGLCD.print(String (MessageRx_PCM[n+10-7+(i*3)]),HEX, 278, (75+y)); 
  else myGLCD.print(String (MessageRx_PCM[n+10-7+(i*3)],HEX), 262, (75+y));}} 



}



void dataVars() 
{
  //Barom = MessageRx_PCM[39];
   L100 = (float)LHor*100.0/(float)Speed;
   LHor = (float)RPM* (float)InjQua*2.00/1000.0*60.00/1000.0/0.85;
   MAF =  ((MessageRx_PCM[n+22]*256)+MessageRx_PCM[n+23])/10;
   BoostPres =  ((MessageRx_PCM[n+24]*256)+MessageRx_PCM[n+25])/1000.0;
   RPM =  (MessageRx_PCM[n+35-7]*256)+MessageRx_PCM[n+36-7];
   EGRmg =  ((MessageRx_PCM[n+37-7]*256)+MessageRx_PCM[n+38-7])/10.0;
   BoostPresCom =  ((MessageRx_PCM[n+41-7]*256)+MessageRx_PCM[n+42-7])/1000.0;
   Speed =  ((MessageRx_PCM[n+47-7]*256)+MessageRx_PCM[n+48-7])/100;
   DesaInjQua =  ((MessageRx_PCM[n+53-7]*256)+MessageRx_PCM[n+54-7])/100.0;
   InjQua =  ((MessageRx_PCM[n+55-7]*256)+MessageRx_PCM[n+56-7])/100.0;
   StaDaliv =  ((MessageRx_PCM[n+57-7]*256)+MessageRx_PCM[n+58-7])/100.0;
   PumpRPM =  (MessageRx_PCM[n+59-7]*256)+MessageRx_PCM[n+60-7];
   EGRPul =  ((MessageRx_PCM[n+65-7]*256)+MessageRx_PCM[n+66-7])/100.0;
   SolenPul =  ((MessageRx_PCM[n+67-7]*256)+MessageRx_PCM[n+68-7])/100.0;
   SolenPre =  ((MessageRx_PCM[n+73-7]*256)+MessageRx_PCM[n+74-7])/100.0;
   DesInj =  ((MessageRx_PCM[n+75-7]*3)+(MessageRx_PCM[n+76-7])/100.0)+0.3;
   ActInj =  ((MessageRx_PCM[n+19-7]*3)+(MessageRx_PCM[n+20-7])/100.0)+0.3;
   //TempAir =  ((MessageRx_PCM[n+77-7]*26)-278)+MessageRx_PCM[n+78-7]/10.0;
   //Temp =  ((MessageRx_PCM[n+17-7]*26)-278)+MessageRx_PCM[n+18-7]/10.0;
   //TempOil =  ((MessageRx_PCM[n+21-7]*26)-278)+MessageRx_PCM[n+22-7]/10.0;
   //TempFuel =  ((MessageRx_PCM[n+61-7]*26)-278)+MessageRx_PCM[n+62-7]/10.0;
   //ниже идут расчетные формулы более точные чем те что закоментированы выше
   int A = 0;
   if  (MessageRx_PCM[n+77-7]<=0x0A) A = 277;
   if  (MessageRx_PCM[n+77-7]==0x0B || MessageRx_PCM[n+77-7]==0x0C) A = 278;
   if  (MessageRx_PCM[n+77-7]>=0x0D) A = 279;
   double B = MessageRx_PCM[n+78-7]/10.0;
   double cel , drob ;
   drob = modf(B, &cel);
   if (drob>0.6) cel++;
     TempAir =  ((MessageRx_PCM[n+77-7]*26)-A)+cel;
   
   if  (MessageRx_PCM[n+17-7]<=0x0A) A = 277;
   if  (MessageRx_PCM[n+17-7]==0x0B || MessageRx_PCM[n+17-7]==0x0C) A = 278;
   if  (MessageRx_PCM[n+17-7]>=0x0D) A = 279;
   B = MessageRx_PCM[n+18-7]/10.0;
   drob = modf(B, &cel);
   if (drob>0.6) cel++;
     Temp =  ((MessageRx_PCM[n+17-7]*26)-A)+cel;


   if  (MessageRx_PCM[n+21-7]<=0x0A) A = 277;
   if  (MessageRx_PCM[n+21-7]==0x0B || MessageRx_PCM[n+21-7]==0x0C) A = 278;
   if  (MessageRx_PCM[n+21-7]>=0x0D) A = 279;
   B = MessageRx_PCM[n+22-7]/10.0;
   drob = modf(B, &cel);
   if (drob>0.6) cel++;
     TempOil =  ((MessageRx_PCM[n+21-7]*26)-A)+cel;


   if  (MessageRx_PCM[n+61-7]<=0x0A) A = 277;
   if  (MessageRx_PCM[n+61-7]==0x0B || MessageRx_PCM[n+61-7]==0x0C) A = 278;
   if  (MessageRx_PCM[n+61-7]>=0x0D) A = 279;
   B = MessageRx_PCM[n+62-7]/10.0;
   drob = modf(B, &cel);
   if (drob>0.6) cel++;
     TempFuel =  ((MessageRx_PCM[n+61-7]*26)-A)+cel;   


myGLCD.setColor(255, 255, 255);      //цвет текста
     myGLCD.printNumI(Speed, 350, 7, 3);
  //----------------------------------------------------------
  //страниц HOME
  //----------------------------------------------------------
  if (currentPage == '0') {
     myGLCD.printNumF(LHor, 1, 60, 40, '.',5);
     myGLCD.printNumF(L100, 1, 210, 40,'.',5 );
     myGLCD.printNumF(L100M, 1, 60, 75,'.',5 );
     myGLCD.printNumF(L100SR_TFT, 1, 210, 75,'.',5 );
     myGLCD.printNumI(kmREFUELING, 60, 110,5 ); 
     //if (Fuel<53) 
     myGLCD.printNumF(Fuel, 1, 210, 110,'.',5);
     //else myGLCD.print("MAX", 210, 110); 
     myGLCD.printNumF(kmTrip, 1, 60, 145,'.',5);
     myGLCD.printNumF(FuelTrip, 1, 210, 145,'.',5);
     myGLCD.printNumI(PumpRPM, 210, 180,5);
     myGLCD.printNumI(RPM, 210, 215,5);
     myGLCD.printNumF(Fuel2, 1, 0, 215,'.',5);      
     myGLCD.printNumI(Temp, 415, 40, 3);
     myGLCD.printNumI(TempOil, 415, 75, 3);
     myGLCD.printNumI(TempFuel, 415, 110,3); 
  //   myGLCD.printNumI(sensors.getTempCByIndex(0), 415, 145 , 3);
     myGLCD.printNumI(t, 415, 180, 3);
     myGLCD.printNumI(TempAir, 415, 215, 3); }
   //----------------------------------------------------------
   //страниц INF1
   //----------------------------------------------------------
   if (currentPage == '1') {
     myGLCD.printNumF(StaDaliv,1, 360, 40,'.', 3);
     myGLCD.printNumF(DesInj,1, 395, 75, '.', 4);
     myGLCD.printNumF(ActInj,1, 395, 110,'.', 4); 
     myGLCD.printNumF(DesaInjQua,1, 395, 145,'.', 4);  
     myGLCD.printNumF(InjQua,1, 395, 180,'.', 4); 
     myGLCD.printNumI(MAF, 170, 215, 4);
     myGLCD.printNumF(h, 1, 418, 215); }
   //----------------------------------------------------------
   //страниц INF2
   //----------------------------------------------------------
   if (currentPage == '2') {    
     myGLCD.printNumF(BoostPres,1, 395, 40,'.', 4);  
     myGLCD.printNumF(BoostPresCom,1, 395, 75,'.', 4); 
     myGLCD.printNumI(EGRmg, 395, 110, 4);  
     myGLCD.printNumF(EGRPul,1, 410, 145,'.', 3);  
     myGLCD.printNumF(SolenPul, 1, 395, 180,'.', 4);  
     myGLCD.printNumF(SolenPre, 0, 410, 215,'.', 3); }
 
}



 void sendMessagePCM(const byte &command)
{
 #ifdef debugPCM                         
Serial.print (F("Send request "));  Serial.print (textRequest[command]); Serial.print (F(" to PCM  ")); Serial.println (millis());
 #endif
if (command != INIT) {NOanswer_timer = 1; prev_NOanswer = curmillis;}  //т.к. сейчас будем делать запрос, то запускаем таймер контроля неответов 
  byte size =  PCM_Message_TX[command][0];
  const byte siZe = size+4;
  byte Mes[siZe];
  byte Checksum = 0;
  for(byte i=0; i<siZe; i++) {
    if (i==0) {Mes[i]=size; bitWrite(Mes[i], 7 , 1);}
    if (i==1) Mes[i] = PCM_address;
    if (i==2) Mes[i] = DIAG_address;    
    if (i==3) {for (byte t=1; t<size+1; t++ ) {
           Mes[i]=PCM_Message_TX [command][t]; 
           Checksum+=Mes[i] ; 
           K_LINE_PCM.write (Mes[i]); 
           if (command == INIT) delay (5); delay (delaybyte_TX);  
           K_LINE_PCM.read(); 
           i++;}}
    if (i!=siZe-1) Checksum+=Mes[i];
    else Mes[i] = Checksum;    
    K_LINE_PCM.write (Mes[i]);
   if (command == INIT) delay (5); else delay (delaybyte_TX);
    K_LINE_PCM.read();
                             }
}// end sendMessagePCM



#if defined debugPCM or debugGAUGE
void printDebugRX (const byte &inbyte) {if (inbyte<=15) Serial.print(F("0")); Serial.print (inbyte, HEX);  Serial.print (F(" "));}
#endif

#ifdef debugPCM
void printDebugRX_CSgood(){
if (MessageRx_PCM[n]==0xC1 && MessageRx_PCM[n+1]==0x6B && MessageRx_PCM[n+2]==0x8F) {Serial.println (F("   Initialization OK!!!!")); }
 else if (MessageRx_PCM[n]==0x58 && MessageRx_PCM[n+1]==0x00) {Serial.println (F("     NO DTC  "));}
 else if (MessageRx_PCM[n]==0x58 && MessageRx_PCM[n+1] >0x00) {Serial.println (F("     DTC is found!"));} 
 else if (MessageRx_PCM[n]==0x54 && MessageRx_PCM[n+1]==0xFF && MessageRx_PCM[n+2]==0x00){Serial.println (F("     DTC CLEARED  "));}
 else if (MessageRx_PCM[n]==0x61 && MessageRx_PCM[n+1]==0x01) {Serial.println (F("     Receive PCM DATAstream"));}}
#endif                          



void Menu () {
     
    if (currentPage == '0') {
     TouchHOME();
     TouchINF1();
     TouchINF2();
     TouchCHECK(); }
    if (currentPage == '1') { 
     TouchHOME();
     TouchINF2();
     TouchCHECK(); }
    if (currentPage == '2') { 
     TouchHOME();
     TouchINF1();
     TouchCHECK(); }
    if (currentPage == '3') { 
     TouchHOME();
     TouchREAD();
     TouchERASE(); }}   
 
 
  void drawHomeScreen() {
    line() ;
    Watch ();
    myGLCD.setColor(255, 0, 0); // цвет линии и текста красный
    myGLCD.drawLine(295,35,295,248); // линия вертикальная
    myGLCD.drawLine(145,35,145,178); // линия вертикальная
    myGLCD.drawLine(80,178,80,247); // линия вертикальная
    myGLCD.print("L/H", 10, 40);
    myGLCD.print("L/A", 148, 40);
    myGLCD.print("L/V", 10, 75);
    myGLCD.print("L/M", 148, 75);
    myGLCD.print("D/K", 10, 110);
    myGLCD.print("D/L", 148, 110);
    myGLCD.print("V/K", 10, 145);
    myGLCD.print("V/L", 148, 145);
    myGLCD.print("PUMP RPM", 82, 180);
    myGLCD.print("ENGI   RPM", 82, 215);
    myGLCD.print("D/La", 10, 180);
    myGLCD.print("Motor C", 300, 40);
    myGLCD.print("OIL       C", 300, 75);
    myGLCD.print("FUEL    C", 300, 110);
    myGLCD.print("INTER  C", 300, 145);
    myGLCD.print("EXTER  C", 300, 180);
    myGLCD.print("INTAIR C", 300, 215); 
    myGLCD.drawRoundRect (15, 255, 145, 310);
    myGLCD.print("INF 1", 55, 270);
    myGLCD.drawRoundRect (175, 255, 305, 310);
    myGLCD.print("INF 2", 215, 270);
    myGLCD.drawRoundRect (335, 255, 465, 310);
    myGLCD.print("CHECK", 365, 270);
    myGLCD.drawRoundRect (1, 1, 77, 37);
    myGLCD.print("HOME", 10, 7);
    myGLCD.print("Km/h", 410, 7);
  }
 //-------------------------------------------------
   void drawscreen_one() {
    line() ;
    Watch ();
    myGLCD.setColor(255, 0, 0); // цвет линии и текста красный
    myGLCD.print("Start of Delivery   *CA:", 10, 40);
    myGLCD.print("Desir inject Start  *CA:", 10, 75);
    myGLCD.print("Actua Inject Start *CA:", 10, 110);
    myGLCD.print("Desir Inject Quan  mg/s:", 10, 145);
    myGLCD.print("Actu Inject Quant mg/s:", 10, 180);
    myGLCD.print("MAF  mg/s:", 10, 215);
    myGLCD.print("Humedad %:", 255, 215);
    myGLCD.drawRoundRect (175, 255, 305, 310);
    myGLCD.print("INF 2", 215, 270);
    myGLCD.drawRoundRect (335, 255, 465, 310);
    myGLCD.print("CHECK", 365, 270);
    myGLCD.drawRoundRect (1, 1, 77, 37);
    myGLCD.print("HOME", 10, 7);
    myGLCD.print("Km/h", 410, 7);
    }
 //-------------------------------------------------
  void drawscreen_two() {
    line() ;
    Watch ();
    myGLCD.setColor(255, 0, 0); // цвет линии и текста красный
    myGLCD.print("Boost Press          Bar:", 10, 40);
    myGLCD.print("Boost Press Com  Bar:", 10, 75);
    myGLCD.print("EGR command     mg/s:", 10, 110);
    myGLCD.print("EGR Pulse Ratio      %:", 10, 145);
    myGLCD.print("Solenoide Pulse      %:", 10, 180);
    myGLCD.print("Solenoide Boost      %:", 10, 215);
    myGLCD.drawRoundRect (15, 255, 145, 310);
    myGLCD.print("INF 1", 55, 270);
    myGLCD.drawRoundRect (335, 255, 465, 310);
    myGLCD.print("CHECK", 365, 270);
    myGLCD.drawRoundRect (1, 1, 77, 37);
    myGLCD.print("HOME", 10, 7);
    myGLCD.print("Km/h", 410, 7);
    }
 //----------------------------------------------------------------------------
  void drawscreen_three() {
    Watch ();
    myGLCD.setColor(255, 0, 0); // цвет линии красный
    myGLCD.drawLine(1,35,479,35); // линия горизонтальная
    myGLCD.drawLine(1,248,479,248); // линия горизонтальная
    myGLCD.drawRoundRect (15, 255, 145, 310);
    myGLCD.print("ERASE", 55, 270);
    myGLCD.drawRoundRect (335, 255, 465, 310);
    myGLCD.print("READ", 365, 270);
    myGLCD.drawRoundRect (1, 1, 77, 37);
    myGLCD.print("HOME", 10, 5);
    myGLCD.print("Km/h", 410, 3);
   }

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//кнопки тач . координаты и переходы
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void TouchHOME(){
TSPoint p = ts.getPoint();
    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);
if (p.z > 10 && p.z < 1000)
    {if (p.x > 140 && p.x < 320 && p.y > 140 && p.y < 260 && p.z > MINPRESSURE && p.z < MAXPRESSURE)
      { myGLCD.drawRoundRect (1, 1, 77, 37);
        currentPage = '0';     
        request = PID; RequestPeriod = 600; prevRequest = curmillis; // на PCM в этом окне посылается запрос текущих параметров
        myGLCD.clrScr();             
        drawHomeScreen();
        x = 0;
        y = 0;
        p.z = 0;}}}

void TouchINF1(){
TSPoint p = ts.getPoint();
    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);
if (p.z > 10 && p.z < 1000)
    {
      if (p.x > 150 && p.x < 450 && p.y > 770 && p.y < 890 && p.z > MINPRESSURE && p.z < MAXPRESSURE)
      { myGLCD.drawRoundRect (15, 255, 145, 310);
        currentPage = '1';    
        request = PID; RequestPeriod = 600; prevRequest = curmillis; // на PCM в этом окне посылается запрос текущих параметров       
        myGLCD.clrScr();             
        drawscreen_one();
        x = 0;
        y = 0;
        p.z = 0;}}}
    
void TouchINF2(){
TSPoint p = ts.getPoint();
    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);
if (p.z > 10 && p.z < 1000)
    {
    if (p.x > 450 && p.x < 680 && p.y > 770 && p.y < 890 && p.z > MINPRESSURE && p.z < MAXPRESSURE)
      { myGLCD.drawRoundRect (175, 255, 305, 310);
        currentPage = '2';     
        request = PID; RequestPeriod = 600; prevRequest = curmillis; // на PCM в этом окне посылается запрос текущих параметров      
        myGLCD.clrScr();             
        drawscreen_two();
        x = 0;
        y = 0;
        p.z = 0;}}}

void TouchCHECK(){
TSPoint p = ts.getPoint();
    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);
if (p.z > 10 && p.z < 1000)
    {
if (p.x > 690 && p.x < 950 && p.y > 770 && p.y < 890 && p.z > MINPRESSURE && p.z < MAXPRESSURE)
      { myGLCD.drawRoundRect (335, 255, 465, 310);
        currentPage = '3';  
       request = DTCREAD; RequestPeriod = 3000; prevRequest = curmillis; // на PCM в этом окне посылается запрос чтения ошибок  
        myGLCD.clrScr();             
        drawscreen_three();
        x = 0;
        y = 0;
        p.z = 0;}}}

void TouchREAD(){
TSPoint p = ts.getPoint();
    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);
if (p.z > 10 && p.z < 1000)
    {
if (p.x > 690 && p.x < 950 && p.y > 770 && p.y < 890 && p.z > MINPRESSURE && p.z < MAXPRESSURE)
      { myGLCD.drawRoundRect (335, 255, 465, 310);
        request = DTCREAD; RequestPeriod = 3000; prevRequest = curmillis; // на PCM при нажатии этой кнопки посылается запрос чтения ошибок  
        x = 0;
        y = 0;
        p.z = 0;}}}

void TouchERASE(){
TSPoint p = ts.getPoint();
    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);
if (p.z > 10 && p.z < 1000)
    {
if (p.x > 150 && p.x < 450 && p.y > 770 && p.y < 890 && p.z > MINPRESSURE && p.z < MAXPRESSURE)
      { myGLCD.drawRoundRect (15, 255, 145, 310);
       request = DTCERASE; RequestPeriod = 3000;  prevRequest = curmillis; // на PCM при нажатии этой кнопки посылается запрос удаления ошибок 
        x = 0;
        y = 0;
        p.z = 0;}}}
 ////////////////////////////////////////////////////////////////////////////////////////
 //прорисовка линий
 ///////////////////////////////////////////////////////////////////////////////////////
 void line() {
    myGLCD.setColor(255, 0, 0); // цвет линии красный
    myGLCD.drawLine(1,35,479,35); // линия горизонтальная
    myGLCD.drawLine(1,73,479,73); // линия горизонтальная
    myGLCD.drawLine(1,108,479,108); // линия горизонтальная
    myGLCD.drawLine(1,143,479,143); // линия горизонтальная
    myGLCD.drawLine(1,178,479,178); // линия горизонтальная
    myGLCD.drawLine(1,212,479,212); // линия горизонтальная
    myGLCD.drawLine(1,248,479,248); // линия горизонтальная
             }


void Watch (){
   DateTime now = rtc.now();
   int m = now.minute(); 
   int hour = now.hour();
   int mon = now.month();
   int date = now.day();
 
   myGLCD.setColor(255, 255, 255); //белый цвет цифры
 
   if (date<10) { 
   myGLCD.print("0", 85, 7); 
   myGLCD.printNumI(now.day(), 100, 7); } 
   else if (date >=10) {
   myGLCD.printNumI(now.day(), 85, 7); }
   myGLCD.print("/", 115, 7);
   if ( mon<10) {
   myGLCD.print("0", 130, 7); 
   myGLCD.printNumI(now.month(), 145, 7);} 
   else if (mon >=10) {
   myGLCD.printNumI(now.month(), 130, 7);}  
   myGLCD.print("/", 160, 7);
   myGLCD.printNumI(now.year(), 175, 7);
   if (hour<10) {
   myGLCD.print("0",255, 7); 
   myGLCD.printNumI(now.hour(), 270, 7); } 
   else if(hour>=10){ 
   myGLCD.printNumI(now.hour(), 255, 7); } 
   if (m<10) {
   myGLCD.print("0",300, 7); 
   myGLCD.printNumI(now.minute(), 315, 7); } 
   else if (m>=10){ 
   myGLCD.printNumI(now.minute(), 300, 7); }
    }          


       void LCDDataPrint(){
   
     
  if (curmillis - prevData > 100){  
     myGLCD.setColor(255, 255, 255);      //цвет текста
     //myGLCD.setBackColor(0,0,0);   //затирание текста
     //myGLCD.setTextColor(0xFFFF, 0x0000); 
     myGLCD.printNumI(Speed, 350, 7, 3);
  //----------------------------------------------------------
  //страниц HOME
  //----------------------------------------------------------
  if (currentPage == '0') {
     myGLCD.printNumF(LHor, 1, 60, 40, '.',5);
     myGLCD.printNumF(L100, 1, 210, 40,'.',5 );
     myGLCD.printNumF(L100M, 1, 60, 75,'.',5 );
     myGLCD.printNumF(L100SR_TFT, 1, 210, 75,'.',5 );
     myGLCD.printNumI(kmREFUELING, 60, 110,5 ); 
     //if (Fuel<53) 
     myGLCD.printNumF(Fuel, 1, 210, 110,'.',5);
     //else myGLCD.print("MAX", 210, 110); 
     myGLCD.printNumF(kmTrip, 1, 60, 145,'.',5);
     myGLCD.printNumF(FuelTrip, 1, 210, 145,'.',5);
     myGLCD.printNumI(PumpRPM, 210, 180,5);
     myGLCD.printNumI(RPM, 210, 215,5);
     myGLCD.printNumF(Fuel2, 1, 0, 215,'.',5);      
     myGLCD.printNumI(Temp, 415, 40, 3);
     myGLCD.printNumI(TempOil, 415, 75, 3);
     myGLCD.printNumI(TempFuel, 415, 110,3); 
 //  myGLCD.printNumI(sensors.getTempCByIndex(0), 415, 145 , 3);
     myGLCD.printNumI(t, 415, 180, 3);
     myGLCD.printNumI(TempAir, 415, 215, 3); }
   //----------------------------------------------------------
   //страниц INF1
   //----------------------------------------------------------
   if (currentPage == '1') {
     myGLCD.printNumF(StaDaliv,1, 360, 40,'.', 3);
     myGLCD.printNumF(DesInj,1, 395, 75, '.', 4);
     myGLCD.printNumF(ActInj,1, 395, 110,'.', 4); 
     myGLCD.printNumF(DesaInjQua,1, 395, 145,'.', 4);  
     myGLCD.printNumF(InjQua,1, 395, 180,'.', 4); 
     myGLCD.printNumI(MAF, 170, 215, 4);
     myGLCD.printNumF(h, 1, 418, 215); }
   //----------------------------------------------------------
   //страниц INF2
   //----------------------------------------------------------
   if (currentPage == '2') {    
     myGLCD.printNumF(BoostPres,1, 395, 40,'.', 4);  
     myGLCD.printNumF(BoostPresCom,1, 395, 75,'.', 4); 
     myGLCD.printNumI(EGRmg, 395, 110, 4);  
     myGLCD.printNumF(EGRPul,1, 410, 145,'.', 3);  
     myGLCD.printNumF(SolenPul, 1, 395, 180,'.', 4);  
     myGLCD.printNumF(SolenPre, 0, 410, 215,'.', 3); }
    prevData = curmillis; }}

не мигает. но все данные по нулям. датапринт раскометировал

MaksVV
Offline
Зарегистрирован: 06.08.2015

тогда так. Вернул обновление данных на экране только по получению данных от PCM. Убрал шрифт, потом с ним разберёшся. По идее все символы маленькие должны стать.

 #include <Adafruit_GFX.h>
 #include <MCUFRIEND_kbv.h>
 #include <UTFTGLUE.h>//use GLUE class and constructor
 #include "TouchScreen.h"
 #include <stdint.h>
 #include <SPI.h>
 #include <EEPROM.h>
 MCUFRIEND_kbv tft;
 //#include "Fonts/Gobold_Bold14pt7b.h";

#define MINPRESSURE 200
#define MAXPRESSURE 1000

//pin 20 SCL , 21 SDA датчик реального времени
 #include <Wire.h>
 #include "RTClib.h"
 RTC_DS3231 rtc;       

UTFTGLUE myGLCD(0x1581,A2,A1,A3,A4,A0); //all dummy args
 
 const int XP = 6, XM = A2, YP = A1, YM = 7; 
 const int TS_LEFT = 136, TS_RT = 907, TS_TOP = 139, TS_BOT = 942;
 TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
 uint16_t ID;
 int x, y;
 char currentPage;
 float h;
 float t;
 bool Dvoet = 0;
 

#include <SoftwareSerial.h>
 #define TX_PCM 13
 SoftwareSerial K_LINE_PCM   (12, TX_PCM); //RХ,TХ

#define PCM_address  0x11        // адрес PCM 
#define DIAG_address 0xF1        // адрес диагностики

#define debugPCM                 // раскоментировать эту строку для отладки в Serial порту обмена с PCM
//#define debugGAUGE             // раскоментировать эту строку для отладки в Serial порту обмена co щитком приборов

 
 uint32_t curmillis = 0;         // снимок текущего времени 
 uint32_t prevRequest  = 0;      // таймер периодических запосов на PCM
 uint16_t RequestPeriod = 3500;  // периодичность запросов на PCM

 uint32_t prevRESETheader=0; // таймер сброса сообщения, если данные оборвались посередине сообщения 
 bool RESETheader_timer;     // таймер сброса сообщения, если данные оборвались посередине сообщения 
 
 uint32_t prev_NOanswer=0;   // таймер контроля неответов от ЭБУ после подачи запросов
 bool NOanswer_timer = 0;    // таймер контроля неответов от ЭБУ после подачи запросов
 byte noanswers = 0;         // количество подряд неответов от ЭБУ 
 
 uint32_t timerdelay = 0;    // таймер ожидания байт (для успевания появления данных в буфере UART)
 bool Delay = 0;             // таймер ожидания байт (для успевания появления данных в буфере UART)
 byte waitbyte_RX = 1;       // задержка, мс для успевания появления данных в буфере RX 
                             // (подрегулировать в зависимости от уровня жизнидеятельности на Марсе) 
 #define TIMER_DELAY Delay = 0; timerdelay = curmillis  // включение этого таймера
  
byte delaybyte_TX  = 1;   // задержка между отправкой байт в запросах, мс
byte header = 0;          // состояние заголовка
byte message_size = 0;    // размер тела сообщения
byte j = 3;               // инкремент
byte n = 3;               // количество старт байт
const byte bufsize = 150; // размер буфера принятого сообщения
byte MessageRx_PCM [bufsize] = {0}; // буфер принятого сообщения
byte crc =0;              // байт контрольной суммы 

  
// возможные варианты запросов на ЭБУ:
enum REQUEST {
 INIT,    
 PID,     
 DTCERASE,
 DTCREAD,
 PRESENT,
 };

// текстовки запросов для отладки 
char* textRequest[] = {
 "INIT",    
 "PID_2101",     
 "DTC_ERASE",
 "DTC_READ",
 "PRESENT",
    } ;

 // сами запросы
 byte PCM_Message_TX[][5] = {
 {1,  0x81,           0,0,0},      // запрос инициализации
 {2,  0x21,0x01,        0,0},      // запрос пид 2101
 {3,  0x14,0xFF,0x00,     0},      // запрос на стирание ошибок
 {4,  0x18,0x00,0xFF,0x00  },      // запрос на чтение ошибок
 {1,  0x3E,           0,0,0},      // запрос присутствия 
                            };

byte request = INIT;               // переменная, показывающая какой запрос будем делать

//-------------------------------------------переменные бортовика

 float L100M = 0;           //расход на 100 км измеренный за поездку
 float L100 = 0;            //мгновенный расход литров на 100км
 float LHor = 0;           //мгновенный расход топлива литров в час
 float L100SR = 0;         //расход литров на 100км измеренный раз в интервал kmL  
 float L100SR_TFT = 0;     // самый средний из расходов на 100км, он выводится на экран

 int L100_Eeprom[11]= {10,10,10,10,10,10,10,10,10,10,10};
 int FuelZamer[10]= {0};  // массив для измерения уровня (количества) топлива 
 int ZamerNumber = 0;     // номер замера уровня (количества) топлива 
 int n_eeprom = 0;        // текущий адрес ячейки еепром для записи расхода
 
 int MAF = 0;              //26,27 байты   Sensor de flujo de aire en masa
 float BoostPres = 0;      //28,29 байты   Presión de refuerzo
 int RPM = 0;              //32,33 байты   Velocidad del motor
 int EGRmg = 0;            //34,35 байты   Comando EGR (Comando de recirculación de gases de escape)
 float BoostPresCom = 0;   //38,39 байты   Comando de presión de refuerzo
 int Speed = 0;            //44,45 байты   Velocidad del vehículo
 float DesaInjQua = 0;     //50,51 байты   Cantidad de inyección deseada
 float InjQua = 0;         //52,53 байты   Cantidad de la inyección
 float StaDaliv = 0;       //54,55 байты   Inicio de la entrega
 int PumpRPM = 0;          //56,57 байты   Velocidad de la bomba
 float EGRPul = 0;         //62,63 байты   Relación de impulsos EGR (recirculación de gases de escape
 float SolenPul = 0;       //64,65 байты   Velocidad de solenoide de control de nivel de remolino Relación de impulsos
 float SolenPre = 0;       //70,71 байты   Relación de impulsos Presión Electroválvula de presión
 float DesInj = 0;         //72,73 байты   Inyección deseada Inicio
 float ActInj = 0;         //16,17 байты   Inicio de la inyección real
 int TempAir = 0;          //74,75 байты   Temperatura del aire de admisión
 int Temp = 0;             //14,15 байты   Temperatura del refrigerante
 int TempOil = 0;          //18,19 байты   Temperatura del aceite del motor
 int TempFuel = 0;         //58,59 байты   Temperatura del combustible
 
 //все что касается топлива
 float Fuel = 0;  //остаток топлива 
 float Fuel2 = 0;  //остаток мгновенного топлива байт 16 , датчика в баке
 int FuelIGN = 0;      // количество топлвива в баке на момент включения зажигания
 int Fuel_last = 0;   // для формул
 bool flagFuelIGN = 0; // флаг записан ли остаток топлива в момент вкл. зажигания 
 float FuelTrip = 0;     // количество литров топлива, израсходованное за один цикл включения зажигания
 
 //все что касается километража
 float kmAge = 0;             //пробег, полученный со щитка приборов
 int kmAgeIGN = 0;          //пробег который был в момент включения зажигания 
 int kmAge_last = 0;       // для формул
 bool flagkmAgeIGN = 0;     //флаг записан ли пробег в момент вкл. зажигания 
 float kmTrip = 0;            //пробег за один цикл включения зажигания
 int kmL = 10;               // интервал, через который будет происходить обновление среднего расхода на 100км
 int km = 0;              // переменная для расчетов
 int kmeeprom = 10;         // интервал, через который будет происходить подсчет среднеарифмитического расхода  L100SR_TFT
 int kmTFT =  0;     // переменная для расчетов периодического подсчета среднеарифмитического расхода топлива L100SR_TFT
 int kmREFUELING = 0;            // пробег до заправки на остатке топлива 
 
 unsigned long prevWatch = 0;
 unsigned long prevDvoet = 0;
 unsigned long prevData  = 0;

 
void setup() {
   uint16_t ID = myGLCD.readID();
   if (ID == 0xD3D3) ID = 0x1581; // write-only shield
   myGLCD.begin(ID);  
   myGLCD.InitLCD(3);
   myGLCD.clrScr();
 //myGLCD.setFont(&Gobold_Bold14pt7b);  

   Wire.begin();
   rtc.begin();
   
   //загрузка стартовой страницы
   currentPage = '0';       
   drawHomeScreen();  

   //подсчет среднеарифметического усредненного расхода
   for (int i = 0; i < 11; i++) L100_Eeprom [i]= EEPROM.read(i);
   for (int i = 0; i < 11; i++) L100SR_TFT = L100SR_TFT +  L100_Eeprom [i];
   L100SR_TFT = (float)L100SR_TFT/110.0;
   if (L100SR_TFT<0) L100SR_TFT = 0;
   if (L100SR_TFT>99) L100SR_TFT = 99;
   
   // строка ниже используется для настройки даты и времени часов 
   // раскоментировать, выставить времая и дату, залить в ардуино. в скетче закоментировать
   // обратно и залить еще раз, иначе каждый раз будет по новой выствлятся это же время и дата
   // (год, месяц, день, часы, минуты, секунды)
   //rtc.adjust(DateTime(2017, 7, 21, 13, 57, 0));
 
 
 #if defined debugPCM or debugGAUGE   
   Serial.begin(115200);
 #endif
   K_LINE_PCM.begin(10400);
   pinMode(TX_PCM, OUTPUT);
  
             }


    void loop() 
                {
curmillis = millis();              // снимок текущего времени

if (curmillis - prevRequest > RequestPeriod && header == 0) 
    {
  if (request == INIT) fastinit();                                          // при необходимости делаем переподключение к PCM
  else {sendMessagePCM(request); if (request == PID) RequestPeriod = 600; } // отправляем на PCM текущий запрос
  prevRequest = curmillis;
    }

receivePCM ();                     // приём сообщений от PCM
Menu ();               
if (curmillis - prevWatch > 3000)  { Watch (); prevWatch = curmillis;}
if (curmillis - prevDvoet > 500)  { if (!Dvoet) {myGLCD.print(":", 290, 5);} else {myGLCD.print(" ", 285, 0);} prevDvoet = curmillis; Dvoet=!Dvoet;}                
                
                }// end loop


 void fastinit() {
   digitalWrite (TX_PCM, HIGH);  // bus idle
   delay(1500);              
   digitalWrite (TX_PCM, LOW);  // first part fastinit  (25 ms LOW)
   delay(25);
   digitalWrite (TX_PCM, HIGH); // second part fastinit (25 ms HIGH)
   delay(25);               
   K_LINE_PCM.begin(10400);
   sendMessagePCM(INIT);        // send start communication message 
      }  
 
  
  void receivePCM () {

 if (K_LINE_PCM.available() ){
    
 // первый старт байт
 if (header == 0 && Delay){TIMER_DELAY ; MessageRx_PCM[0]=K_LINE_PCM.read();  
         if (MessageRx_PCM[0]!=0xFF && bitRead (MessageRx_PCM[0],7)){header = 1; RESETheader_timer = 1; prevRESETheader = curmillis; 
               #ifdef debugPCM
                  Serial.print (F("Receive PCM: ")); printDebugRX(MessageRx_PCM[0]);
               #endif               
                                                }
                          }                  

 // второй старт байт
 if (header == 1 && Delay){TIMER_DELAY ; MessageRx_PCM[1]=K_LINE_PCM.read(); 
 #ifdef debugPCM
      printDebugRX (MessageRx_PCM[1]);
 #endif
      if (MessageRx_PCM[1]==DIAG_address){ header = 2;} 
      else {
        #ifdef debugPCM 
        Serial.println(F(" PCM Message fail address")); 
        #endif
        header = 0; RESETheader_timer = 0;}} 

 // третий старт байт
 if (header == 2 && Delay){ 
  TIMER_DELAY ;
  MessageRx_PCM[2]=K_LINE_PCM.read(); 
  #ifdef debugPCM
  printDebugRX (MessageRx_PCM[2]);
  #endif
  if (MessageRx_PCM[2]==PCM_address){ message_size = MessageRx_PCM[0]; prevRESETheader = curmillis;
       if (MessageRx_PCM[0] !=0x80) {header = 4;  bitWrite (message_size, 7 , 0);j=3;n=3;}
       else {header = 3; j=4;n=4;}
       if (message_size > bufsize) message_size = bufsize;  crc = 0;} 
  else {header = 0; 
        #ifdef debugPCM 
        Serial.println(F("PCM Message fail address")); 
        #endif
        RESETheader_timer = 0;}
  
                          }  
// если размер сообщения указан в дополнительном байте (нулевой байт 0x80) читаем этот дополнительный байт:
if (header == 3 && Delay){
  TIMER_DELAY ; prevRESETheader = curmillis;
  MessageRx_PCM[3]=K_LINE_PCM.read(); 
  #ifdef debugPCM
  printDebugRX(MessageRx_PCM[3]);
  #endif
  message_size = MessageRx_PCM[3]; 
  if (message_size > bufsize) message_size = bufsize;  
  crc = 0; header = 4;  
                         }

  // пишем тело сообщения 
 if (header == 4 && Delay && j< message_size+n+1) {
 MessageRx_PCM[j] = K_LINE_PCM.read(); prevRESETheader = curmillis;
 if (j<message_size+n) crc+= MessageRx_PCM[j]; // подсчёт КС
 
 if (j==message_size+n) header = 5; 
 TIMER_DELAY ; 
 #ifdef debugPCM
 printDebugRX(MessageRx_PCM[j]);
 #endif  
 j++;                                             } 
 }

 // сообщение приняли, действуем
 if (header == 5) {TIMER_DELAY ;  
 #ifdef debugPCM
 Serial.println();
 #endif  
 NOanswer_timer = 0; noanswers = 0;    // сбрасываем таймер контроля неответов 

for(byte i = 0; i<n; i++) crc+=MessageRx_PCM[i]; // прибавляем к контрольной сумме старт байты

 // если контрольная сумма верна: 
if ( crc == MessageRx_PCM[message_size+n]) 
{  
  #ifdef debugPCM
  Serial.print (F("Received message is OK! Checksum is correct!"));  Serial.print (F("  ")); Serial.println (millis()); // Если КС совпала, тут чёнибудь нужное делаем
  printDebugRX_CSgood(); 
  #endif
      if (MessageRx_PCM[n]==0xC1 && MessageRx_PCM[n+1]==0x6B && MessageRx_PCM[n+2]==0x8F) {
              if (currentPage!=3) {request = PID; RequestPeriod = 70;} else request = DTCREAD, RequestPeriod = 3000; prevRequest = curmillis; // receive good INIT
                                                                                          }
 else if (MessageRx_PCM[n]==0x58) Troublecodes (); // DTC
 else if (MessageRx_PCM[n]==0x54 && MessageRx_PCM[n+1]==0xFF && MessageRx_PCM[n+2]==0x00){ request = DTCREAD; RequestPeriod = 3000; prevRequest = curmillis;} // DTC are cleared
 else if (MessageRx_PCM[n]==0x61 && MessageRx_PCM[n+1]==0x01) {dataVars() ; RequestPeriod = 70; prevRequest = curmillis; }           // receive DataStream
 
 
 }   

// если контрольная сумма не совпала: 
#ifdef debugPCM
  else Serial.println("CRC fail!!!" );
#endif
message_size = 0; header=0; RESETheader_timer = 0; j=3; crc = 0;
}

// таймер ожидания байт (для успевания появления данных в буфере UART)
if (!Delay && curmillis - timerdelay > waitbyte_RX) Delay = 1; 

// таймер сброса целостности сообщения (если данные оборвались посередине сообщения)
if (RESETheader_timer && curmillis - prevRESETheader > 200) { 
  #ifdef debugPCM 
  Serial.print(F("Message fail timeout    "));  Serial.println(millis());
  #endif 
  RESETheader_timer = 0; header = 0;}   
 
// если нет ответа после запроса: +1 к счетчику неответов. Если накопилось 6 и более: делаем реинит.  
if (request!=INIT && NOanswer_timer && curmillis - prev_NOanswer > RequestPeriod - RequestPeriod/10) 
         {
     NOanswer_timer = 0; noanswers++; 
     if (noanswers>=6) { noanswers = 0; request = INIT; RequestPeriod = 3500;}
         }
}// end receivePCM


void Troublecodes () 
{
  if (MessageRx_PCM[n]==0x58 && MessageRx_PCM[n+1]==0x00){
    myGLCD.clrScr();             
    drawscreen_three();      
    myGLCD.print("NO DTC", 165, 145);
    Serial.println ("     NO DTC  "); }
    
  //при получении этого сообщения выдавать на третий экран "DTC BORRADO"
  if (MessageRx_PCM[n]==0x54 && MessageRx_PCM[n+1]==0xFF && MessageRx_PCM[n+2]==0x00){
    myGLCD.clrScr();             
    drawscreen_three();      
    myGLCD.print("DTC BORRADO", 165, 145);
    Serial.println ("     DTC BORRADO  "); }
   
  // при получении сообщения о наличии ошибок DTC разберем сообщение выведем на экран ошибки
  if (MessageRx_PCM[n]==0x58 && MessageRx_PCM[n+1]>0){
     Serial.println ("DTC is found!");
     myGLCD.clrScr();             
     drawscreen_three();       

  for (int i=0; i<MessageRx_PCM[n+8-7]; i++ ) {
     int y = i*35;
     bool nolA=0; bool nolB =0;
  if (!bitRead(MessageRx_PCM[n+11-7+(i*3)],6) && bitRead(MessageRx_PCM[n+11-7+(i*3)],7)){ myGLCD.setColor (0,255,0);
     myGLCD.print(" -Passive-", 300, (75+y));} // если DTC пасивныый делаем цвет зеленый 
  if (bitRead(MessageRx_PCM[n+11-7+(i*3)],7) && bitRead(MessageRx_PCM[n+11-7+(i*3)],6)) {myGLCD.setColor (255,0,0);  
     myGLCD.print(" -Active-", 300, (75+y));} // если DTC активный, делаем цвет красный 
     myGLCD.print("ERROR ", 50, (75+y));
     myGLCD.printNumI((i+1), 150, (75+y));
     
  if (!bitRead(MessageRx_PCM[n+9-7+(i*3)],6) && !bitRead(MessageRx_PCM[n+9-7+(i*3)],7)) myGLCD.print(": P", 170, (75+y));
  if (bitRead(MessageRx_PCM[n+9-7+(i*3)],6) && !bitRead(MessageRx_PCM[n+9-7+(i*3)],7)) myGLCD.print(": C", 170, (75+y));
  if (!bitRead(MessageRx_PCM[n+9-7+(i*3)],6) && bitRead(MessageRx_PCM[n+9-7+(i*3)],7)) myGLCD.print(": B", 170, (75+y));
  if (bitRead(MessageRx_PCM[n+9-7+(i*3)],6) && bitRead(MessageRx_PCM[n+9-7+(i*3)],7)) myGLCD.print(": U", 170, (75+y));

  if (MessageRx_PCM[n+9-7+(i*3)]==0x00) {myGLCD.print("00", 230, (75+y)); nolA = 1;}
  if (MessageRx_PCM[n+9-7+(i*3)]<=0x0F&&MessageRx_PCM[n+9-7+(i*3)]!=0) {myGLCD.print("0", 230, (75+y)); nolA = 1;} 
  if (nolA)myGLCD.print(String (MessageRx_PCM[n+9-7+(i*3)],HEX), 246, (75+y)); 
  else myGLCD.print(String (MessageRx_PCM[n+9-7+(i*3)],HEX), 230, (75+y));

  if (MessageRx_PCM[n+10-7+(i*3)]==0x00) {myGLCD.print("00", 262, (75+y)); nolB = 1;}
  if (MessageRx_PCM[n+10-7+(i*3)]<=0x0F&&MessageRx_PCM[n+10-7+(i*3)]!=0) {myGLCD.print("0", 262, (75+y)); nolB = 1;}
  if (nolB)myGLCD.print(String (MessageRx_PCM[n+10-7+(i*3)]),HEX, 278, (75+y)); 
  else myGLCD.print(String (MessageRx_PCM[n+10-7+(i*3)],HEX), 262, (75+y));}} 



}



void dataVars() 
{
  //Barom = MessageRx_PCM[39];
   L100 = (float)LHor*100.0/(float)Speed;
   LHor = (float)RPM* (float)InjQua*2.00/1000.0*60.00/1000.0/0.85;
   MAF =  ((MessageRx_PCM[n+22]*256)+MessageRx_PCM[n+23])/10;
   BoostPres =  ((MessageRx_PCM[n+24]*256)+MessageRx_PCM[n+25])/1000.0;
   RPM =  (MessageRx_PCM[n+35-7]*256)+MessageRx_PCM[n+36-7];
   EGRmg =  ((MessageRx_PCM[n+37-7]*256)+MessageRx_PCM[n+38-7])/10.0;
   BoostPresCom =  ((MessageRx_PCM[n+41-7]*256)+MessageRx_PCM[n+42-7])/1000.0;
   Speed =  ((MessageRx_PCM[n+47-7]*256)+MessageRx_PCM[n+48-7])/100;
   DesaInjQua =  ((MessageRx_PCM[n+53-7]*256)+MessageRx_PCM[n+54-7])/100.0;
   InjQua =  ((MessageRx_PCM[n+55-7]*256)+MessageRx_PCM[n+56-7])/100.0;
   StaDaliv =  ((MessageRx_PCM[n+57-7]*256)+MessageRx_PCM[n+58-7])/100.0;
   PumpRPM =  (MessageRx_PCM[n+59-7]*256)+MessageRx_PCM[n+60-7];
   EGRPul =  ((MessageRx_PCM[n+65-7]*256)+MessageRx_PCM[n+66-7])/100.0;
   SolenPul =  ((MessageRx_PCM[n+67-7]*256)+MessageRx_PCM[n+68-7])/100.0;
   SolenPre =  ((MessageRx_PCM[n+73-7]*256)+MessageRx_PCM[n+74-7])/100.0;
   DesInj =  ((MessageRx_PCM[n+75-7]*3)+(MessageRx_PCM[n+76-7])/100.0)+0.3;
   ActInj =  ((MessageRx_PCM[n+19-7]*3)+(MessageRx_PCM[n+20-7])/100.0)+0.3;
   //TempAir =  ((MessageRx_PCM[n+77-7]*26)-278)+MessageRx_PCM[n+78-7]/10.0;
   //Temp =  ((MessageRx_PCM[n+17-7]*26)-278)+MessageRx_PCM[n+18-7]/10.0;
   //TempOil =  ((MessageRx_PCM[n+21-7]*26)-278)+MessageRx_PCM[n+22-7]/10.0;
   //TempFuel =  ((MessageRx_PCM[n+61-7]*26)-278)+MessageRx_PCM[n+62-7]/10.0;
   //ниже идут расчетные формулы более точные чем те что закоментированы выше
   int A = 0;
   if  (MessageRx_PCM[n+77-7]<=0x0A) A = 277;
   if  (MessageRx_PCM[n+77-7]==0x0B || MessageRx_PCM[n+77-7]==0x0C) A = 278;
   if  (MessageRx_PCM[n+77-7]>=0x0D) A = 279;
   double B = MessageRx_PCM[n+78-7]/10.0;
   double cel , drob ;
   drob = modf(B, &cel);
   if (drob>0.6) cel++;
     TempAir =  ((MessageRx_PCM[n+77-7]*26)-A)+cel;
   
   if  (MessageRx_PCM[n+17-7]<=0x0A) A = 277;
   if  (MessageRx_PCM[n+17-7]==0x0B || MessageRx_PCM[n+17-7]==0x0C) A = 278;
   if  (MessageRx_PCM[n+17-7]>=0x0D) A = 279;
   B = MessageRx_PCM[n+18-7]/10.0;
   drob = modf(B, &cel);
   if (drob>0.6) cel++;
     Temp =  ((MessageRx_PCM[n+17-7]*26)-A)+cel;


   if  (MessageRx_PCM[n+21-7]<=0x0A) A = 277;
   if  (MessageRx_PCM[n+21-7]==0x0B || MessageRx_PCM[n+21-7]==0x0C) A = 278;
   if  (MessageRx_PCM[n+21-7]>=0x0D) A = 279;
   B = MessageRx_PCM[n+22-7]/10.0;
   drob = modf(B, &cel);
   if (drob>0.6) cel++;
     TempOil =  ((MessageRx_PCM[n+21-7]*26)-A)+cel;


   if  (MessageRx_PCM[n+61-7]<=0x0A) A = 277;
   if  (MessageRx_PCM[n+61-7]==0x0B || MessageRx_PCM[n+61-7]==0x0C) A = 278;
   if  (MessageRx_PCM[n+61-7]>=0x0D) A = 279;
   B = MessageRx_PCM[n+62-7]/10.0;
   drob = modf(B, &cel);
   if (drob>0.6) cel++;
     TempFuel =  ((MessageRx_PCM[n+61-7]*26)-A)+cel;   


myGLCD.setColor(255, 255, 255);      //цвет текста
     myGLCD.printNumI(Speed, 350, 7, 3);
  //----------------------------------------------------------
  //страниц HOME
  //----------------------------------------------------------
  if (currentPage == '0') {
     myGLCD.printNumF(LHor, 1, 60, 40, '.',5);
     myGLCD.printNumF(L100, 1, 210, 40,'.',5 );
     myGLCD.printNumF(L100M, 1, 60, 75,'.',5 );
     myGLCD.printNumF(L100SR_TFT, 1, 210, 75,'.',5 );
     myGLCD.printNumI(kmREFUELING, 60, 110,5 ); 
     //if (Fuel<53) 
     myGLCD.printNumF(Fuel, 1, 210, 110,'.',5);
     //else myGLCD.print("MAX", 210, 110); 
     myGLCD.printNumF(kmTrip, 1, 60, 145,'.',5);
     myGLCD.printNumF(FuelTrip, 1, 210, 145,'.',5);
     myGLCD.printNumI(PumpRPM, 210, 180,5);
     myGLCD.printNumI(RPM, 210, 215,5);
     myGLCD.printNumF(Fuel2, 1, 0, 215,'.',5);      
     myGLCD.printNumI(Temp, 415, 40, 3);
     myGLCD.printNumI(TempOil, 415, 75, 3);
     myGLCD.printNumI(TempFuel, 415, 110,3); 
  //   myGLCD.printNumI(sensors.getTempCByIndex(0), 415, 145 , 3);
     myGLCD.printNumI(t, 415, 180, 3);
     myGLCD.printNumI(TempAir, 415, 215, 3); }
   //----------------------------------------------------------
   //страниц INF1
   //----------------------------------------------------------
   if (currentPage == '1') {
     myGLCD.printNumF(StaDaliv,1, 360, 40,'.', 3);
     myGLCD.printNumF(DesInj,1, 395, 75, '.', 4);
     myGLCD.printNumF(ActInj,1, 395, 110,'.', 4); 
     myGLCD.printNumF(DesaInjQua,1, 395, 145,'.', 4);  
     myGLCD.printNumF(InjQua,1, 395, 180,'.', 4); 
     myGLCD.printNumI(MAF, 170, 215, 4);
     myGLCD.printNumF(h, 1, 418, 215); }
   //----------------------------------------------------------
   //страниц INF2
   //----------------------------------------------------------
   if (currentPage == '2') {    
     myGLCD.printNumF(BoostPres,1, 395, 40,'.', 4);  
     myGLCD.printNumF(BoostPresCom,1, 395, 75,'.', 4); 
     myGLCD.printNumI(EGRmg, 395, 110, 4);  
     myGLCD.printNumF(EGRPul,1, 410, 145,'.', 3);  
     myGLCD.printNumF(SolenPul, 1, 395, 180,'.', 4);  
     myGLCD.printNumF(SolenPre, 0, 410, 215,'.', 3); }
 
}



 void sendMessagePCM(const byte &command)
{
 #ifdef debugPCM                         
Serial.print (F("Send request "));  Serial.print (textRequest[command]); Serial.print (F(" to PCM  ")); Serial.println (millis());
 #endif
if (command != INIT) {NOanswer_timer = 1; prev_NOanswer = curmillis;}  //т.к. сейчас будем делать запрос, то запускаем таймер контроля неответов 
  byte size =  PCM_Message_TX[command][0];
  const byte siZe = size+4;
  byte Mes[siZe];
  byte Checksum = 0;
  for(byte i=0; i<siZe; i++) {
    if (i==0) {Mes[i]=size; bitWrite(Mes[i], 7 , 1);}
    if (i==1) Mes[i] = PCM_address;
    if (i==2) Mes[i] = DIAG_address;    
    if (i==3) {for (byte t=1; t<size+1; t++ ) {
           Mes[i]=PCM_Message_TX [command][t]; 
           Checksum+=Mes[i] ; 
           K_LINE_PCM.write (Mes[i]); 
           if (command == INIT) delay (5); delay (delaybyte_TX);  
           K_LINE_PCM.read(); 
           i++;}}
    if (i!=siZe-1) Checksum+=Mes[i];
    else Mes[i] = Checksum;    
    K_LINE_PCM.write (Mes[i]);
   if (command == INIT) delay (5); else delay (delaybyte_TX);
    K_LINE_PCM.read();
                             }
}// end sendMessagePCM



#if defined debugPCM or debugGAUGE
void printDebugRX (const byte &inbyte) {if (inbyte<=15) Serial.print(F("0")); Serial.print (inbyte, HEX);  Serial.print (F(" "));}
#endif

#ifdef debugPCM
void printDebugRX_CSgood(){
if (MessageRx_PCM[n]==0xC1 && MessageRx_PCM[n+1]==0x6B && MessageRx_PCM[n+2]==0x8F) {Serial.println (F("   Initialization OK!!!!")); }
 else if (MessageRx_PCM[n]==0x58 && MessageRx_PCM[n+1]==0x00) {Serial.println (F("     NO DTC  "));}
 else if (MessageRx_PCM[n]==0x58 && MessageRx_PCM[n+1] >0x00) {Serial.println (F("     DTC is found!"));} 
 else if (MessageRx_PCM[n]==0x54 && MessageRx_PCM[n+1]==0xFF && MessageRx_PCM[n+2]==0x00){Serial.println (F("     DTC CLEARED  "));}
 else if (MessageRx_PCM[n]==0x61 && MessageRx_PCM[n+1]==0x01) {Serial.println (F("     Receive PCM DATAstream"));}}
#endif                          



void Menu () {
     
    if (currentPage == '0') {
     TouchHOME();
     TouchINF1();
     TouchINF2();
     TouchCHECK(); }
    if (currentPage == '1') { 
     TouchHOME();
     TouchINF2();
     TouchCHECK(); }
    if (currentPage == '2') { 
     TouchHOME();
     TouchINF1();
     TouchCHECK(); }
    if (currentPage == '3') { 
     TouchHOME();
     TouchREAD();
     TouchERASE(); }}   
 
 
  void drawHomeScreen() {
    line() ;
    Watch ();
    myGLCD.setColor(255, 0, 0); // цвет линии и текста красный
    myGLCD.drawLine(295,35,295,248); // линия вертикальная
    myGLCD.drawLine(145,35,145,178); // линия вертикальная
    myGLCD.drawLine(80,178,80,247); // линия вертикальная
    myGLCD.print("L/H", 10, 40);
    myGLCD.print("L/A", 148, 40);
    myGLCD.print("L/V", 10, 75);
    myGLCD.print("L/M", 148, 75);
    myGLCD.print("D/K", 10, 110);
    myGLCD.print("D/L", 148, 110);
    myGLCD.print("V/K", 10, 145);
    myGLCD.print("V/L", 148, 145);
    myGLCD.print("PUMP RPM", 82, 180);
    myGLCD.print("ENGI   RPM", 82, 215);
    myGLCD.print("D/La", 10, 180);
    myGLCD.print("Motor C", 300, 40);
    myGLCD.print("OIL       C", 300, 75);
    myGLCD.print("FUEL    C", 300, 110);
    myGLCD.print("INTER  C", 300, 145);
    myGLCD.print("EXTER  C", 300, 180);
    myGLCD.print("INTAIR C", 300, 215); 
    myGLCD.drawRoundRect (15, 255, 145, 310);
    myGLCD.print("INF 1", 55, 270);
    myGLCD.drawRoundRect (175, 255, 305, 310);
    myGLCD.print("INF 2", 215, 270);
    myGLCD.drawRoundRect (335, 255, 465, 310);
    myGLCD.print("CHECK", 365, 270);
    myGLCD.drawRoundRect (1, 1, 77, 37);
    myGLCD.print("HOME", 10, 7);
    myGLCD.print("Km/h", 410, 7);
  }
 //-------------------------------------------------
   void drawscreen_one() {
    line() ;
    Watch ();
    myGLCD.setColor(255, 0, 0); // цвет линии и текста красный
    myGLCD.print("Start of Delivery   *CA:", 10, 40);
    myGLCD.print("Desir inject Start  *CA:", 10, 75);
    myGLCD.print("Actua Inject Start *CA:", 10, 110);
    myGLCD.print("Desir Inject Quan  mg/s:", 10, 145);
    myGLCD.print("Actu Inject Quant mg/s:", 10, 180);
    myGLCD.print("MAF  mg/s:", 10, 215);
    myGLCD.print("Humedad %:", 255, 215);
    myGLCD.drawRoundRect (175, 255, 305, 310);
    myGLCD.print("INF 2", 215, 270);
    myGLCD.drawRoundRect (335, 255, 465, 310);
    myGLCD.print("CHECK", 365, 270);
    myGLCD.drawRoundRect (1, 1, 77, 37);
    myGLCD.print("HOME", 10, 7);
    myGLCD.print("Km/h", 410, 7);
    }
 //-------------------------------------------------
  void drawscreen_two() {
    line() ;
    Watch ();
    myGLCD.setColor(255, 0, 0); // цвет линии и текста красный
    myGLCD.print("Boost Press          Bar:", 10, 40);
    myGLCD.print("Boost Press Com  Bar:", 10, 75);
    myGLCD.print("EGR command     mg/s:", 10, 110);
    myGLCD.print("EGR Pulse Ratio      %:", 10, 145);
    myGLCD.print("Solenoide Pulse      %:", 10, 180);
    myGLCD.print("Solenoide Boost      %:", 10, 215);
    myGLCD.drawRoundRect (15, 255, 145, 310);
    myGLCD.print("INF 1", 55, 270);
    myGLCD.drawRoundRect (335, 255, 465, 310);
    myGLCD.print("CHECK", 365, 270);
    myGLCD.drawRoundRect (1, 1, 77, 37);
    myGLCD.print("HOME", 10, 7);
    myGLCD.print("Km/h", 410, 7);
    }
 //----------------------------------------------------------------------------
  void drawscreen_three() {
    Watch ();
    myGLCD.setColor(255, 0, 0); // цвет линии красный
    myGLCD.drawLine(1,35,479,35); // линия горизонтальная
    myGLCD.drawLine(1,248,479,248); // линия горизонтальная
    myGLCD.drawRoundRect (15, 255, 145, 310);
    myGLCD.print("ERASE", 55, 270);
    myGLCD.drawRoundRect (335, 255, 465, 310);
    myGLCD.print("READ", 365, 270);
    myGLCD.drawRoundRect (1, 1, 77, 37);
    myGLCD.print("HOME", 10, 5);
    myGLCD.print("Km/h", 410, 3);
   }

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//кнопки тач . координаты и переходы
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void TouchHOME(){
TSPoint p = ts.getPoint();
    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);
if (p.z > 10 && p.z < 1000)
    {if (p.x > 140 && p.x < 320 && p.y > 140 && p.y < 260 && p.z > MINPRESSURE && p.z < MAXPRESSURE)
      { myGLCD.drawRoundRect (1, 1, 77, 37);
        currentPage = '0';     
        request = PID; RequestPeriod = 600; prevRequest = curmillis; // на PCM в этом окне посылается запрос текущих параметров
        myGLCD.clrScr();             
        drawHomeScreen();
        x = 0;
        y = 0;
        p.z = 0;}}}

void TouchINF1(){
TSPoint p = ts.getPoint();
    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);
if (p.z > 10 && p.z < 1000)
    {
      if (p.x > 150 && p.x < 450 && p.y > 770 && p.y < 890 && p.z > MINPRESSURE && p.z < MAXPRESSURE)
      { myGLCD.drawRoundRect (15, 255, 145, 310);
        currentPage = '1';    
        request = PID; RequestPeriod = 600; prevRequest = curmillis; // на PCM в этом окне посылается запрос текущих параметров       
        myGLCD.clrScr();             
        drawscreen_one();
        x = 0;
        y = 0;
        p.z = 0;}}}
    
void TouchINF2(){
TSPoint p = ts.getPoint();
    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);
if (p.z > 10 && p.z < 1000)
    {
    if (p.x > 450 && p.x < 680 && p.y > 770 && p.y < 890 && p.z > MINPRESSURE && p.z < MAXPRESSURE)
      { myGLCD.drawRoundRect (175, 255, 305, 310);
        currentPage = '2';     
        request = PID; RequestPeriod = 600; prevRequest = curmillis; // на PCM в этом окне посылается запрос текущих параметров      
        myGLCD.clrScr();             
        drawscreen_two();
        x = 0;
        y = 0;
        p.z = 0;}}}

void TouchCHECK(){
TSPoint p = ts.getPoint();
    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);
if (p.z > 10 && p.z < 1000)
    {
if (p.x > 690 && p.x < 950 && p.y > 770 && p.y < 890 && p.z > MINPRESSURE && p.z < MAXPRESSURE)
      { myGLCD.drawRoundRect (335, 255, 465, 310);
        currentPage = '3';  
       request = DTCREAD; RequestPeriod = 3000; prevRequest = curmillis; // на PCM в этом окне посылается запрос чтения ошибок  
        myGLCD.clrScr();             
        drawscreen_three();
        x = 0;
        y = 0;
        p.z = 0;}}}

void TouchREAD(){
TSPoint p = ts.getPoint();
    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);
if (p.z > 10 && p.z < 1000)
    {
if (p.x > 690 && p.x < 950 && p.y > 770 && p.y < 890 && p.z > MINPRESSURE && p.z < MAXPRESSURE)
      { myGLCD.drawRoundRect (335, 255, 465, 310);
        request = DTCREAD; RequestPeriod = 3000; prevRequest = curmillis; // на PCM при нажатии этой кнопки посылается запрос чтения ошибок  
        x = 0;
        y = 0;
        p.z = 0;}}}

void TouchERASE(){
TSPoint p = ts.getPoint();
    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);
if (p.z > 10 && p.z < 1000)
    {
if (p.x > 150 && p.x < 450 && p.y > 770 && p.y < 890 && p.z > MINPRESSURE && p.z < MAXPRESSURE)
      { myGLCD.drawRoundRect (15, 255, 145, 310);
       request = DTCERASE; RequestPeriod = 3000;  prevRequest = curmillis; // на PCM при нажатии этой кнопки посылается запрос удаления ошибок 
        x = 0;
        y = 0;
        p.z = 0;}}}
 ////////////////////////////////////////////////////////////////////////////////////////
 //прорисовка линий
 ///////////////////////////////////////////////////////////////////////////////////////
 void line() {
    myGLCD.setColor(255, 0, 0); // цвет линии красный
    myGLCD.drawLine(1,35,479,35); // линия горизонтальная
    myGLCD.drawLine(1,73,479,73); // линия горизонтальная
    myGLCD.drawLine(1,108,479,108); // линия горизонтальная
    myGLCD.drawLine(1,143,479,143); // линия горизонтальная
    myGLCD.drawLine(1,178,479,178); // линия горизонтальная
    myGLCD.drawLine(1,212,479,212); // линия горизонтальная
    myGLCD.drawLine(1,248,479,248); // линия горизонтальная
             }


void Watch (){
   DateTime now = rtc.now();
   int m = now.minute(); 
   int hour = now.hour();
   int mon = now.month();
   int date = now.day();
 
   myGLCD.setColor(255, 255, 255); //белый цвет цифры
 
   if (date<10) { 
   myGLCD.print("0", 85, 7); 
   myGLCD.printNumI(now.day(), 100, 7); } 
   else if (date >=10) {
   myGLCD.printNumI(now.day(), 85, 7); }
   myGLCD.print("/", 115, 7);
   if ( mon<10) {
   myGLCD.print("0", 130, 7); 
   myGLCD.printNumI(now.month(), 145, 7);} 
   else if (mon >=10) {
   myGLCD.printNumI(now.month(), 130, 7);}  
   myGLCD.print("/", 160, 7);
   myGLCD.printNumI(now.year(), 175, 7);
   if (hour<10) {
   myGLCD.print("0",255, 7); 
   myGLCD.printNumI(now.hour(), 270, 7); } 
   else if(hour>=10){ 
   myGLCD.printNumI(now.hour(), 255, 7); } 
   if (m<10) {
   myGLCD.print("0",300, 7); 
   myGLCD.printNumI(now.minute(), 315, 7); } 
   else if (m>=10){ 
   myGLCD.printNumI(now.minute(), 300, 7); }
    }          
      

 

viki13viki
Offline
Зарегистрирован: 14.11.2016

с твоим не выводится инфа на экран. только часы и дата. в лупе отсутствует . я добалил LCDDataPrint(); дало ошибку

MaksVV
Offline
Зарегистрирован: 06.08.2015

ты читаешь вообще , что я пишу? Я же тебе объяснил, что обновление данных на экран запихал в момент, когда получаем данные PID 2101 от PCM. Данные идут в Serial ? если да , то и экран должен обновляться. Конечно LCDDataPrint(); дало ошибку. Эту функцию я удалил потому что. 

 

viki13viki
Offline
Зарегистрирован: 14.11.2016

в сериал то идут данные а на экране нету

MaksVV
Offline
Зарегистрирован: 06.08.2015

все это очень странно. где опять засада. Вставь Serial.println ("YA V DATAVARS!!!")  в начале в функции dataVars() . Чтоб посмотреть заходит ли туда программа

viki13viki
Offline
Зарегистрирован: 14.11.2016

сек. да да провтыкал

MaksVV
Offline
Зарегистрирован: 06.08.2015

блин вставь после скобки {   

viki13viki
Offline
Зарегистрирован: 14.11.2016

нет не заходит

Send request INIT to PCM  5052
Receive PCM: 83 F1 11 C1 6B 8F 40 
Received message is OK! Checksum is correct!  5156
   Initialization OK!!!!
Send request PID_2101 to PCM  5228
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 43 00 00 0C 20 00 00 02 67 00 00 00 00 04 34 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6C 00 00 00 00 09 45 00 00 0C 40 A0 00 01 90 00 00 AD 08 01 20 00 00 01 C0 0C 2B 00 Message fail timeout
Send request PID_2101 to PCM  6075
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 43 00 00 0C 20 00 00 02 67 00 00 00 00 04 34 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6E 00 00 00 00 09 45 00 00 0C 40 A0 00 01 90 00 00 AD 08 01 20 00 00 01 C1 0C 2B 9E Message fail timeout
Send request PID_2101 to PCM  6892
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 41 00 00 0C 20 00 00 02 67 00 00 00 00 04 37 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6B 00 00 00 00 09 47 00 00 0C 40 A0 00 01 90 00 00 AD 08 01 20 00 00 01 C0 0C 2D 03 Message fail timeout
Send request PID_2101 to PCM  7706
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 43 00 00 0C 20 00 00 02 66 00 00 00 00 04 35 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6C 00 00 00 00 09 45 00 00 0C 40 A0 00 01 90 00 00 A9 08 01 20 00 00 01 C0 0C 2D 00 Message fail timeout
Send request PID_2101 to PCM  8535
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 43 00 00 0C 20 00 00 02 67 00 00 00 00 04 37 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6B 00 00 00 00 09 45 00 00 0C 40 A0 00 01 90 00 00 A9 08 01 20 00 00 01 C0 0C 9E Message fail timeout
Send request PID_2101 to PCM  9413
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 43 00 00 0C 20 00 00 02 66 00 00 00 00 04 37 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6B 00 00 00 00 09 45 00 00 0C 40 A0 00 01 90 00 00 AD 08 01 20 00 00 01 C0 0C 2D Message fail timeout
Send request INIT to PCM  14466
Send request INIT to PCM  17969
Receive PCM: 83 F1 11 C1 6B 8F 40 
Received message is OK! Checksum is correct!  18128
   Initialization OK!!!!
Send request PID_2101 to PCM  18200
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 43 00 00 0C 20 00 00 02 66 00 00 00 00 04 35 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6C 00 00 00 00 09 45 00 00 0C 40 A0 00 01 90 00 00 AD 08 01 20 00 00 01 C0 0C 2D 03 Message fail timeout
Send request PID_2101 to PCM  19020
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 43 00 00 0C 20 00 00 02 65 00 00 00 00 04 34 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6C 00 00 00 00 09 45 00 00 0C 40 A0 00 01 90 00 00 A9 08 01 20 00 00 01 C1 0C 2E 00 Message fail timeout
Send request PID_2101 to PCM  19840
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 43 00 00 0C 20 00 00 02 65 00 00 00 00 04 35 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6B 00 00 00 00 09 46 00 00 0C 43 A0 00 01 90 00 00 A9 08 01 20 00 00 01 C0 0C 2E 35 Message fail timeout
Send request PID_2101 to PCM  20662
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 43 00 00 0C 20 00 00 02 65 00 00 00 00 04 34 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6B 00 00 00 00 09 46 00 00 0C 43 A0 00 01 90 00 00 A9 08 01 20 00 00 01 C0 0C 2E 03 Message fail timeout
Send request PID_2101 to PCM  21543
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 43 00 00 0C 20 00 00 02 66 00 00 00 00 04 34 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 2B 00 00 00 00 09 46 00 00 0C 43 A0 00 01 90 00 00 A9 08 01 20 00 00 01 C1 0C 2E F6 Message fail timeout
Send request PID_2101 to PCM  22370
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 44 00 00 0C 20 00 00 02 65 00 00 00 00 04 33 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6C 00 00 00 00 09 45 00 00 0C 43 A0 00 01 90 00 00 A9 08 01 20 00 00 01 C0 0C 2E 9E Message fail timeout
Send request INIT to PCM  27420
Send request INIT to PCM  30921
Receive PCM: 83 F1 11 C1 6B 8F 40 
Received message is OK! Checksum is correct!  31075
   Initialization OK!!!!
Send request PID_2101 to PCM  31147
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 43 00 00 0C 20 00 00 02 65 00 00 00 00 04 35 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 69 00 00 00 00 09 46 00 00 0C 43 A0 00 01 90 00 00 A9 08 00 20 00 00 01 C0 0C 2F 03 Message fail timeout
Send request PID_2101 to PCM  31967
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 43 00 00 0C 20 00 00 02 65 00 00 00 00 04 33 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6C 00 00 00 00 09 46 00 00 0C 43 A0 00 01 90 00 00 A9 08 00 20 00 00 01 C0 0C 2F 00 Message fail timeout
Send request PID_2101 to PCM  32792
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 43 00 00 0C 21 00 00 02 65 00 00 00 00 04 34 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6C 00 00 00 00 09 46 00 00 0C 43 A0 00 01 90 00 00 A9 08 00 20 00 00 01 C0 0C 9E Message fail timeout
Send request PID_2101 to PCM  33603
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 43 00 00 0C 21 00 00 02 65 00 00 00 00 04 34 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6B 00 00 00 00 09 46 00 00 0C 43 A0 00 01 90 00 00 A9 08 00 20 00 00 01 C0 0C 2E 00 Message fail timeout
Send request PID_2101 to PCM  34486
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 41 00 00 0C 21 00 00 02 65 00 00 00 00 04 35 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6B 00 00 00 00 09 46 00 00 0C 43 A0 00 01 90 00 00 A9 08 00 20 00 00 01 C0 0C 2F 34 00 Message fail timeout
Send request PID_2101 to PCM  35461
Send request INIT to PCM  40515
Send request INIT to PCM  44015
Receive PCM: 83 F1 11 C1 6B 8F 40 
Received message is OK! Checksum is correct!  44170
   Initialization OK!!!!
Send request PID_2101 to PCM  44241
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 41 00 00 0C 20 00 00 02 64 00 00 00 00 04 34 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 67 00 00 00 00 09 48 00 00 0C 43 A0 00 01 90 00 00 A9 08 01 20 19 64 01 C1 0C 2D 00 Message fail timeout
Send request PID_2101 to PCM  45071
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 41 00 00 0C 20 00 00 02 66 00 00 00 00 04 37 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6B 00 00 00 00 09 48 00 00 0C 43 A0 00 01 90 00 00 A9 08 01 20 00 00 01 C1 0C 2E 03 Message fail timeout
Send request PID_2101 to PCM  45903
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 41 00 00 0C 20 00 00 02 65 00 00 00 00 04 34 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 2B 00 00 00 00 09 48 00 00 0C 43 A0 00 01 90 00 00 AD 08 01 20 00 00 01 C1 0C 03 Message fail timeout
Send request PID_2101 to PCM  46713
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 41 00 00 0C 20 00 00 02 66 00 00 00 00 04 35 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6B 00 00 00 00 09 46 00 00 0C 43 A0 00 01 90 00 00 A9 08 01 20 00 00 01 C0 0C 2E 03 Message fail timeout
Send request PID_2101 to PCM  47593
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 43 00 00 0C 20 00 00 02 65 00 00 00 00 04 38 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 29 00 00 00 00 09 46 00 00 0C 43 A0 00 01 90 00 00 A9 08 01 20 00 00 01 C0 0C 2E 00 Message fail timeout
Send request PID_2101 to PCM  48416
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 43 00 00 0C 21 00 00 02 65 00 00 00 00 04 34 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6B 00 00 00 00 09 46 00 00 0C 43 A0 00 01 90 00 00 AD 08 01 20 00 00 01 C1 0C 2F 00 Message fail timeout
Send request INIT to PCM  53469
Send request INIT to PCM  56970
Receive PCM: 83 F1 11 C1 6B 8F 40 
Received message is OK! Checksum is correct!  57124
   Initialization OK!!!!
Send request PID_2101 to PCM  57196
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 43 00 00 0C 21 00 00 02 65 00 00 00 00 04 33 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6C 00 00 00 00 09 46 00 00 0C 43 A0 00 01 90 00 00 AD 08 01 20 00 00 01 C0 0C 30 9E Message fail timeout
Send request PID_2101 to PCM  58012
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 43 00 00 0C 20 00 00 02 64 00 00 00 00 04 35 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6C 00 00 00 00 09 46 00 00 0C 43 A0 00 01 90 00 00 A9 08 01 20 00 00 01 C0 0C 32 9E Message fail timeout
Send request PID_2101 to PCM  58826
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 43 00 00 0C 21 00 00 02 65 00 00 00 00 04 34 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6B 00 00 00 00 09 46 00 00 0C 43 A0 00 01 90 00 00 AD 08 01 20 00 00 01 C0 0C 32 03 Message fail timeout
Send request PID_2101 to PCM  59639
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 43 00 00 0C 21 00 00 02 64 00 00 00 00 04 34 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 6B 00 00 00 00 09 46 00 00 0C 43 A0 00 01 90 00 00 A9 08 01 20 00 00 01 C0 0C 32 03 Message fail timeout
Send request PID_2101 to PCM  60531
Receive PCM: 80 F1 11 4C 61 01 00 00 00 00 00 00 00 00 0C 43 00 00 0C 21 00 00 02 64 00 00 00 00 04 35 00 00 00 00 32 C8 03 9E 04 29 03 20 E5 62 00 00 00 00 0E 2B 00 00 00 00 09 46 00 00 0C 43 A0 00 01 90 00 00 A9 08 01 20 00 00 01 C0 0C 33 Message fail timeout
Send request PID_2101 to PCM  61357

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

а тебе не очем не говорит надпись Message fail timeout   ? Блин это ппц

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

поправь значение 1563 строка 331 поставь 500 например. 

viki13viki
Offline
Зарегистрирован: 14.11.2016

извени со мной дети мои на работе. не внимательный. все внимание чтобы дети че не натворили.

ставил 300 400 500 все тотже тайм аут

MaksVV
Offline
Зарегистрирован: 06.08.2015

так как скетч возрос, видимо не успевает он длинные сообщения за 200 мс принимать

viki13viki
Offline
Зарегистрирован: 14.11.2016

даже на 1000 не помогает

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

А почему программный UART ? Может он не выдерживает задержки и теряется ?

viki13viki
Offline
Зарегистрирован: 14.11.2016

но сегодня был какойто момент когда заработало но мигало...... ща гляну может найду

viki13viki
Offline
Зарегистрирован: 14.11.2016

не нахожу . я вообще уже в них запутался какой когда был. по ходу который работал был мой когда я засомневался что не тот залил

MaksVV
Offline
Зарегистрирован: 06.08.2015

что то опять тормозит процесс причём конкретно. поправил отладку  1563 чтоб узнать насколько тормозит. Залей и сделай лог. Пробуй также опять по очереди убирать из лупа menu(),  строку с watch,  строку с двоеточием. 

viki13viki
Offline
Зарегистрирован: 14.11.2016

Ок. Завтра утром

MaksVV
Offline
Зарегистрирован: 06.08.2015

также вернул 1536 (блин как похоже 1563 1536 надо же ) . Попытался вернуть на тот момент когда связь была, только шрифт закоментил. 

viki13viki
Offline
Зарегистрирован: 14.11.2016

Так какой проверить 1536 или 1563?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

MaksVV почему програмный порт для связи с железкой ???

viki13viki
Offline
Зарегистрирован: 14.11.2016

Это вопрос к иаксу, он спец программист.

MaksVV
Offline
Зарегистрирован: 06.08.2015

вопрос не ко мне))) ТС выбрал софт сериал. Но траблы совсем не из за этого. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

viki13viki пишет:
Так какой проверить 1536 или 1563?

проверь оба

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Я не вкуривал что за железки используются как тач и дисплей, но если в их библиотеках есть работа с прерваниями, то софтовый сериал так и будет себя вести на длинных посылках ...

MaksVV
Offline
Зарегистрирован: 06.08.2015

у меня байты каждый проход лупа из буфера считываются. Соотвественно глубоко пофиг, что посылка длинная. 

Просто я сам же сделал таймер на миллис на случай сбоев, чтоб не зависало -  если байты перестают поступать посередине сообщения, то оно сбрасывается,  и начинается читалка по новой. И вот после добавления экрана этот таймер начал срабатывать. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

viki13viki ,ну если есть возможность , перебрось на хард сериал К-лайник PCM. По идее да, стабильнее он работать должен. 

viki13viki
Offline
Зарегистрирован: 14.11.2016

Нет возможности. Если таки припечет то разберу панель и перекину.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Так и будете стучаться головой о сетенку. С железом должна общаться железка.

viki13viki
Offline
Зарегистрирован: 14.11.2016

У меня два года прежний скетчь работал, и нчего. Не бился головой. Потом будет видно, может и перекину

MaksVV
Offline
Зарегистрирован: 06.08.2015

суть проблемы тут явно не в софтсериале. Обычно софт нельзя применять на больших скоростях. А у нас 10400. 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

У меня уже попкорн кончился от Вашего кино с конями ...

Вы представляете сколько времени Ваш скетч находится внутри софтсериала ?

Попробуте в исходниках SoftwareSerial.h изменить #define _SS_MAX_RX_BUFF 64 на #define _SS_MAX_RX_BUFF 81 (или вместо 81 - сколько байт посылает ЕБУ в одном ответе) и перекомпилировать проект.

(По умолчанию буфер у SoftwareSerial 64 байта и он явно переполняется, а Вы чуть чуть не успеваете их забирать ...)

MaksVV
Offline
Зарегистрирован: 06.08.2015

мы это уже проходили. Это нужно было делать в первой версии скетча, когда использовался delay195, то есть мы дожидались от ЭБУ ВСЕХ байт сообщения , которые накапливались в буфере софтсериала, и т.к. это больше 64, то увеличивали буфер. Т.е. сообщение принималось в одной итерации лупа. Сейчас же я уже написал вам, что буфер опустошается СРАЗУ после поступления в него байт сообщения. Т.е. сообщение принимается за много проходов лупа. Поэтому он не заполняется и на 10%. Проблема в том, что для надёжности я ввел таймер, который через определённый таймаут сбрасывает приём конкретного сообщения, если байты прекратили поступать. а прекратить они могли поступать, если в лупе что-то другое подвисает. И похер хард тут или софт Сериал. 

Если такой таймер не ввести  и поступление байт по той или иной причине прекратится, когда сообщение ещё полностью не принято, то байты уже следующего сообщения будут интерпретироваться как последние недостающие байты текущего принимаемого сообения и мы так никогда в итоге не найдём больше начальную шапку последующих сообщений. Будет дальнейший сбой приёма. 

viki13viki
Offline
Зарегистрирован: 14.11.2016

Если нужно, через час буду на работе, проверю два скетча которые ты упомянул выше, и могу скинуть старый скетчь чтобы ты глянул, может че увидешь...

MaksVV
Offline
Зарегистрирован: 06.08.2015

ок

MaksVV
Offline
Зарегистрирован: 06.08.2015

по хорошему нужно отдельную дуню на приём данных из К-лайн, которой в лупе ничего другого не будет мешать и уже она тоже по Сериал (или ещё как)  будет передавать данные ардуине, отвечающей за всё остальное, датчики t , экран и т.д. 

Потому что все эти библиотеки периферии гавно полное. 

viki13viki
Offline
Зарегистрирован: 14.11.2016

1536 работает, отображает на экране, без тача. отчет

Send request INIT to PCM  5051
Receive PCM: 83 F1 11 C1 6B 8F 40 
Received message is OK! Checksum is correct!  5131
   Initialization OK!!!!
Send request PID_2101 to PCM  5201
Send request PID_2101 to PCM  5803
Send request PID_2101 to PCM  6404
Receive PCM: 80 21  PCM Message fail address
Receive PCM: AA 00  PCM Message fail address
Receive PCM: E5 00  PCM Message fail address
Receive PCM: C8 03  PCM Message fail address
Receive PCM: 9F 04  PCM Message fail address
Receive PCM: E5 62  PCM Message fail address
Receive PCM: E6 00  PCM Message fail address
Receive PCM: CE 00  PCM Message fail address
Receive PCM: A0 00  PCM Message fail address
Receive PCM: 90 00  PCM Message fail address
Receive PCM: A9 08  PCM Message fail address
Receive PCM: 8D 0C  PCM Message fail address
Receive PCM: 9F 00  PCM Message fail address
Send request PID_2101 to PCM  7005
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E5 00 00 0D 69 00 00 02 73 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E6 00 00 00 00 08 CF 00 00 0D 35 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8E 0C 7C 03 9F 00 02 39 
Received message is OK! Checksum is correct!  7227
     Receive PCM DATAstream
Send request PID_2101 to PCM  7566
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E5 00 00 0D 69 00 00 02 73 00 00 00 00 04 36 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E2 00 00 00 00 08 CF 00 00 0D 35 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8E 0C 7C 03 9F 00 02 34 
Received message is OK! Checksum is correct!  7774
     Receive PCM DATAstream
Send request PID_2101 to PCM  8113
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E5 00 00 0D 69 00 00 02 73 00 00 00 00 04 36 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E2 00 00 00 00 08 CE 00 00 0D 33 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8D 0C 7C 03 9F 00 02 30 
Received message is OK! Checksum is correct!  8326
     Receive PCM DATAstream
Send request PID_2101 to PCM  8665
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E5 00 00 0D 69 00 00 02 73 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E4 00 00 00 00 08 CE 00 00 0D 33 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8D 0C 7D 03 9F 00 02 34 
Received message is OK! Checksum is correct!  8881
     Receive PCM DATAstream
Send request PID_2101 to PCM  9220
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E5 00 00 0D 69 00 00 02 73 00 00 00 00 04 36 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E2 00 00 00 00 08 CE 00 00 0D 33 A0 00 01 90 00 00 AD 08 01 20 00 00 01 8D 0C 7D 03 9F 00 02 35 
Received message is OK! Checksum is correct!  9492
     Receive PCM DATAstream
Send request PID_2101 to PCM  9831
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E5 00 00 0D 69 00 00 02 73 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E4 00 00 00 00 08 CF 00 00 0D 35 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8D 0C 7D 03 9F 00 02 37 
Received message is OK! Checksum is correct!  10033
     Receive PCM DATAstream
Send request PID_2101 to PCM  10372
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 00 00 0D 69 00 00 02 72 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E4 00 00 00 00 08 CF 00 00 0D 35 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8E 0C 7D 03 9F 00 02 35 
Received message is OK! Checksum is correct!  10582
     Receive PCM DATAstream
Send request PID_2101 to PCM  10920
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E5 00 00 0D 69 00 00 02 73 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E2 00 00 00 00 08 CF 00 00 0D 35 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8E 0C 7C 03 9F 00 02 35 
Received message is OK! Checksum is correct!  11140
     Receive PCM DATAstream
Send request PID_2101 to PCM  11479
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E5 00 00 0D 69 00 00 02 73 00 00 00 00 04 34 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E4 00 00 00 00 08 CF 00 00 0D 35 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8E 0C 7C 03 9F 00 02 34 
Received message is OK! Checksum is correct!  11693
     Receive PCM DATAstream
Send request PID_2101 to PCM  12033
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E5 00 00 0D 69 00 00 02 73 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E6 00 00 00 00 08 CF 00 00 0D 35 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8E 0C 7D 03 9F 00 02 3A 
Received message is OK! Checksum is correct!  12324
     Receive PCM DATAstream
Send request PID_2101 to PCM  12663
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E5 00 00 0D 69 00 00 02 72 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E1 00 00 00 00 08 CF 00 00 0D 35 A0 00 01 90 00 00 AD 08 01 20 00 00 01 8E 0C 7D 03 9F 00 02 38 
Received message is OK! Checksum is correct!  12881
     Receive PCM DATAstream
Send request PID_2101 to PCM  13220
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E5 00 00 0D 69 00 00 02 73 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E2 00 00 00 00 08 CE 00 00 0D 33 A0 00 01 90 00 00 AD 08 01 20 00 00 01 8D 0C 7D 03 9F 00 02 36 
Received message is OK! Checksum is correct!  13436
     Receive PCM DATAstream
Send request PID_2101 to PCM  13776
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 00 00 0D 67 00 00 02 72 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E4 00 00 00 00 08 CF 00 00 0D 35 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8D 0C 7D 03 9F 00 02 32 
Received message is OK! Checksum is correct!  13992
     Receive PCM DATAstream
Send request PID_2101 to PCM  14331
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 00 00 0D 69 00 00 02 72 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E4 00 00 00 00 08 CF 00 00 0D 35 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8E 0C 7F 03 9F 00 02 37 
Received message is OK! Checksum is correct!  14545
     Receive PCM DATAstream
Send request PID_2101 to PCM  14885
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 00 00 0D 69 00 00 02 72 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E2 00 00 00 00 08 CF 00 00 0D 35 A0 00 01 90 00 00 AD 08 01 20 00 00 01 8E 0C 7F 03 9E 00 02 38 
Received message is OK! Checksum is correct!  15102
     Receive PCM DATAstream
Send request PID_2101 to PCM  15442
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 00 00 0D 69 00 00 02 72 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E4 00 00 00 00 08 CF 00 00 0D 35 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8E 0C 7D 03 9F 00 02 35 
Received message is OK! Checksum is correct!  15718
     Receive PCM DATAstream
Send request PID_2101 to PCM  16057
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E5 00 00 0D 69 00 00 02 72 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E2 00 00 00 00 08 CF 00 00 0D 35 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8E 0C 7F 03 9F 00 02 37 
Received message is OK! Checksum is correct!  16270
     Receive PCM DATAstream
Send request PID_2101 to PCM  16610
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 00 00 0D 69 00 00 02 72 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E4 00 00 00 00 08 CF 00 00 0D 35 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8E 0C 7F 03 9F 00 02 37 
Received message is OK! Checksum is correct!  16823
     Receive PCM DATAstream
Send request PID_2101 to PCM  17163
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E5 00 00 0D 67 00 00 02 72 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E6 00 00 00 00 08 CF 00 00 0D 35 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8E 0C 7F 03 9F 00 02 39 
Received message is OK! Checksum is correct!  17380
     Receive PCM DATAstream
Send request PID_2101 to PCM  17720
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 00 00 0D 69 00 00 02 72 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E4 00 00 00 00 08 CF 00 00 0D 35 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8E 0C 7F 03 9F 00 02 37 
Received message is OK! Checksum is correct!  17932
     Receive PCM DATAstream
Send request PID_2101 to PCM  18272
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E5 00 00 0D 69 00 00 02 72 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E4 00 00 00 00 08 CF 00 00 0D 35 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8E 0C 7F 03 9F 00 02 39 
Received message is OK! Checksum is correct!  18574
     Receive PCM DATAstream
Send request PID_2101 to PCM  18913
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 00 00 0D 67 00 00 02 72 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E2 00 00 00 00 08 CF 00 00 0D 35 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8E 0C 7F 03 9F 00 02 33 
Received message is OK! Checksum is correct!  19123
     Receive PCM DATAstream
Send request PID_2101 to PCM  19463
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 00 00 0D 67 00 00 02 72 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E2 00 00 00 00 08 CF 00 00 0D 35 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8E 0C 7F 03 9F 00 02 33 
Received message is OK! Checksum is correct!  19676
     Receive PCM DATAstream
Send request PID_2101 to PCM  20016
Send request PID_2101 to PCM  20617
Send request PID_2101 to PCM  21218
Send request PID_2101 to PCM  21819
Send request PID_2101 to PCM  22420
Send request PID_2101 to PCM  23021
Send request INIT to PCM  28072
Receive PCM: 83 F1 11 C1 6B 8F 40 
Received message is OK! Checksum is correct!  28193
   Initialization OK!!!!
Send request PID_2101 to PCM  28264
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 00 00 0D 67 00 00 02 71 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E2 00 00 00 00 08 CF 00 00 0D 38 A0 00 01 90 00 00 AD 08 01 20 00 00 01 8E 0C 7F 03 9F 00 02 39 
Received message is OK! Checksum is correct!  28467
     Receive PCM DATAstream
Send request PID_2101 to PCM  28807
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 00 00 0D 67 00 00 02 72 00 00 00 00 04 36 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E2 00 00 00 00 08 CF 00 00 0D 38 A0 00 01 90 00 00 AD 08 01 20 00 00 01 8E 0C 7F 03 9F 00 02 39 
Received message is OK! Checksum is correct!  29024
     Receive PCM DATAstream
Send request PID_2101 to PCM  29364
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 00 00 0D 67 00 00 02 72 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E2 00 00 00 00 08 CF 00 00 0D 38 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8E 0C 80 03 9F 00 02 37 
Received message is OK! Checksum is correct!  29578
     Receive PCM DATAstream
Send request PID_2101 to PCM  29918
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 00 00 0D 67 00 00 02 72 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E2 00 00 00 00 08 CF 00 00 0D 38 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8E 0C 80 03 9F 00 02 37 
Received message is OK! Checksum is correct!  30133
     Receive PCM DATAstream
Send request PID_2101 to PCM  30473
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 00 00 0D 69 00 00 02 72 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E4 00 00 00 00 08 CF 00 00 0D 38 A0 00 01 90 00 00 AD 08 01 20 00 00 01 8E 0C 81 03 9F 00 02 40 
Received message is OK! Checksum is correct!  30686
     Receive PCM DATAstream
Send request PID_2101 to PCM  31025
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 00 00 0D 67 00 00 02 72 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E2 00 00 00 00 08 CF 00 00 0D 38 A0 00 01 90 00 00 A9 08 01 20 00 00 01 8E 0C 81 03 9F 00 02 38 
Received message is OK! Checksum is correct!  31362
     Receive PCM DATAstream
Send request PID_2101 to PCM  31702
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 00 00 0D 67 00 00 02 72 00 00 00 00 04 36 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E4 00 00 00 00 08 CF 00 00 0D 38 A0 00 01 90 00 00 AD 08 01 20 00 00 01 8E 0C 80 03 9F 00 02 3C 
Received message is OK! Checksum is correct!  31915
     Receive PCM DATAstream
Send request PID_2101 to PCM  32254
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 00 00 0D 67 00 00 02 71 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0B E4 00 00 00 00 08 CF 00 00 0D 38 A0 00 01 90 00 00 AD 08 01 20 00 00 01 8E 0C 81 03 9F 00 02 3D 
Received message is OK! Checksum is correct!  32470
     Receive PCM DATAstream
Send request PID_2101 to PCM  32809
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 00 00 0D 67 00 00 02 12 00 00 7F FF 04 33 00 00 00 9C 32 C8 03 9F 04 29 03 20 16 38 00 00 00 00 0B C2 0B 45 0A FC 09 38 00 57 0D 35 A0 00 01 90 19 64 A9 08 01 20 00 00 01 AE 0C 81 03 9F 00 02 86 
Received message is OK! Checksum is correct!  33026
     Receive PCM DATAstream
Send request PID_2101 to PCM  33366
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 00 E9 0D 67 00 00 02 52 00 00 11 EA 04 21 00 00 03 79 0A A8 03 9F 04 29 03 20 E8 C1 00 00 00 00 0B DD 01 4A 01 51 08 D1 01 C1 0D 38 A0 00 00 64 00 00 A9 08 01 20 13 9E 01 91 0C 7A 03 9F 00 02 58 
Received message is OK! Checksum is correct!  33583
     Receive PCM DATAstream
Send request PID_2101 to PCM  33923
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 01 6F 0D 67 00 00 02 58 00 00 11 C0 04 29 00 00 03 1A 0B 15 03 9F 04 2C 03 20 EE 1B 00 00 00 00 0B D7 02 A6 02 BB 08 F8 01 8B 0D 38 A0 00 00 64 02 45 AD 08 01 30 19 64 01 9F 0C 72 03 9F 00 02 15 
Received message is OK! Checksum is correct!  34212
     Receive PCM DATAstream
Send request PID_2101 to PCM  34552
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E5 01 84 0D 66 00 00 02 5A 00 00 11 5A 04 2A 00 00 03 21 0B 09 03 9F 04 2B 03 20 EC E9 00 00 00 00 0B DC 02 56 02 81 08 F3 01 90 0D 38 A0 00 00 64 01 A7 A9 08 01 30 19 64 01 9D 0C 6B 03 9F 00 02 5D 
Received message is OK! Checksum is correct!  34753
     Receive PCM DATAstream
Send request PID_2101 to PCM  35093
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E5 01 8A 0D 67 00 00 02 5C 00 00 11 9E 04 2D 00 00 03 20 0B 0E 03 9F 04 2B 03 20 ED 0E 00 00 00 00 0B D7 02 81 02 7E 08 F3 01 90 0D 38 A0 00 00 64 01 A1 A9 08 01 30 19 64 01 9D 0C 65 03 9F 00 02 EE 
Received message is OK! Checksum is correct!  35304
     Receive PCM DATAstream
Send request PID_2101 to PCM  35644
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 01 87 0D 67 00 00 02 5C 00 00 11 65 04 30 00 00 03 1F 0B 14 03 9F 04 2C 03 20 ED 3D 00 00 00 00 0B DA 02 82 02 91 08 F5 01 8F 0D 38 A0 00 00 64 01 D5 A9 08 01 30 19 64 01 9E 0C 61 03 9F 00 02 31 
Received message is OK! Checksum is correct!  35858
     Receive PCM DATAstream
Send request PID_2101 to PCM  36198
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E5 01 88 0D 67 00 00 02 62 00 00 11 12 04 2D 00 00 03 1B 0B 34 03 9F 04 2D 03 20 ED F1 00 00 00 00 0B DF 02 A4 02 B3 08 F7 01 8E 0D 38 A0 00 00 64 02 3B A9 08 01 30 19 64 01 9F 0C 5E 03 9F 00 02 64 
Received message is OK! Checksum is correct!  36411
     Receive PCM DATAstream
Send request PID_2101 to PCM  36751
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E5 01 80 0D 67 00 00 02 67 00 00 11 51 04 2D 00 00 03 1C 0B 51 03 9F 04 2D 03 20 EF 13 00 00 00 00 0B DF 03 1B 02 E6 08 FA 01 8D 0D 38 A0 00 00 64 02 A9 A9 08 01 30 19 64 01 A0 0C 59 03 9F 00 02 F9 
Received message is OK! Checksum is correct!  36960
     Receive PCM DATAstream
Send request PID_2101 to PCM  37300
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E5 01 7B 0D 67 00 00 02 6D 00 00 10 DD 04 30 00 00 03 1E 0B 60 03 9F 04 2E 03 20 EF A1 00 00 00 00 0B DD 03 37 03 00 08 FC 01 8E 0D 38 A0 00 00 64 03 2A A9 08 01 30 19 64 01 A1 0C 57 03 9F 00 02 E1 
Received message is OK! Checksum is correct!  37571
     Receive PCM DATAstream
Send request PID_2101 to PCM  37911
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E5 01 79 0D 67 00 00 02 75 00 00 11 17 04 30 00 00 03 1E 0B 71 03 9F 04 2F 03 20 F0 50 00 00 00 00 0B E2 03 65 03 27 08 FE 01 8F 0D 38 A0 00 00 64 03 8F AD 08 01 30 19 64 01 A2 0C 52 03 9F 00 02 A6 
Received message is OK! Checksum is correct!  38128
     Receive PCM DATAstream
Send request PID_2101 to PCM  38468
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E5 01 74 0D 67 00 00 02 7E 00 00 11 17 04 30 00 00 03 1C 0B 93 03 9F 04 30 03 20 F1 B6 00 00 00 00 0B E6 03 B3 03 6C 09 02 01 8F 0D 35 A0 00 00 64 04 56 A9 08 01 30 19 64 01 A3 0C 51 03 9F 00 02 8F 
Received message is OK! Checksum is correct!  38684
     Receive PCM DATAstream
Send request PID_2101 to PCM  39024
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 01 77 0D 67 00 00 02 8C 00 00 11 27 04 32 00 00 03 1B 0B BA 03 9F 04 31 03 20 F3 42 00 00 00 00 0B E9 03 83 03 B5 09 06 01 8D 0D 35 A0 00 00 64 05 35 A9 08 01 30 19 63 01 A5 0C 4E 03 9F 00 02 61 
Received message is OK! Checksum is correct!  39239
     Receive PCM DATAstream
Send request PID_2101 to PCM  39579
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E1 01 7B 0D 67 00 00 02 97 00 00 11 39 04 2D 00 00 03 27 0B A1 03 9F 04 30 03 20 F1 D6 00 00 00 00 0B EC 03 2D 03 70 09 01 01 93 0D 35 A0 00 00 64 04 74 AD 08 01 30 19 64 01 A3 0C 4D 03 9F 00 02 A8 
Received message is OK! Checksum is correct!  39792
     Receive PCM DATAstream
Send request PID_2101 to PCM  40132
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E3 01 75 0D 67 00 00 02 9A 00 00 11 0C 04 2D 00 00 03 1F 0B A5 03 9F 04 31 03 20 F2 45 00 00 00 00 0B EE 03 57 03 75 09 01 01 8F 0D 33 A0 00 00 64 04 83 A9 08 01 30 19 64 01 A4 0C 4B 03 9F 00 02 1C 
Received message is OK! Checksum is correct!  40430
     Receive PCM DATAstream
Send request PID_2101 to PCM  40770
Send request PID_2101 to PCM  41371
Receive PCM: 80 21  PCM Message fail address
Receive PCM: AA 00  PCM Message fail address
Receive PCM: E3 01  PCM Message fail address
Receive PCM: 9C 00  PCM Message fail address
Receive PCM: 81 03  PCM Message fail address
Receive PCM: 9F 04  PCM Message fail address
Receive PCM: F0 D4  PCM Message fail address
Receive PCM: EC 02  PCM Message fail address
Receive PCM: EF 03  PCM Message fail address
Receive PCM: FD 01  PCM Message fail address
Receive PCM: 90 0D  PCM Message fail address
Receive PCM: A0 00  PCM Message fail address
Receive PCM: E1 A9  PCM Message fail address
Receive PCM: A2 0C  PCM Message fail address
Receive PCM: 9F 00  PCM Message fail address
Send request PID_2101 to PCM  41972
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D E1 01 77 0D 69 00 00 02 9C 00 00 11 64 04 30 00 00 03 21 0B 83 03 9E 04 2F 03 20 F0 EE 00 00 00 00 0B EB 02 FC 03 44 09 00 01 90 0D 33 A0 00 00 64 03 F0 A9 08 01 30 19 62 01 A2 0C 47 03 9F 00 02 D3 
Received message is OK! Checksum is correct!  42187
     Receive PCM DATAstream
Send request PID_2101 to PCM  42527
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D DF 01 7E 0D 69 00 00 02 9B 00 00 11 3F 04 2D 00 00 03 22 0B 70 03 9F 04 2F 03 20 F0 4A 00 00 00 00 0B EC 02 E1 03 25 08 FC 01 91 0D 33 A0 00 00 64 03 93 A9 08 01 30 19 61 01 A0 0C 45 03 9E 00 02 5A 
Received message is OK! Checksum is correct!  42742
     Receive PCM DATAstream
Send request PID_2101 to PCM  43082
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D DF 01 7E 0D 6B 00 00 02 9C 00 00 11 6E 04 2C 00 00 03 21 0B 72 03 9F 04 2F 03 20 F0 45 00 00 00 00 0B EC 03 05 03 24 08 FC 01 90 0D 33 A0 00 01 DC 03 6C AD 08 01 30 19 5F 01 A1 0C 44 03 9F 00 02 FF 
Received message is OK! Checksum is correct!  43294
     Receive PCM DATAstream
Send request PID_2101 to PCM  43634
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D DE 01 77 0D 6B 00 00 02 9D 00 00 11 11 04 2C 00 00 03 20 0B 64 03 9F 04 2E 03 20 EF D1 00 00 00 00 0B EE 02 F5 03 0E 08 F9 01 90 0D 30 A0 00 05 AD 03 4E A9 08 01 30 19 5C 01 A0 0C 44 03 9F 00 02 9A 
Received message is OK! Checksum is correct!  43908
     Receive PCM DATAstream
Send request PID_2101 to PCM  44248
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D DE 01 79 0D 6B 00 00 02 9C 00 00 0F AA 04 33 00 00 03 20 0B 5F 03 9F 04 2E 03 20 EF 9C 00 00 00 00 0B E9 02 F3 03 04 08 F8 01 8F 0D 2E A0 00 09 C9 03 30 A9 08 01 30 19 55 01 9F 0C 41 03 9F 00 02 E1 
Received message is OK! Checksum is correct!  44463
     Receive PCM DATAstream
Send request PID_2101 to PCM  44803
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D DC 01 77 0D 6E 00 00 02 9F 00 00 0C 96 04 30 00 00 03 1F 0B 5B 03 9F 04 2E 03 20 EF 87 00 00 00 00 0B F0 02 F1 03 00 08 F9 01 8F 0D 2E A0 00 09 B5 03 21 AD 08 01 30 19 49 01 A0 0C 44 03 9F 00 02 8A 
Received message is OK! Checksum is correct!  45016
     Receive PCM DATAstream
Send request PID_2101 to PCM  45356
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D DC 01 78 0D 6E 00 00 02 9F 00 00 0C 20 04 30 00 00 03 20 0B 55 03 9E 04 2E 03 20 EF 3D 00 00 00 00 0C 30 03 2D 02 F2 08 F8 01 8F 0D 2B A0 00 0A 04 03 15 A9 08 01 30 19 49 01 9F 0C 45 03 9F 00 02 70 
Received message is OK! Checksum is correct!  45570
     Receive PCM DATAstream
Send request PID_2101 to PCM  45910
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D DC 01 76 0D 6C 00 00 02 A1 00 00 0B B4 04 30 00 00 03 20 0B 53 03 9F 04 2D 03 20 EF 23 00 00 00 00 0C 2D 03 2D 02 ED 08 F6 01 90 0D 2B A0 00 0A 19 02 EB A9 08 01 30 19 41 01 9E 0C 47 03 9F 00 02 BF 
Received message is OK! Checksum is correct!  46118
     Receive PCM DATAstream
Send request PID_2101 to PCM  46458
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D DA 01 76 0D 6E 00 00 02 A1 00 00 0B 30 04 30 00 00 03 1F 0B 54 03 9F 04 2E 03 20 EF 33 00 00 00 00 0C 2D 03 29 02 F6 08 F8 01 8F 0D 2B A0 00 0A 21 03 0C A9 08 01 30 19 40 01 9F 0C 47 03 9F 00 02 7C 
Received message is OK! Checksum is correct!  46754
     Receive PCM DATAstream
Send request PID_2101 to PCM  47094
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D DA 01 75 0D 6E 00 00 02 A3 00 00 0B 37 04 30 00 00 03 20 0B 4D 03 9F 04 2D 03 20 EE FE 00 00 00 00 0C 30 03 2C 02 E6 08 F5 01 8F 0D 26 A0 00 0A 21 02 D3 A9 08 01 30 19 3B 01 9E 0C 48 03 9F 00 02 F6 
Received message is OK! Checksum is correct!  47305
     Receive PCM DATAstream
Send request PID_2101 to PCM  47645
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D8 01 79 0D 6E 00 00 02 A2 00 00 0B 4C 04 32 00 00 03 21 0B 4E 03 9F 04 2D 03 20 EE FE 00 00 00 00 0C 2E 03 13 02 E5 08 F4 01 90 0D 26 A0 00 0A 11 02 DF A9 08 01 30 19 3C 01 9E 0C 48 03 9F 00 02 F1 
Received message is OK! Checksum is correct!  47860
     Receive PCM DATAstream
Send request PID_2101 to PCM  48200
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D8 01 7F 0D 6F 00 00 02 A1 00 00 0B 5A 04 30 00 00 03 20 0B 4D 03 9F 04 2D 03 20 EE F8 00 00 00 00 0C 2E 03 13 02 E5 08 F4 01 90 0D 26 A0 00 0A 12 02 D3 A9 08 01 30 19 38 01 9D 0C 48 03 9F 00 02 EB 
Received message is OK! Checksum is correct!  48412
     Receive PCM DATAstream
Send request PID_2101 to PCM  48752
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D6 01 80 0D 6F 04 12 02 A1 00 00 0B 64 04 30 00 00 03 20 11 2F 03 9F 04 50 03 20 F6 4F 00 00 00 00 0C 32 05 6E 07 DC 09 88 01 91 0D 26 A0 00 05 D0 19 64 AC 08 01 30 19 64 01 E0 0C 48 03 9F 00 02 3A 
Received message is OK! Checksum is correct!  48967
     Receive PCM DATAstream
Send request PID_2101 to PCM  49307
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D8 01 D1 0D 6E 10 7F 02 A4 00 00 0E F9 04 10 00 00 06 5A 14 62 03 9F 05 15 03 20 07 BE 00 00 00 00 0C 30 08 0E 08 50 09 A7 03 12 0D 24 A0 00 00 7A 19 64 A8 08 01 30 19 64 01 EC 0C 45 03 9F 00 02 99 
Received message is OK! Checksum is correct!  49508
     Receive PCM DATAstream
Send request PID_2101 to PCM  49848
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D8 01 E7 0D 6F 00 00 02 A8 00 00 0E F0 04 4B 00 00 06 3B 0A A1 03 9F 04 59 03 20 E5 54 00 00 00 00 0C 30 00 00 00 00 08 E1 02 F1 0D 24 A0 00 09 D1 00 00 A9 08 01 30 19 64 01 99 0C 41 03 9F 00 02 5A 
Received message is OK! Checksum is correct!  50125
     Receive PCM DATAstream
Send request PID_2101 to PCM  50465
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D6 01 4F 0D 74 00 00 02 A5 00 00 0B C6 04 44 00 00 03 CF 0A B3 03 9F 04 29 03 20 E8 CF 00 00 00 00 0B EC 01 79 01 73 08 C5 01 D4 0D 24 A0 00 0A D2 00 00 AD 08 01 30 19 64 01 86 0C 40 03 9F 00 02 E0 
Received message is OK! Checksum is correct!  50668
     Receive PCM DATAstream
Send request PID_2101 to PCM  51008
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D5 01 96 0D 72 00 00 02 A3 00 00 0A C4 04 36 00 00 03 1E 0B 30 03 9F 04 2C 03 20 ED CC 00 00 00 00 0B F0 02 D0 03 0E 08 F8 01 89 0D 21 A0 00 0A 9A 03 15 A9 08 01 30 19 64 01 9F 0C 40 03 9F 00 02 B6 
Received message is OK! Checksum is correct!  51226
     Receive PCM DATAstream
Send request PID_2101 to PCM  51566
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D5 01 83 0D 72 00 00 02 A4 00 00 0A 6A 04 32 00 00 03 23 0B 38 03 9F 04 2D 03 20 EE 20 00 00 00 00 0B F0 02 F0 02 BC 08 F0 01 92 0D 21 A0 00 0A 47 02 58 A9 08 01 30 19 64 01 9D 0C 41 03 9F 00 02 65 
Received message is OK! Checksum is correct!  51779
     Receive PCM DATAstream
Send request PID_2101 to PCM  52119
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D5 01 81 0D 72 00 00 02 A5 00 00 0A 90 04 30 00 00 03 20 0B 44 03 9F 04 2D 03 20 EE B4 00 00 00 00 0B EE 03 13 02 D8 08 F1 01 90 0D 1F A0 00 09 DC 02 AC A9 08 01 30 19 64 01 9C 0C 43 03 9F 00 02 49 
Received message is OK! Checksum is correct!  52334
     Receive PCM DATAstream
Send request PID_2101 to PCM  52674
Send request PID_2101 to PCM  53275
Receive PCM: 80 21  PCM Message fail address
Receive PCM: AA 00  PCM Message fail address
Receive PCM: D3 01  PCM Message fail address
Receive PCM: 88 0D  PCM Message fail address
Receive PCM: A5 00  PCM Message fail address
Receive PCM: 9F 04  PCM Message fail address
Receive PCM: EE 6F  PCM Message fail address
Receive PCM: D8 08  PCM Message fail address
Receive PCM: F0 01  PCM Message fail address
Receive PCM: 90 0D  PCM Message fail address
Receive PCM: A0 00  PCM Message fail address
Receive PCM: B5 02  PCM Message fail address
Receive PCM: B9 A9  PCM Message fail address
Receive PCM: 9C 0C  PCM Message fail address
Receive PCM: 9F 00  PCM Message fail address
Receive PCM: CE Message fail timeout
Send request PID_2101 to PCM  53876
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 88 0D 75 00 00 02 A5 00 00 0A F1 04 30 00 00 03 1F 0B 3D 03 9F 04 2D 03 20 EE 75 00 00 00 00 0C 32 03 08 02 D5 08 F1 01 90 0D 1C A0 00 09 A2 02 A0 A9 08 01 30 19 5A 01 9C 0C 45 03 9F 00 02 51 
Received message is OK! Checksum is correct!  54095
     Receive PCM DATAstream
Send request PID_2101 to PCM  54435
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 87 0D 75 00 00 02 A5 00 00 0B 60 04 30 00 00 03 20 0B 36 03 9F 04 2D 03 20 EE 65 00 00 00 00 0C 2E 02 FA 02 C9 08 EE 01 90 0D 1C A0 00 09 B0 02 7F AD 08 01 30 19 57 01 9C 0C 45 03 9F 00 02 76 
Received message is OK! Checksum is correct!  54650
     Receive PCM DATAstream
Send request PID_2101 to PCM  54990
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 88 0D 74 00 00 02 A3 00 00 0B 8E 04 2C 00 00 03 20 0B 42 03 9F 04 2D 03 20 EE 9F 00 00 00 00 0C 32 02 FB 02 CD 08 F0 01 90 0D 1C A0 00 09 D4 02 8B A9 08 01 30 19 54 01 9C 0C 45 03 9F 00 02 18 
Received message is OK! Checksum is correct!  55198
     Receive PCM DATAstream
Send request PID_2101 to PCM  55538
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 8D 0D 77 00 00 02 A3 00 00 0B 3E 04 2D 00 00 03 1F 0B 3E 03 9F 04 2D 03 20 EE 84 00 00 00 00 0C 2D 02 BD 02 CF 08 F0 01 8F 0D 1A A0 00 09 D7 02 B3 A9 08 01 30 19 4F 01 9C 0C 45 03 9F 00 02 93 
Received message is OK! Checksum is correct!  55753
     Receive PCM DATAstream
Send request PID_2101 to PCM  56093
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 88 0D 77 00 00 02 A3 00 00 0B 2C 04 2C 00 00 03 21 0B 3C 03 9F 04 2D 03 20 EE 75 00 00 00 00 0C 2E 02 B7 02 CC 08 EF 01 90 0D 17 A0 00 09 D2 02 88 AD 08 01 30 19 47 01 9B 0C 47 03 9F 00 02 2E 
Received message is OK! Checksum is correct!  56367
     Receive PCM DATAstream
Send request PID_2101 to PCM  56707
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D CF 01 89 0D 77 00 00 02 A5 00 00 0B 3E 04 2D 00 00 03 1F 0B 40 03 9F 04 2D 03 20 EE 8F 00 00 00 00 0C 32 02 BE 02 D2 08 F0 01 8F 0D 17 A0 00 09 E3 02 94 A9 08 01 30 19 4A 01 9C 0C 45 03 9F 00 02 88 
Received message is OK! Checksum is correct!  56920
     Receive PCM DATAstream
Send request PID_2101 to PCM  57260
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 01 8D 0D 78 00 00 02 A5 00 00 0B 29 04 2C 00 00 03 1F 0B 3D 03 9F 04 2D 03 20 EE 7A 00 00 00 00 0C 30 02 C5 02 D3 08 F0 01 8F 0D 17 A0 00 09 E0 02 A7 A9 08 01 30 19 51 01 9C 0C 47 03 9F 00 02 80 
Received message is OK! Checksum is correct!  57474
     Receive PCM DATAstream
Send request PID_2101 to PCM  57814
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 01 8F 0D 7A 00 00 02 A4 00 00 0B 5A 04 2D 00 00 03 20 0B 3D 03 9F 04 2D 03 20 EE 7A 00 00 00 00 0C 30 03 0D 02 CD 08 EF 01 90 0D 17 A0 00 09 E8 02 8B AD 08 01 30 19 4A 01 9B 0C 47 03 9F 00 02 E1 
Received message is OK! Checksum is correct!  58031
     Receive PCM DATAstream
Send request PID_2101 to PCM  58371
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 88 0D 7B 00 00 02 A4 00 00 0B 37 04 30 00 00 03 1F 0B 3E 03 9F 04 2D 03 20 EE 7F 00 00 00 00 0C 30 03 11 02 CE 08 EF 01 8F 0D 15 A0 00 09 F1 02 8B A9 08 01 30 19 40 01 9B 0C 47 03 9E 00 02 BE 
Received message is OK! Checksum is correct!  58584
     Receive PCM DATAstream
Send request PID_2101 to PCM  58924
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 01 9F 0D 7A 0B 61 02 A3 00 00 0D 98 04 27 00 00 03 70 16 CF 03 9F 04 80 03 20 FB E3 00 00 00 00 0B EC 05 32 07 A6 09 69 01 CF 0D 15 A0 00 04 AF 19 64 A8 08 01 30 19 64 01 D2 0C 47 03 9F 00 02 C2 
Received message is OK! Checksum is correct!  59215
     Receive PCM DATAstream
Send request PID_2101 to PCM  59555
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 E2 0D 7B 01 C0 02 A7 00 00 10 59 04 11 00 00 06 97 0A B4 03 9F 04 67 03 20 E6 F0 00 00 00 00 0C 30 01 28 01 25 09 31 03 57 0D 15 A0 00 09 C4 00 00 A9 08 01 30 19 64 01 BB 0C 41 03 9F 00 02 74 
Received message is OK! Checksum is correct!  59772
     Receive PCM DATAstream
Send request PID_2101 to PCM  60112
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 01 A5 0D 7B 04 DC 02 A7 00 00 0B 45 04 3A 00 00 05 F4 0C 63 03 9F 04 75 03 20 EE FB 00 00 00 00 0C 30 02 D8 03 B7 09 41 03 0E 0D 12 A0 00 09 35 05 58 A8 08 01 30 19 64 01 BD 0C 3E 03 9E 00 02 66 
Received message is OK! Checksum is correct!  60324
     Receive PCM DATAstream
Send request PID_2101 to PCM  60664
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 01 BD 0D 7D 00 00 02 A9 00 00 0C C3 04 3C 00 00 04 9B 0A 9E 03 9F 04 34 03 20 E5 CE 00 00 00 00 0C 32 00 65 00 66 08 CD 02 63 0D 12 A0 00 0A 80 00 00 A9 08 01 30 19 64 01 89 0C 3D 03 9F 00 02 5F 
Received message is OK! Checksum is correct!  60879
     Receive PCM DATAstream
Send request PID_2101 to PCM  61219
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 01 68 0D 7B 00 00 02 A6 00 00 0B 0C 04 39 00 00 03 64 0A EE 03 9F 04 2A 03 20 EA D9 00 00 00 00 0C 30 01 C4 02 10 08 D4 01 AF 0D 12 A0 00 0A 9C 00 54 A9 08 01 30 19 64 01 8F 0C 3D 03 9F 00 02 3A 
Received message is OK! Checksum is correct!  61432
     Receive PCM DATAstream
Send request PID_2101 to PCM  61772
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 01 90 0D 7F 00 00 02 A6 00 00 0A 93 04 37 00 00 03 1B 0B 66 03 9F 04 2E 03 20 EF 92 00 00 00 00 0C 30 02 F7 03 00 08 F2 01 8B 0D 12 A0 00 0A 67 02 DC AD 08 01 30 19 64 01 9C 0C 3E 03 9F 00 02 62 
Received message is OK! Checksum is correct!  61982
     Receive PCM DATAstream
Send request PID_2101 to PCM  62322
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 01 97 0D 7D 00 00 02 A4 00 00 0A A2 04 30 00 00 03 1F 0B 44 03 9F 04 2D 03 20 EE 84 00 00 00 00 0C 2E 02 C3 02 D1 08 EE 01 8F 0D 12 A0 00 0A 1C 02 92 A9 08 01 30 19 5D 01 9A 0C 3E 03 9F 00 02 37 
Received message is OK! Checksum is correct!  62596
     Receive PCM DATAstream
Send request PID_2101 to PCM  62936
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 01 93 0D 7F 00 00 02 A4 00 00 0A EE 04 30 00 00 03 20 0B 3B 03 9F 04 2D 03 20 EE 4A 00 00 00 00 0B F0 02 BA 02 CB 08 EC 01 91 0D 12 A0 00 09 E9 02 85 A9 08 01 30 19 54 01 9B 0C 40 03 9F 00 02 AA 
Received message is OK! Checksum is correct!  63149
     Receive PCM DATAstream
Send request PID_2101 to PCM  63489
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 01 95 0D 7F 00 00 02 A4 00 00 0A EE 04 30 00 00 03 21 0B 3A 03 9F 04 2D 03 20 EE 4A 00 00 00 00 0C 32 02 B4 02 C7 08 EC 01 91 0D 10 A0 00 09 C1 02 79 AD 08 01 30 19 57 01 99 0C 41 03 9F 00 02 B5 
Received message is OK! Checksum is correct!  63702
     Receive PCM DATAstream
Send request PID_2101 to PCM  64041
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 01 96 0D 7F 00 00 02 A4 00 00 0B 4F 04 2C 00 00 03 20 0B 3F 03 9F 04 2D 03 20 EE 7A 00 00 00 00 0C 2E 03 19 02 CE 08 EC 01 90 0D 0D A0 00 09 CB 02 88 A9 08 01 30 19 4C 01 9A 0C 41 03 9F 00 02 B8 
Received message is OK! Checksum is correct!  64256
     Receive PCM DATAstream
Send request PID_2101 to PCM  64595
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 01 91 0D 80 00 00 02 A5 00 00 0B 0D 04 2D 00 00 03 20 0B 39 03 9F 04 2D 03 20 EE 4A 00 00 00 00 0C 30 03 10 02 C5 08 EB 01 90 0D 0D A0 00 09 C1 02 73 A9 08 01 30 19 4B 01 99 0C 43 03 9F 00 02 0E 
Received message is OK! Checksum is correct!  64811
     Receive PCM DATAstream
Send request PID_2101 to PCM  65150
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 01 91 0D 80 00 00 02 A6 00 00 0B 0D 04 2D 00 00 03 21 0B 3B 03 9F 04 2D 03 20 EE 65 00 00 00 00 0C 30 02 90 02 BB 08 E9 01 91 0D 0B A0 00 09 B0 02 49 A9 08 01 30 19 47 01 99 0C 43 03 9E 00 02 5F 
Received message is OK! Checksum is correct!  65451
     Receive PCM DATAstream
Send request PID_2101 to PCM  65790
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 01 93 0D 80 00 00 02 A5 00 00 0B 5D 04 30 00 00 03 1F 0B 3E 03 9F 04 2D 03 20 EE 7A 00 00 00 00 0C 2E 03 21 02 D4 08 EB 01 8F 0D 0B A0 00 09 BE 02 8E A9 08 01 30 19 43 01 9A 0C 44 03 9F 00 02 C4 
Received message is OK! Checksum is correct!  65995
     Receive PCM DATAstream
Send request PID_2101 to PCM  66335
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 95 0D 82 00 00 02 A4 00 00 0B 4C 04 2D 00 00 03 21 0B 38 03 9F 04 2D 03 20 EE 50 00 00 00 00 0C 32 02 8E 02 C0 08 E9 01 91 0D 0B A0 00 09 C7 02 55 A9 08 01 30 19 38 01 99 0C 44 03 9E 00 02 A6 
Received message is OK! Checksum is correct!  66554
     Receive PCM DATAstream
Send request PID_2101 to PCM  66894
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 01 93 0D 82 00 00 02 A4 00 00 0B 1B 04 30 00 00 03 20 0B 3C 03 9E 04 2D 03 20 EE 6A 00 00 00 00 0C 30 02 92 02 CB 08 EC 01 90 0D 0B A0 00 09 C0 02 85 A9 08 01 30 19 3A 01 99 0C 43 03 9F 00 02 CA 
Received message is OK! Checksum is correct!  67108
     Receive PCM DATAstream
Send request PID_2101 to PCM  67448
Send request PID_2101 to PCM  68049
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 98 0D 83 00 00 02 A5 00 00 0B 83 04 30 00 00 03 20 0B 3C 03 9F 04 2D 03 20 EE 45 00 00 00 00 0C 32 02 8F 02 C4 08 E8 01 90 0D 08 A0 00 09 DB 02 70 A9 08 01 30 19 36 01 99 0C 43 03 9F 00 02 0A 
Received message is OK! Checksum is correct!  68256
     Receive PCM DATAstream
Send request PID_2101 to PCM  68596
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 98 0D 83 00 00 02 A3 00 00 0B 60 04 30 00 00 03 21 0B 35 03 9F 04 2D 03 20 EE 35 00 00 00 00 0C 30 02 A8 02 C1 08 E8 01 90 0D 08 A0 00 09 F1 02 7C A9 08 01 30 19 39 01 99 0C 43 03 9F 00 02 08 
Received message is OK! Checksum is correct!  68870
     Receive PCM DATAstream
Send request PID_2101 to PCM  69210
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 93 0D 83 00 00 02 A4 00 00 0B 72 04 30 00 00 03 22 0B 32 03 9E 04 2D 03 20 EE 16 00 00 00 00 0C 30 02 8E 02 C5 08 E8 01 90 0D 06 A0 00 0A 00 02 73 A9 08 01 30 19 34 01 98 0C 43 03 9E 00 02 DC 
Received message is OK! Checksum is correct!  69423
     Receive PCM DATAstream
Send request PID_2101 to PCM  69763
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 01 99 0D 83 00 00 02 A4 00 00 0B 45 04 30 00 00 03 20 0B 36 03 9E 04 2D 03 20 EE 3A 00 00 00 00 0C 30 02 AA 02 C2 08 E9 01 90 0D 06 A0 00 0A 03 02 6A A9 08 01 30 19 30 01 99 0C 43 03 9F 00 02 EB 
Received message is OK! Checksum is correct!  69978
     Receive PCM DATAstream
Send request PID_2101 to PCM  70318
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 97 0D 85 00 00 02 A4 00 00 0B 72 04 32 00 00 03 1E 0B 3A 03 9F 04 2D 03 20 EE 9F 00 00 00 00 0C 30 02 C1 02 D5 08 EB 01 8F 0D 06 A0 00 0A 0C 02 9E A9 08 01 30 19 2A 01 99 0C 44 03 9F 00 02 E7 
Received message is OK! Checksum is correct!  70532
     Receive PCM DATAstream
Send request PID_2101 to PCM  70872
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 99 0D 85 00 00 02 A4 00 00 0B 75 04 30 00 00 03 21 0B 36 03 9F 04 2D 03 20 EE 40 00 00 00 00 0C 30 03 03 02 C2 08 E7 01 90 0D 03 A0 00 0A 1D 02 79 AD 08 01 30 19 23 01 98 0C 44 03 9F 00 02 9C 
Received message is OK! Checksum is correct!  71080
     Receive PCM DATAstream
Send request PID_2101 to PCM  71420
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 98 0D 85 00 00 02 A6 00 00 0B 29 04 2C 00 00 03 1F 0B 40 03 9E 04 2D 03 20 EE 8F 00 00 00 00 0C 30 03 1A 02 D3 08 EB 01 8F 0D 03 A0 00 0A 1B 02 97 A9 08 01 30 19 23 01 99 0C 45 03 9F 00 02 E8 
Received message is OK! Checksum is correct!  71714
     Receive PCM DATAstream
Send request PID_2101 to PCM  72054
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 9A 0D 86 00 00 02 A4 00 00 0B 53 04 30 00 00 03 1F 0B 43 03 9E 04 2D 03 20 EE 9F 00 00 00 00 0C 32 03 17 02 D6 08 EB 01 8F 0D 03 A0 00 0A 24 02 9A A9 08 01 30 19 1C 01 99 0C 44 03 9F 00 02 30 
Received message is OK! Checksum is correct!  72267
     Receive PCM DATAstream
Send request PID_2101 to PCM  72607
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 9C 0D 86 00 00 02 A5 00 00 0B 14 04 2D 00 00 03 22 0B 3B 03 9F 04 2D 03 20 EE 65 00 00 00 00 0C 32 03 0F 02 CA 08 EA 01 8F 0D 03 A0 00 0A 24 02 7F AD 08 01 30 19 1D 01 98 0C 44 03 9F 00 02 87 
Received message is OK! Checksum is correct!  72822
     Receive PCM DATAstream
Send request PID_2101 to PCM  73162
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 99 0D 86 00 00 02 A5 00 00 0B 3A 04 2C 00 00 03 20 0B 37 03 9F 04 2D 03 20 EE 45 00 00 00 00 0C 30 02 8C 02 C4 08 E9 01 8F 0D 01 A0 00 0A 12 02 8E A9 08 01 30 19 1A 01 99 0C 44 03 9F 00 02 EB 
Received message is OK! Checksum is correct!  73374
     Receive PCM DATAstream
Send request PID_2101 to PCM  73714
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 99 0D 86 00 00 02 A6 00 00 0A FC 04 2D 00 00 03 20 0B 3E 03 9F 04 2D 03 20 EE 7F 00 00 00 00 0C 2E 02 96 02 CF 08 E8 01 90 0D 01 A0 00 0A 08 02 91 A9 08 01 30 19 1A 01 98 0C 44 03 9F 00 02 FA 
Received message is OK! Checksum is correct!  73929
     Receive PCM DATAstream
Send request PID_2101 to PCM  74269
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 98 0D 86 00 00 02 A2 00 00 0A F5 04 30 00 00 03 22 0B 32 03 9F 04 2D 03 20 EE 00 00 00 00 00 0C 30 02 EC 02 BC 08 E6 01 91 0D 01 A0 00 09 FD 02 49 A9 08 01 30 19 14 01 98 0C 44 03 9E 00 02 51 
Received message is OK! Checksum is correct!  74486
     Receive PCM DATAstream
Send request PID_2101 to PCM  74826
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 9B 0D 88 00 00 02 A3 00 00 0B 29 04 2E 00 00 03 22 0B 2F 03 9F 04 2C 03 20 EE 0B 00 00 00 00 0C 32 02 9D 02 B9 08 E6 01 91 0D 01 A0 00 09 F4 02 4F A9 08 01 30 19 11 01 98 0C 44 03 9E 00 02 3B 
Received message is OK! Checksum is correct!  75100
     Receive PCM DATAstream
Send request PID_2101 to PCM  75440
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 9B 0D 88 00 00 02 A3 00 00 0B 60 04 2D 00 00 03 21 0B 37 03 9F 04 2D 03 20 EE 45 00 00 00 00 0C 2E 02 AA 02 C6 08 E6 01 90 0D 01 A0 00 09 ED 02 64 A9 08 01 30 19 10 01 98 0C 44 03 9F 00 02 D6 
Received message is OK! Checksum is correct!  75652
     Receive PCM DATAstream
Send request PID_2101 to PCM  75992
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 95 0D 89 00 00 02 A3 00 00 0B 64 04 30 00 00 03 20 0B 35 03 9F 04 2D 03 20 EE 35 00 00 00 00 0C 2E 02 A9 02 C1 08 E6 01 90 0D 01 A0 00 09 ED 02 67 A9 08 01 30 19 08 01 98 0C 44 03 9E 00 02 B9 
Received message is OK! Checksum is correct!  76207
     Receive PCM DATAstream
Send request PID_2101 to PCM  76547
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 96 0D 88 00 00 02 A6 00 00 0B 41 04 2D 00 00 03 20 0B 36 03 9F 04 2D 03 20 EE 55 00 00 00 00 0C 32 02 B0 02 C7 08 E8 01 90 0D 01 A0 00 09 DB 02 79 A9 08 01 30 19 03 01 98 0C 44 03 9F 00 02 C6 
Received message is OK! Checksum is correct!  76760
     Receive PCM DATAstream
Send request PID_2101 to PCM  77100
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D5 01 96 0D 88 00 00 02 A5 00 00 0B 0D 04 2A 00 00 03 20 0B 37 03 9F 04 2D 03 20 EE 65 00 00 00 00 0C 2E 03 11 02 CA 08 E6 01 90 0D 01 A0 00 09 DA 02 7C A9 08 01 30 19 00 01 98 0C 44 03 9F 00 02 FF 
Received message is OK! Checksum is correct!  77314
     Receive PCM DATAstream
Send request PID_2101 to PCM  77654
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D5 01 9A 0D 89 00 00 02 A5 00 00 0B 1B 04 2D 00 00 03 20 0B 34 03 9F 04 2D 03 20 EE 50 00 00 00 00 0C 30 03 05 02 C6 08 E6 01 90 0D 01 A0 00 09 DF 02 76 A9 08 01 30 18 FD 01 99 0C 44 03 9F 00 02 EB 
Received message is OK! Checksum is correct!  77942
     Receive PCM DATAstream
Send request PID_2101 to PCM  78282
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D5 01 96 0D 89 00 00 02 A4 00 00 0B 56 04 2D 00 00 03 21 0B 38 03 9F 04 2D 03 20 EE 50 00 00 00 00 0C 32 03 05 02 C6 08 E7 01 90 0C FE A0 00 09 EC 02 97 AD 08 01 30 18 EF 01 98 0C 44 03 9F 00 02 48 
Received message is OK! Checksum is correct!  78500
     Receive PCM DATAstream
Send request PID_2101 to PCM  78840
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D5 01 94 0D 89 00 00 02 A5 00 00 0B 3A 04 30 00 00 03 21 0B 36 03 9E 04 2D 03 20 EE 3A 00 00 00 00 0C 30 03 02 02 C2 08 E6 01 90 0C FC A0 00 09 F5 02 6A A9 08 01 30 18 FF 01 98 0C 44 03 9E 00 02 F0 
Received message is OK! Checksum is correct!  79053
     Receive PCM DATAstream
Send request PID_2101 to PCM  79393
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D5 01 95 0D 89 00 00 02 A4 00 00 0A FC 04 30 00 00 03 20 0B 3B 03 9F 04 2D 03 20 EE 65 00 00 00 00 0C 2E 02 F8 02 CA 08 E5 01 90 0C FC A0 00 09 F1 02 64 A9 08 01 30 18 F7 01 98 0C 44 03 9E 00 02 C9 
Received message is OK! Checksum is correct!  79604
     Receive PCM DATAstream
Send request PID_2101 to PCM  79944
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D5 01 9C 0D 89 00 00 02 A4 00 00 0B 5A 04 32 00 00 03 20 0B 39 03 9F 04 2D 03 20 EE 55 00 00 00 00 0C 30 02 F4 02 C7 08 E6 01 8F 0C FC A0 00 09 FF 02 79 A9 08 01 30 18 F2 01 98 0C 44 03 9F 00 02 39 
Received message is OK! Checksum is correct!  80156
     Receive PCM DATAstream
Send request PID_2101 to PCM  80496
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D5 01 9E 0D 89 00 00 02 A3 00 00 0B 5A 04 30 00 00 03 20 0B 39 03 9F 04 2D 03 20 EE 55 00 00 00 00 0C 2E 02 F2 02 C7 08 E6 01 8F 0C FC A0 00 09 F7 02 79 AD 08 01 30 18 F3 01 98 0C 43 03 9F 00 02 30 
Received message is OK! Checksum is correct!  80711
     Receive PCM DATAstream
Send request PID_2101 to PCM  81051
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D5 01 99 0D 8B 00 00 02 A3 00 00 0B 26 04 30 00 00 03 20 0B 37 03 9F 04 2D 03 20 EE 45 00 00 00 00 0C 2D 02 AD 02 C4 08 E4 01 90 0C FC A0 00 09 E9 02 79 A9 08 01 30 18 E8 01 98 0C 44 03 9E 00 02 80 
Received message is OK! Checksum is correct!  81323
     Receive PCM DATAstream
Send request PID_2101 to PCM  81662
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D5 01 9D 0D 8B 00 00 02 A4 00 00 0B 34 04 30 00 00 03 1F 0B 3E 03 9E 04 2D 03 20 EE 7F 00 00 00 00 0C 30 02 B9 02 CF 08 E4 01 90 0C FC A0 00 09 E1 02 6A A9 08 01 30 18 EA 01 98 0C 44 03 9F 00 02 D8 
Received message is OK! Checksum is correct!  81878
     Receive PCM DATAstream
Send request PID_2101 to PCM  82217
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D5 01 98 0D 8B 00 00 02 A3 00 00 0B 45 04 30 00 00 03 20 0B 3C 03 9F 04 2D 03 20 EE 6F 00 00 00 00 0C 2D 02 B1 02 CC 08 E6 01 90 0C F9 A0 00 09 E2 02 88 AD 08 01 30 18 E2 01 97 0C 43 03 9F 00 02 DD 
Received message is OK! Checksum is correct!  82436
     Receive PCM DATAstream
Send request PID_2101 to PCM  82776
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D5 01 96 0D 89 00 00 02 A4 00 00 0B 6E 04 2D 00 00 03 20 0B 3F 03 9F 04 2D 03 20 EE 55 00 00 00 00 0C 2E 02 AB 02 C7 08 E6 01 90 0C F9 A0 00 09 DF 02 79 A9 08 01 30 18 E0 01 98 0C 44 03 9F 00 02 C9 
Received message is OK! Checksum is correct!  82989
     Receive PCM DATAstream
Send request PID_2101 to PCM  83329
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D5 01 9A 0D 8C 00 00 02 A5 00 00 0A EB 04 2C 00 00 03 1F 0B 45 03 9F 04 2D 03 20 EE B4 00 00 00 00 0C 2E 03 23 02 D9 08 E7 01 8F 0C F9 A0 00 09 CA 02 6D A9 08 01 30 18 DB 01 98 0C 44 03 9F 00 02 15 
Received message is OK! Checksum is correct!  83542
     Receive PCM DATAstream
Send request PID_2101 to PCM  83881
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D5 01 96 0D 8C 00 00 02 A7 00 00 0B 18 04 30 00 00 03 1F 0B 3D 03 9F 04 2D 03 20 EE 75 00 00 00 00 0C 30 03 17 02 CD 08 E6 01 90 0C F7 A0 00 09 CA 02 88 A9 08 01 30 18 E0 01 98 0C 44 03 9F 00 02 06 
Received message is OK! Checksum is correct!  84179
     Receive PCM DATAstream
Send request PID_2101 to PCM  84519
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D5 01 98 0D 8C 00 00 02 A5 00 00 0B 22 04 2D 00 00 03 1E 0B 3F 03 9E 04 2D 03 20 EE 84 00 00 00 00 0C 30 03 1C 02 D0 08 E7 01 8F 0C F7 A0 00 09 C3 02 5E A9 08 01 30 18 D9 01 97 0C 44 03 9F 00 02 EB 
Received message is OK! Checksum is correct!  84730
     Receive PCM DATAstream
Send request PID_2101 to PCM  85070
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D5 01 94 0D 8C 00 00 02 A5 00 00 0B 75 04 30 00 00 03 1F 0B 3E 03 9F 04 2D 03 20 EE 7F 00 00 00 00 0C 32 03 18 02 CF 08 E6 01 8F 0C F7 A0 00 09 D0 02 8E A9 08 01 30 18 DE 01 97 0C 44 03 9E 00 02 76 
Received message is OK! Checksum is correct!  85284
     Receive PCM DATAstream
Send request PID_2101 to PCM  85624
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 01 94 0D 8C 00 00 02 A5 00 00 0A E7 04 30 00 00 03 20 0B 39 03 9F 04 2D 03 20 EE 55 00 00 00 00 0C 2E 02 ED 02 D1 08 E6 01 8F 0C F7 A0 00 09 B2 02 94 A9 08 01 30 18 D6 01 98 0C 44 03 9E 00 02 6A 
Received message is OK! Checksum is correct!  85837
     Receive PCM DATAstream
Send request PID_2101 to PCM  86177
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D5 01 9A 0D 8E 00 00 02 A3 00 00 0B 14 04 30 00 00 03 1F 0B 3B 03 9F 04 2D 03 20 EE 65 00 00 00 00 0C 30 02 F3 02 CB 08 E6 01 90 0C F7 A0 00 09 B5 02 82 AD 08 01 30 18 CF 01 96 0C 44 03 9F 00 02 A1 
Received message is OK! Checksum is correct!  86388
     Receive PCM DATAstream
Send request PID_2101 to PCM  86728
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D5 01 99 0D 8C 00 00 02 A3 00 00 0B 6B 04 2D 00 00 03 20 0B 32 03 9F 04 2D 03 20 EE 20 00 00 00 00 0C 2E 02 EE 02 C3 08 E2 01 90 0C F4 A0 00 09 CE 02 6D A9 08 01 30 18 D0 01 96 0C 43 03 9E 00 02 8E 
Received message is OK! Checksum is correct!  86940
     Receive PCM DATAstream
Send request PID_2101 to PCM  87281
Send request PID_2101 to PCM  87881
Send request PID_2101 to PCM  88482
Send request PID_2101 to PCM  89083
Send request PID_2101 to PCM  89684
Send request PID_2101 to PCM  90347

1563 работает, не экране не отображается. заметил 6 запросов потом подвис и сново 6 запросов и подвис. отчет

Send request INIT to PCM  5053
Receive PCM: 83 F1 11 C1 6B 8F 40 
Received message is OK! Checksum is correct!  5166
   Initialization OK!!!!
Send request PID_2101 to PCM  5237
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 00 00 0D 74 00 00 02 74 00 00 00 00 04 33 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0C 26 00 00 00 00 08 C3 00 00 0D 10 A0 00 01 90 00 00 AD 08 01 20 00 00 01 89 0C 84 02 Message fail timeout    6074
Send request PID_2101 to PCM  6077
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 00 00 0D 74 00 00 02 74 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0C 26 00 00 00 00 08 C3 00 00 0D 10 A0 00 01 90 00 00 A9 08 01 20 00 00 01 89 0C 86 00 Message fail timeout    6896
Send request PID_2101 to PCM  6900
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 00 00 0D 74 00 00 02 74 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0C 26 00 00 00 00 08 C3 00 00 0D 10 A0 00 01 90 00 00 A9 08 01 20 00 00 01 89 0C 86 00 Message fail timeout    7713
Send request PID_2101 to PCM  7717
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D3 00 00 0D 74 00 00 02 74 00 00 00 00 04 36 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0C 26 00 00 00 00 08 C3 00 00 0D 10 A0 00 01 90 00 00 A9 08 01 20 00 00 01 89 0C 86 00 Message fail timeout    8539
Send request PID_2101 to PCM  8543
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 00 00 0D 74 00 00 02 74 00 00 00 00 04 3A 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0C 24 00 00 00 00 08 C3 00 00 0D 10 A0 00 01 90 00 00 A9 08 01 20 00 00 01 89 0C 9F Message fail timeout    9422
Send request PID_2101 to PCM  9425
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 00 00 0D 74 00 00 02 74 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0C 26 00 00 00 00 08 C3 00 00 0D 10 A0 00 01 90 00 00 A9 08 01 20 00 00 01 89 0C 86 46 Message fail timeout    10244
Send request INIT to PCM  14477
Send request INIT to PCM  17979
Receive PCM: 83 F1 11 C1 6B 8F 40 
Received message is OK! Checksum is correct!  18132
   Initialization OK!!!!
Send request PID_2101 to PCM  18204
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 00 00 0D 72 00 00 02 73 00 00 00 00 04 36 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0C 28 00 00 00 00 08 C4 00 00 0D 12 A0 00 01 90 00 00 A9 08 01 20 00 00 01 89 0C 89 9F Message fail timeout    19027
Send request PID_2101 to PCM  19031
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 00 00 0D 74 00 00 02 72 00 00 00 00 04 30 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0C 26 00 00 00 00 08 C4 00 00 0D 12 A0 00 01 90 00 00 A9 08 01 20 00 00 01 89 0C 89 03 Message fail timeout    19843
Send request PID_2101 to PCM  19846
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 00 00 0D 74 00 00 02 72 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0C 24 00 00 00 00 08 C4 00 00 0D 12 A0 00 01 90 00 00 A9 08 01 20 00 00 01 89 0C 03 Message fail timeout    20662
Send request PID_2101 to PCM  20666
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 00 00 0D 75 00 00 02 72 00 00 00 00 04 36 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0C 24 00 00 00 00 08 C4 00 00 0D 12 A0 00 01 90 00 00 A9 08 01 20 00 00 01 89 0C 87 9F Message fail timeout    21547
Send request PID_2101 to PCM  21550
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 00 00 0D 74 00 00 02 72 00 00 00 00 04 37 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0C 24 00 00 00 00 08 C4 00 00 0D 12 A0 00 01 90 00 00 A9 08 01 20 00 00 01 89 0C 89 02 Message fail timeout    22369
Send request PID_2101 to PCM  22373
Receive PCM: 80 F1 11 4C 61 01 01 16 35 AA 00 00 00 00 0D D1 00 00 0D 74 00 00 02 72 00 00 00 00 04 38 00 00 00 00 32 C8 03 9F 04 29 03 20 E5 62 00 00 00 00 0C 26 00 00 00 00 08 C4 00 00 0D 12 A0 00 01 90 00 00 A9 08 01 20 00 00 01 89 0C 89 03 Message fail timeout    23183
Send request INIT to PCM  27425

мой старый рабочий скетч

/////////////////////////////////////////////////////////////////////////////////////////
 //библиотеки
 ///////////////////////////////////////////////////////////////////////////////////////////
 #include <Adafruit_GFX.h>
 //#include <MCUFRIEND_kbv.h>
 #include <UTFTGLUE.h>//use GLUE class and constructor
 #include "TouchScreen.h"
 #include <stdint.h>
 #include <SPI.h>
 #include <EEPROM.h>
 MCUFRIEND_kbv tft;
 //#include "Fonts/Gobold_Bold14pt7b.h";
 
 #define MINPRESSURE 200
 #define MAXPRESSURE 1000
 
 //pin 20 SCL , 21 SDA датчик реального времени
 #include <Wire.h>
 #include "RTClib.h"
 RTC_DS3231 rtc;       
 
 //датчик наружней температуры
 #include <OneWire.h>
 #define ONE_WIRE_BUS 22   
 OneWire oneWire(ONE_WIRE_BUS);
 #include <DallasTemperature.h>
 DallasTemperature sensors(&oneWire);
 
 //датчик внутринней температуры и влаги
 #include "DHT.h"
 #define DHTPIN 26   
 #define DHTTYPE DHT22 
 DHT dht(DHTPIN, DHTTYPE);
 
 ///////////////////////////////////////////////////////////////////////////////////
 //пины экрана и тача
 ///////////////////////////////////////////////////////////////////////////////////
 UTFTGLUE myGLCD(0x1581,A2,A1,A3,A4,A0); //all dummy args
 
 const int XP = 6, XM = A2, YP = A1, YM = 7; 
 const int TS_LEFT = 136, TS_RT = 907, TS_TOP = 139, TS_BOT = 942;
 TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
 uint16_t ID;
 int x, y;
 char currentPage;
 float h;
 float t;
 bool Dvoet = 0;
 //////////////////////////////////////////////////////////////////////////////
 //все что касается OBD2
 ///////////////////////////////////////////////////////////////////////////////
 #include <SoftwareSerial.h>
 #define mySerial_gauge Serial2
 #define TX_gauge 16
 #define TX 13
 SoftwareSerial mySerial   (12, 13); //RХ,TХ
 
 int length5 = 5;
 int length6 = 6;
 int length8 = 8;
 int length7 = 7;

 bool Init = 0;
 bool InitGauge = 0;
 bool dataMessageOK=0;
 bool dataMessageEND = 0;
 bool MessageParse = 0;
 bool byte0 = 0;
 bool byte1 = 0;
 bool byte2 = 0; 
 
 int numberbyte = 0;
 int PIDTime = 120;       // задержка ожидания запроса следующего pid 2101, мс
 int PresTime = 8000;     // задержка между посылками запросов присутствия, мс 
 int waitbyte = 1;        // задержка между отправкой байт в сообщении, мс
 int waitbyte_gauge = 4;  
 int Datadelay = 50;      // задержка между отрисовкой данных на LCD, мс
 
 float L100M = 0;           //расход на 100 км измеренный за поездку
 float L100 = 0;            //мгновенный расход литров на 100км
 float LHor = 0;           //мгновенный расход топлива литров в час
 float L100SR = 0;         //расход литров на 100км измеренный раз в интервал kmL  
 float L100SR_TFT = 0;     // самый средний из расходов на 100км, он выводится на экран

 int L100_Eeprom[11]= {10,10,10,10,10,10,10,10,10,10,10};
 int FuelZamer[10]= {0};  // массив для измерения уровня (количества) топлива 
 int ZamerNumber = 0;     // номер замера уровня (количества) топлива 
 int n_eeprom = 0;        // текущий адрес ячейки еепром для записи расхода
 
 int MAF = 0;              //26,27 байты   Sensor de flujo de aire en masa
 float BoostPres = 0;      //28,29 байты   Presión de refuerzo
 int RPM = 0;              //32,33 байты   Velocidad del motor
 int EGRmg = 0;            //34,35 байты   Comando EGR (Comando de recirculación de gases de escape)
 float BoostPresCom = 0;   //38,39 байты   Comando de presión de refuerzo
 int Speed = 0;            //44,45 байты   Velocidad del vehículo
 float DesaInjQua = 0;     //50,51 байты   Cantidad de inyección deseada
 float InjQua = 0;         //52,53 байты   Cantidad de la inyección
 float StaDaliv = 0;       //54,55 байты   Inicio de la entrega
 int PumpRPM = 0;          //56,57 байты   Velocidad de la bomba
 float EGRPul = 0;         //62,63 байты   Relación de impulsos EGR (recirculación de gases de escape
 float SolenPul = 0;       //64,65 байты   Velocidad de solenoide de control de nivel de remolino Relación de impulsos
 float SolenPre = 0;       //70,71 байты   Relación de impulsos Presión Electroválvula de presión
 float DesInj = 0;         //72,73 байты   Inyección deseada Inicio
 float ActInj = 0;         //16,17 байты   Inicio de la inyección real
 int TempAir = 0;          //74,75 байты   Temperatura del aire de admisión
 int Temp = 0;             //14,15 байты   Temperatura del refrigerante
 int TempOil = 0;          //18,19 байты   Temperatura del aceite del motor
 int TempFuel = 0;         //58,59 байты   Temperatura del combustible
 
 //все что касается топлива
 float Fuel = 0;  //остаток топлива 
 float Fuel2 = 0;  //остаток мгновенного топлива байт 16 , датчика в баке
 int FuelIGN = 0;      // количество топлвива в баке на момент включения зажигания
 int Fuel_last = 0;   // для формул
 bool flagFuelIGN = 0; // флаг записан ли остаток топлива в момент вкл. зажигания 
 float FuelTrip = 0;     // количество литров топлива, израсходованное за один цикл включения зажигания
 
 //все что касается километража
 float kmAge = 0;             //пробег, полученный со щитка приборов
 int kmAgeIGN = 0;          //пробег который был в момент включения зажигания 
 int kmAge_last = 0;       // для формул
 bool flagkmAgeIGN = 0;     //флаг записан ли пробег в момент вкл. зажигания 
 float kmTrip = 0;            //пробег за один цикл включения зажигания
 int kmL = 10;               // интервал, через который будет происходить обновление среднего расхода на 100км
 int km = 0;              // переменная для расчетов
 int kmeeprom = 10;         // интервал, через который будет происходить подсчет среднеарифмитического расхода  L100SR_TFT
 int kmTFT =  0;     // переменная для расчетов периодического подсчета среднеарифмитического расхода топлива L100SR_TFT
 int kmREFUELING = 0;            // пробег до заправки на остатке топлива 
 
 int colerror = 0;           //количество ошибок в правом верхнем углу третьего экрана
 //float Barom = 0;          // барометр 
 
 byte MessageRx[110] = {0};  // массив байтов принимаемого сообщения
 byte MessageRxGauge[60] = {0};  // массив байтов принимаемого сообщения от щитка приборов
 
 byte messageInit[5] = {0x81, 0x11, 0xF1, 0x81, 0x04};    // запрос инициализации
 byte messagePresent[5] = {0x81,0x11,0xF1,0x3E,0xC1};      // запрос присутствия 
 byte messagePids[6] = {0x82,0x11,0xF1,0x21,0x01,0xA6};    // запрос пид 2101
 byte messageREAD[8] = {0x84,0x11,0xF1,0x18,0x00,0xFF,0x00,0x9D};    // запрос ошибок
 byte messageERASE[7] = {0x83,0x11,0xF1,0x14,0xFF,0x00,0x98};    // стирание ошибок

 unsigned long prevPID = 0;
 unsigned long prevPIDgauge = 0;
 unsigned long prevTemperature = 0;
 unsigned long prevpres = 0;
 unsigned long prevWatch = 0;
 unsigned long prevDvoet = 0;
 unsigned long prevData = 0;

 unsigned long TimewaitPID, timerwaitPID = 0;
 bool timerenabledPID = 0;
 #define TIMEREXPIRED_PID (TimewaitPID - timerwaitPID)> 200 // здесь задержка на ожидание правильного ответа пидов, мс

 unsigned long TimewaitInit, timerwaitInit = 0;
 bool timerenabledInit = 0;
 #define TIMEREXPIRED_Init (TimewaitInit - timerwaitInit)> 500 // здесь задержка на ожидание ответа об удачной инициализации, мс

 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 //SETUP
 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

   void setup() {
   uint16_t ID = myGLCD.readID();
    if (ID == 0xD3D3) ID = 0x9486; // write-only shield
    myGLCD.begin(ID);  
   
   Serial.begin(115200);
   mySerial.begin(10400);
   Wire.begin();
   rtc.begin();
   dht.begin();
   sensors.begin();
   myGLCD.InitLCD(3);
   myGLCD.clrScr();
   //myGLCD.setFont(&Gobold_Bold14pt7b); 
   
   //загрузка стартовой страницы
   currentPage = '0';       
   drawHomeScreen();  

   //подсчет среднеарифметического усредненного расхода
   for (int i = 0; i < 11; i++) L100_Eeprom [i]= EEPROM.read(i);
   for (int i = 0; i < 11; i++) L100SR_TFT = L100SR_TFT +  L100_Eeprom [i];
   L100SR_TFT = (float)L100SR_TFT/110.0;
   if (L100SR_TFT<0) L100SR_TFT = 0;
   if (L100SR_TFT>99) L100SR_TFT = 99;
   
   // строка ниже используется для настройки даты и времени часов 
   // раскоментировать, выставить времая и дату, залить в ардуино. в скетче закоментировать
   // обратно и залить еще раз, иначе каждый раз будет по новой выствлятся это же время и дата
   // (год, месяц, день, часы, минуты, секунды)
   //rtc.adjust(DateTime(2017, 7, 21, 13, 57, 0));

   Temperature ();
   pinMode(TX, OUTPUT);
   pinMode(TX_gauge, OUTPUT);
   fastinit();
 }

 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 //SETUP FIN
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 //LOOP
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  void loop() {
    
   TimewaitPID = millis ();
   TimewaitInit = millis ();
   
   if (!Init) { if (!timerenabledInit){ timerwaitInit=TimewaitInit; timerenabledInit=1; initialization(); }
   else if (TIMEREXPIRED_Init) timerenabledInit=0;}
  
   else { if (currentPage != '3'){ // если открыта страница 0,1 или 2 шлем запрос пид2101, если страница 3 -  шлем запрос присутствия 
   if (millis() - prevPID > PIDTime) { PIDs();  prevPID = millis(); }}
   else if (millis() - prevpres > PresTime) {present(); prevpres = millis();}}  
      
if (!InitGauge) {Serial.println ("Otpravil zapros adress Gauge");
    
   digitalWrite (TX_gauge, HIGH);  delay (500); 
   digitalWrite (TX_gauge, LOW);   delay (20);
   digitalWrite (TX_gauge, HIGH ); delay (15);
   digitalWrite (TX_gauge, LOW);   delay (5);
   digitalWrite (TX_gauge, HIGH);  delay (5);
   mySerial_gauge.begin(9600);}

   receive ();
   if (millis() - prevWatch > 3000)  { Watch (); prevWatch = millis(); Trip ();}
   if (millis() - prevTemperature > 60000)  { Temperature (); prevTemperature = millis();}
   if (millis() - prevDvoet > 500)  { if (!Dvoet) {myGLCD.print(":", 290, 5);} else {myGLCD.print(" ", 285, 0);} prevDvoet = millis(); Dvoet=!Dvoet;}
   Menu();
   LCDDataPrint();}

 /////////////////////////////////////////////////////////////////////////////////////////////////////////
 //BOID TRIP//////////////////////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////////////////////////////////
 void Trip () {
 
 if (flagkmAgeIGN){

 FuelTrip = FuelIGN - Fuel;                          
  if (kmAge>kmAgeIGN) kmTrip = kmAge - kmAgeIGN;
  if (kmAge<kmAgeIGN) kmTrip = 2000 - (kmAgeIGN - kmAge);  // 2000 это через сколько км у тебя суточный пробег сбрасывается на ноль, поменяй если другое число
  if (kmAge==kmAgeIGN) kmTrip = 0;
 
 //подсчет расхода на 100км за поездку
 L100M = ((float)FuelTrip*100.00)/(float)kmTrip;
  if (L100M<0) L100M = 0;
  if (L100M>99) L100M = 99;

 // ниже цикл считает среднеарифметический расход из еепром раз в пробег, указанный в переменной kmeeprom
  if (kmTrip-kmTFT>kmeeprom) {kmTFT = kmTrip; 

 // тут считаем среднеарифметический усредненного расход из ячеек еепром 
  for (int i = 0; i < 11; i++) L100_Eeprom [i]= EEPROM.read(i);
  for (int i = 0; i < 11; i++) L100SR_TFT = L100SR_TFT +  L100_Eeprom [i];
  L100SR_TFT = (float)L100SR_TFT/110.00;
  if (L100SR_TFT<0) L100SR_TFT = 0;
  if (L100SR_TFT>99) L100SR_TFT = 99;}
 
 // ниже цикл считает расход топлива за пробег, указанный в переменной kmL, здесь же запись в ячейки еепром 
  if (kmTrip-km>kmL) {km=kmTrip; 

 L100SR = ((float)(Fuel_last-Fuel)*100.00)/(float)kmL; // расход/100км  - обновляется раз в 10км, меняется км в int kmL = 10;
 Fuel_last = Fuel;      // сохранение параметров с последнего измерениея 
  if (L100SR<0) L100SR = 0;
  if (L100SR>99) L100SR = 99;

 //расчет остатка километров в баке
 if (L100SR>0) kmREFUELING=((float)Fuel*100.0)/(float)L100SR; //если средний расход больше нуля, то расчитывать км в баке из него
 else kmREFUELING=((float)Fuel*100.00)/(float)L100SR_TFT;    //если ноль или ментше то расчитывать км в баке с устредненного расхода

 // тут записываем  L100SR последовательно в одну из 11 ячеек еепром
 //EEPROM.write (12,n_eeprom);      // ЗДЕСЬ ВНИМАТЕЛЬНО. ЗАГРУЗИТЬ ПРОШИВКУ С ЭТОЙ СТРОКОЙ ОДИН РАЗ, ПОТОМ ЗАКОМЕНТИРОВАТЬ И ЕЩЁ РАЗ ЗАГРУЗИТЬ
 n_eeprom = EEPROM.read (12);    // в ячейке 12 хранится № текущей ячейки для записи расхода, чтобы где остановился при выкл питания, от туда и продолжил
 EEPROM.write(n_eeprom, L100SR*10); 
 n_eeprom++; if (n_eeprom>10) n_eeprom=0;
 EEPROM.write (12,n_eeprom); }}}
 
 /////////////////////////////////////////////////////////////////////////////////////////////////////////
 //BOID LCDDATAPRINT. прописываем данные и их расположение и цвет/////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////////////////////////////////
  void LCDDataPrint(){
   unsigned long curData = millis();  
     
  if (millis() - prevData > Datadelay){  
     myGLCD.setColor(255, 255, 255);      //цвет текста
     myGLCD.printNumI(Speed, 350, 7, 3);
  //----------------------------------------------------------
  //страниц HOME
  //----------------------------------------------------------
  if (currentPage == '0') {
     myGLCD.printNumF(LHor, 1, 60, 40, '.',5);
     myGLCD.printNumF(L100, 1, 210, 40,'.',5 );
     myGLCD.printNumF(L100M, 1, 60, 75,'.',5 );
     myGLCD.printNumF(L100SR_TFT, 1, 210, 75,'.',5 );
     myGLCD.printNumI(kmREFUELING, 60, 110,5 ); 
     //if (Fuel<53) 
     myGLCD.printNumF(Fuel, 1, 210, 110,'.',5);
     //else myGLCD.print("MAX", 210, 110); 
     myGLCD.printNumF(kmTrip, 1, 60, 145,'.',5);
     myGLCD.printNumF(FuelTrip, 1, 210, 145,'.',5);
     myGLCD.printNumI(PumpRPM, 210, 180,5);
     myGLCD.printNumI(RPM, 210, 215,5);
     myGLCD.printNumF(Fuel2, 1, 0, 215,'.',5);      
     myGLCD.printNumI(Temp, 415, 40, 3);
     myGLCD.printNumI(TempOil, 415, 75, 3);
     myGLCD.printNumI(TempFuel, 415, 110,3); 
     myGLCD.printNumI(sensors.getTempCByIndex(0), 415, 145 , 3);
     myGLCD.printNumI(t, 415, 180, 3);
     myGLCD.printNumI(TempAir, 415, 215, 3); }
   //----------------------------------------------------------
   //страниц INF1
   //----------------------------------------------------------
   if (currentPage == '1') {
     myGLCD.printNumF(StaDaliv,1, 360, 40,'.', 3);
     myGLCD.printNumF(DesInj,1, 395, 75, '.', 4);
     myGLCD.printNumF(ActInj,1, 395, 110,'.', 4); 
     myGLCD.printNumF(DesaInjQua,1, 395, 145,'.', 4);  
     myGLCD.printNumF(InjQua,1, 395, 180,'.', 4); 
     myGLCD.printNumI(MAF, 170, 215, 4);
     myGLCD.printNumF(h, 1, 418, 215); }
   //----------------------------------------------------------
   //страниц INF2
   //----------------------------------------------------------
   if (currentPage == '2') {    
     myGLCD.printNumF(BoostPres,1, 395, 40,'.', 4);  
     myGLCD.printNumF(BoostPresCom,1, 395, 75,'.', 4); 
     myGLCD.printNumI(EGRmg, 395, 110, 4);  
     myGLCD.printNumF(EGRPul,1, 410, 145,'.', 3);  
     myGLCD.printNumF(SolenPul, 1, 395, 180,'.', 4);  
     myGLCD.printNumF(SolenPre, 0, 410, 215,'.', 3); }
    prevData = millis(); }}
 
 ///////////////////////////////////////////////////////////////////////////
 //BOID PIDs//отправка запроса пид 2101/////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////
 void PIDs() {
   Serial.println ("Otpravil zapros 21 01");
   for (int i = 0; i < length6; i++) {
   mySerial.write(messagePids[i]);
   delay (waitbyte); }}

 ///////////////////////////////////////////////////////////////////////////
 //BOID PIDsGAUGR//отправка запроса на панель приборов//////////////////////
 ///////////////////////////////////////////////////////////////////////////
 void PIDsGauge() {
  Serial.println ("                Otpravil zapros 02 11 na panel");
  mySerial_gauge.write (0x02);    delay (1);
  mySerial_gauge.write (0x11);    delay (1);
  mySerial_gauge.write(byte(0));  delay (1);
  mySerial_gauge.write (0x13); }
 
 ///////////////////////////////////////////////////////////////////////////
 //BOID PIDsGAUGR//отправка запроса присутствия/////////////////////////////
 ///////////////////////////////////////////////////////////////////////////
 void present() {
  Serial.println ("Otpravil zapros Present");
   for (int i = 0; i < length5; i++) {
   mySerial.write(messagePresent[i]);
   delay (waitbyte); }}
 
 /////////////////////////////////////////////////////////////////////////////////////////////
 //получение данных от ЭБУ, разборка входящих сообщений
 /////////////////////////////////////////////////////////////////////////////////////////////
  void receive () {
  ///////////////////////////////////////////////////////////////////////
  ////////////////// работа с К-Line софт сериал 16-17 (12 контакт ОБД)
  ///////////////////////////////////////////////////////////////////////
  while(!InitGauge){
   if (mySerial_gauge.available()) {
   byte inByte = mySerial_gauge.read();
   Serial.print(" ");
   Serial.print(inByte,HEX);
  if (inByte==0x80) {mySerial_gauge.write (0x7F); delay (1);}
  if (inByte==0xF0) {
    mySerial_gauge.write (0x02);  delay (1);
    mySerial_gauge.write (0x11);  delay (1);
    mySerial_gauge.write (0x00);  delay (1);
    mySerial_gauge.write (0x13);  delay (1); InitGauge=1;  }}}
  
  MessageParse = 0;
  while (InitGauge && !MessageParse) {
   if (!dataMessageOK) {   
    if (mySerial_gauge.read() == 0x23) {byte0=1; delay (waitbyte_gauge); }    
    if (mySerial_gauge.read() == 0xA1 && byte0) {byte1=1; delay (waitbyte_gauge);}
    else byte0=0;
    if (mySerial_gauge.read() == 0x04 && byte0 && byte1) {byte2=1; delay (waitbyte_gauge);}
    else {byte0=0; byte1=0;}
    if (byte0 && byte1 && byte2) {dataMessageOK = 1; byte0=0; byte1=0; byte2=0;}
    numberbyte=0;}
    
else { if (mySerial_gauge.available()>0)  { MessageRxGauge[numberbyte] = mySerial_gauge.read(); numberbyte++; delayMicroseconds (250);}  
    if (numberbyte==34) {dataMessageEND = 1; dataMessageOK = 0; }}
     
  if (dataMessageEND) { 
   int crc =  ( ( unsigned int )MessageRxGauge[32] << 8 ) | MessageRxGauge[33]; // парсинг контрольной суммы из 2 последних байт 
   int CRC =200;
   for (int i = 0; i < 32; i++) CRC = CRC + MessageRxGauge[i];                 // подсчет контрольной суммы байт от 0 до 31

   Serial.print ("                         ReceiveGauge:   ");
   for (int i = 0; i < 34; i++) {
   Serial.print(MessageRxGauge[i],HEX); Serial.print (" ");}

  //при получении сообщения БЕЗ ошибок с данными от панели приборов, запишем в переменные остаток топлива и пробег
   if (CRC==crc) {Serial.println ("    OK!!!");
 
 Fuel2 = MessageRxGauge[16]/2.0; 
 if (!flagFuelIGN) {  Fuel = MessageRxGauge[16]/2.00;  kmREFUELING=((float)Fuel*100.00)/(float)L100SR_TFT;} //стартовая запись литров в баке для подсчета затраченных литро
 else Fuel = MessageRxGauge[17]/2.0; //для устреднения болтания в баке закоментировать эту строку, а раскоментировать ниже
 
 //для усреднения болтания топлива в баке, раскоментировать, высчитывает среднее
 /*else { FuelZamer[ZamerNumber] = MessageRxGauge[17]/2.00;
 if (ZamerNumber==9) {
 Fuel = 0 ;
 for (int i = 0; i < 10; i++) Fuel = Fuel + FuelZamer[i];
 Fuel = (float)Fuel/10.0;}
 ZamerNumber++; if (ZamerNumber>9) ZamerNumber = 0;}
*/

  kmAge = (MessageRxGauge[23]+(MessageRxGauge[24]*256))/10.0; //суточный пробег с панели приборов

  //бак у меня на 59 литров, а датчик показывает максимально 53 литра. для этого эта формула
  //если у вас тоже датчик имеет лимит то подправте 53 на свой лимит. 
  //если ваш датчик показывает одинаково с полным баком то закоментировать три нижние строки. 
  if (Fuel<53){
  if (!flagkmAgeIGN) { kmAgeIGN = kmAge; flagkmAgeIGN =1;}
  if (!flagFuelIGN) { FuelIGN = Fuel; Fuel_last = Fuel; flagFuelIGN = 1; }}}
   
  else Serial.println ("    ERROR!!!");   
  dataMessageEND = 0; MessageParse = 1; //mySerial_gauge.flush();
  for (int i = 0; i < 34; i++) MessageRxGauge[i]=0; }}  // очистка байтов массива 

   ////////////////////////////////////////////////////////////////////
   ////////////////// работа с К-Line софт сериал 12-13 (7 контакт ОБД)
   ////////////////////////////////////////////////////////////////////
   if (mySerial.available()) {
   delay(195);
   int k=0;
   byte inbyte=0;
    
   while( mySerial.available() && k < 110) {
   inbyte = mySerial.read();
   MessageRx[k] = inbyte;
   k++;   }
   
   Serial.print ("Receive:   ");
   for (int i = 0; i < k; i++) {
   Serial.print(MessageRx[i],HEX); Serial.print (" ");} 
   Serial.println ("");

  if (MessageRx[2]==0x83 && MessageRx[3]==0xF1 && MessageRx[4]==0x11 && MessageRx[5]==0xC1 && MessageRx[6]==0x6B && MessageRx[7]==0x8F && MessageRx[8]==0x40) {Init=1;
  timerenabledInit=0;  
  Serial.println ("     Initialization OK!!!!:  "); }

  if (currentPage == '3'){
    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //Чтение и стирание ошибок
    ///////////////////////////////////////////////////////////////////////////////////////////////////
  //при получении этого сообщения выдавать на третий экран "NO ERROR"
  if (MessageRx[4]==0x82 && MessageRx[5]==0xF1 && MessageRx[6]==0x11 && MessageRx[7]==0x58 && MessageRx[8]==0x00 && MessageRx[9]==0xDC){
    myGLCD.clrScr();             
    drawscreen_three();      
    myGLCD.print("NO DTC", 165, 145);
    Serial.println ("     NO DTC  "); }
    
  //при получении этого сообщения выдавать на третий экран "DTC BORRADO"
  if (MessageRx[3]==0x83 && MessageRx[4]==0xF1 && MessageRx[5]==0x11 && MessageRx[6]==0x54 && MessageRx[7]==0xFF && MessageRx[8]==0x00 && MessageRx[9]==0xD8){
    myGLCD.clrScr();             
    drawscreen_three();      
    myGLCD.print("DTC BORRADO", 165, 145);
    Serial.println ("     DTC BORRADO  "); }
   
  // при получении сообщения о наличии ошибок DTC разберем сообщение выведем на экран ошибки
  if (MessageRx[5]==0xF1 && MessageRx[6]==0x11 && MessageRx[7]==0x58 && MessageRx[8]>0){
     Serial.println ("DTC is found!");
     myGLCD.clrScr();             
     drawscreen_three();       

  for (int i=0; i<MessageRx[8]; i++ ) {
     int y = i*35;
     bool nolA=0; bool nolB =0;
  if (!bitRead(MessageRx[11+(i*3)],6) && bitRead(MessageRx[11+(i*3)],7)){ myGLCD.setColor (0,255,0);
     myGLCD.print(" -Passive-", 300, (75+y));} // если DTC пасивныый делаем цвет зеленый 
  if (bitRead(MessageRx[11+(i*3)],7) && bitRead(MessageRx[11+(i*3)],6)) {myGLCD.setColor (255,0,0);  
     myGLCD.print(" -Active-", 300, (75+y));} // если DTC активный, делаем цвет красный 
     myGLCD.print("ERROR ", 50, (75+y));
     myGLCD.printNumI((i+1), 150, (75+y));
     
  if (!bitRead(MessageRx[9+(i*3)],6) && !bitRead(MessageRx[9+(i*3)],7)) myGLCD.print(": P", 170, (75+y));
  if (bitRead(MessageRx[9+(i*3)],6) && !bitRead(MessageRx[9+(i*3)],7)) myGLCD.print(": C", 170, (75+y));
  if (!bitRead(MessageRx[9+(i*3)],6) && bitRead(MessageRx[9+(i*3)],7)) myGLCD.print(": B", 170, (75+y));
  if (bitRead(MessageRx[9+(i*3)],6) && bitRead(MessageRx[9+(i*3)],7)) myGLCD.print(": U", 170, (75+y));

  if (MessageRx[9+(i*3)]==0x00) {myGLCD.print("00", 230, (75+y)); nolA = 1;}
  if (MessageRx[9+(i*3)]<=0x0F&&MessageRx[9+(i*3)]!=0) {myGLCD.print("0", 230, (75+y)); nolA = 1;} 
  if (nolA)myGLCD.print(String (MessageRx[9+(i*3)],HEX), 246, (75+y)); 
  else myGLCD.print(String (MessageRx[9+(i*3)],HEX), 230, (75+y));

  if (MessageRx[10+(i*3)]==0x00) {myGLCD.print("00", 262, (75+y)); nolB = 1;}
  if (MessageRx[10+(i*3)]<=0x0F&&MessageRx[10+(i*3)]!=0) {myGLCD.print("0", 262, (75+y)); nolB = 1;}
  if (nolB)myGLCD.print(String (MessageRx[10+(i*3)]),HEX, 278, (75+y)); 
  else myGLCD.print(String (MessageRx[10+(i*3)],HEX), 262, (75+y));}}} 
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////
  //прописываем формулы к данным  ///////////////////////////////////////////////////////////////////////////
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////
  else if (MessageRx[3]==0x80 && MessageRx[4]==0xF1 && MessageRx[5]==0x11 && MessageRx[6]==0x4C && MessageRx[7]==0x61 && MessageRx[8]==0x01)    {
   //Barom = MessageRx[39];
   L100 = (float)LHor*100.0/(float)Speed;
   LHor = (float)RPM* (float)InjQua*2.00/1000.0*60.00/1000.0/0.85;
   MAF =  ((MessageRx[29]*256)+MessageRx[30])/10;
   BoostPres =  ((MessageRx[31]*256)+MessageRx[32])/1000.0;
   RPM =  (MessageRx[35]*256)+MessageRx[36];
   EGRmg =  ((MessageRx[37]*256)+MessageRx[38])/10.0;
   BoostPresCom =  ((MessageRx[41]*256)+MessageRx[42])/1000.0;
   Speed =  ((MessageRx[47]*256)+MessageRx[48])/100;
   DesaInjQua =  ((MessageRx[53]*256)+MessageRx[54])/100.0;
   InjQua =  ((MessageRx[55]*256)+MessageRx[56])/100.0;
   StaDaliv =  ((MessageRx[57]*256)+MessageRx[58])/100.0;
   PumpRPM =  (MessageRx[59]*256)+MessageRx[60];
   EGRPul =  ((MessageRx[65]*256)+MessageRx[66])/100.0;
   SolenPul =  ((MessageRx[67]*256)+MessageRx[68])/100.0;
   SolenPre =  ((MessageRx[73]*256)+MessageRx[74])/100.0;
   DesInj =  ((MessageRx[75]*3)+(MessageRx[76])/100.0)+0.3;
   ActInj =  ((MessageRx[19]*3)+(MessageRx[20])/100.0)+0.3;
   //TempAir =  ((MessageRx[77]*26)-278)+MessageRx[78]/10.0;
   //Temp =  ((MessageRx[17]*26)-278)+MessageRx[18]/10.0;
   //TempOil =  ((MessageRx[21]*26)-278)+MessageRx[22]/10.0;
   //TempFuel =  ((MessageRx[61]*26)-278)+MessageRx[62]/10.0;
   //ниже идут расчетные формулы более точные чем те что закоментированы выше
   int A = 0;
   if  (MessageRx[77]<=0x0A) A = 277;
   if  (MessageRx[77]==0x0B || MessageRx[77]==0x0C) A = 278;
   if  (MessageRx[77]>=0x0D) A = 279;
   double B = MessageRx[78]/10.0;
   double cel , drob ;
   drob = modf(B, &cel);
   if (drob>0.6) cel++;
     TempAir =  ((MessageRx[77]*26)-A)+cel;
   
   if  (MessageRx[17]<=0x0A) A = 277;
   if  (MessageRx[17]==0x0B || MessageRx[77]==0x0C) A = 278;
   if  (MessageRx[17]>=0x0D) A = 279;
   B = MessageRx[18]/10.0;
   drob = modf(B, &cel);
   if (drob>0.6) cel++;
     Temp =  ((MessageRx[17]*26)-A)+cel;


   if  (MessageRx[21]<=0x0A) A = 277;
   if  (MessageRx[21]==0x0B || MessageRx[77]==0x0C) A = 278;
   if  (MessageRx[21]>=0x0D) A = 279;
   B = MessageRx[22]/10.0;
   drob = modf(B, &cel);
   if (drob>0.6) cel++;
     TempOil =  ((MessageRx[21]*26)-A)+cel;


   if  (MessageRx[61]<=0x0A) A = 277;
   if  (MessageRx[61]==0x0B || MessageRx[77]==0x0C) A = 278;
   if  (MessageRx[61]>=0x0D) A = 279;
   B = MessageRx[62]/10.0;
   drob = modf(B, &cel);
   if (drob>0.6) cel++;
     TempFuel =  ((MessageRx[61]*26)-A)+cel;
     
   timerenabledPID=0; }
     for (int i = 0; i < 110; i++) MessageRx[i]=0; }} // очистка байтов массива

 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 //отправка запроса на диагностическое соединение
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 void initialization() {
   Serial.println ("Otpravil zapros Init");
   for (int i = 0; i < length5; i++) {
   mySerial.write(messageInit[i]);
   delay (5); } 
   delay (55); }

 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 //стартовая инициализация 7 пина ОБД
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 void fastinit() {
   digitalWrite (TX, HIGH);  // makes K-line high 3
   delay(360);             // wait for K-line to be clear 3
   digitalWrite (TX, LOW);  // makes K-line low  3
   delay(25);
   digitalWrite (TX, HIGH); // makes K-line high  3
   delay(25);               //last delay before first message
   mySerial.begin(10400); } // baud rate of the OBD

 ///////////////////////////////////////////////////////////////////////////////////////////////////////
 //запрос чтения и стирания ошибок
 ///////////////////////////////////////////////////////////////////////////////////////////////////////
 
 void Read() {
   Serial.println ("Zapros error;  ");
   for (int i = 0; i < length8; i++) {
   mySerial.write(messageREAD[i]);
   delay (waitbyte); }}
   
 void Erase() {
   Serial.println ("Zapros erase;  ");
   for (int i = 0; i < length7; i++) {
   mySerial.write(messageERASE[i]);
   delay (waitbyte); }}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
 //прорисовка тач кнопок
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 void Menu () {
     
    if (currentPage == '0') {
     TouchHOME();
     TouchINF1();
     TouchINF2();
     TouchCHECK(); }
    if (currentPage == '1') { 
     TouchHOME();
     TouchINF2();
     TouchCHECK(); }
    if (currentPage == '2') { 
     TouchHOME();
     TouchINF1();
     TouchCHECK(); }
    if (currentPage == '3') { 
     TouchHOME();
     TouchREAD();
     TouchERASE(); }}   
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 //прописывает заголовки и кнопки на страницах
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  void drawHomeScreen() {
    line() ;
    Watch ();
    myGLCD.setColor(255, 0, 0); // цвет линии и текста красный
    myGLCD.drawLine(295,35,295,248); // линия вертикальная
    myGLCD.drawLine(145,35,145,178); // линия вертикальная
    myGLCD.drawLine(80,178,80,247); // линия вертикальная
    myGLCD.print("L/H", 10, 40);
    myGLCD.print("L/A", 148, 40);
    myGLCD.print("L/V", 10, 75);
    myGLCD.print("L/M", 148, 75);
    myGLCD.print("D/K", 10, 110);
    myGLCD.print("D/L", 148, 110);
    myGLCD.print("V/K", 10, 145);
    myGLCD.print("V/L", 148, 145);
    myGLCD.print("PUMP RPM", 82, 180);
    myGLCD.print("ENGI   RPM", 82, 215);
    myGLCD.print("D/La", 10, 180);
    myGLCD.print("Motor C", 300, 40);
    myGLCD.print("OIL       C", 300, 75);
    myGLCD.print("FUEL    C", 300, 110);
    myGLCD.print("DENTR  C", 300, 145);
    myGLCD.print("FUERA  C", 300, 180);
    myGLCD.print("INTAIR C", 300, 215); 
    myGLCD.drawRoundRect (15, 255, 145, 310);
    myGLCD.print("INF 1", 55, 270);
    myGLCD.drawRoundRect (175, 255, 305, 310);
    myGLCD.print("INF 2", 215, 270);
    myGLCD.drawRoundRect (335, 255, 465, 310);
    myGLCD.print("CHECK", 365, 270);
    myGLCD.drawRoundRect (1, 1, 77, 37);
    myGLCD.print("HOME", 10, 7);
    myGLCD.print("Km/h", 410, 7);
  }
 //-------------------------------------------------
   void drawscreen_one() {
    line() ;
    Watch ();
    myGLCD.setColor(255, 0, 0); // цвет линии и текста красный
    myGLCD.print("Start of Delivery   *CA:", 10, 40);
    myGLCD.print("Desir inject Start  *CA:", 10, 75);
    myGLCD.print("Actua Inject Start *CA:", 10, 110);
    myGLCD.print("Desir Inject Quan  mg/s:", 10, 145);
    myGLCD.print("Actu Inject Quant mg/s:", 10, 180);
    myGLCD.print("MAF  mg/s:", 10, 215);
    myGLCD.print("Humedad %:", 255, 215);
    myGLCD.drawRoundRect (175, 255, 305, 310);
    myGLCD.print("INF 2", 215, 270);
    myGLCD.drawRoundRect (335, 255, 465, 310);
    myGLCD.print("CHECK", 365, 270);
    myGLCD.drawRoundRect (1, 1, 77, 37);
    myGLCD.print("HOME", 10, 7);
    myGLCD.print("Km/h", 410, 7);
    }
 //-------------------------------------------------
  void drawscreen_two() {
    line() ;
    Watch ();
    myGLCD.setColor(255, 0, 0); // цвет линии и текста красный
    myGLCD.print("Boost Press          Bar:", 10, 40);
    myGLCD.print("Boost Press Com  Bar:", 10, 75);
    myGLCD.print("EGR command     mg/s:", 10, 110);
    myGLCD.print("EGR Pulse Ratio      %:", 10, 145);
    myGLCD.print("Solenoide Pulse      %:", 10, 180);
    myGLCD.print("Solenoide Boost      %:", 10, 215);
    myGLCD.drawRoundRect (15, 255, 145, 310);
    myGLCD.print("INF 1", 55, 270);
    myGLCD.drawRoundRect (335, 255, 465, 310);
    myGLCD.print("CHECK", 365, 270);
    myGLCD.drawRoundRect (1, 1, 77, 37);
    myGLCD.print("HOME", 10, 7);
    myGLCD.print("Km/h", 410, 7);
    }
 //----------------------------------------------------------------------------
  void drawscreen_three() {
    Watch ();
    myGLCD.setColor(255, 0, 0); // цвет линии красный
    myGLCD.drawLine(1,35,479,35); // линия горизонтальная
    myGLCD.drawLine(1,248,479,248); // линия горизонтальная
    myGLCD.drawRoundRect (15, 255, 145, 310);
    myGLCD.print("ERASE", 55, 270);
    myGLCD.drawRoundRect (335, 255, 465, 310);
    myGLCD.print("READ", 365, 270);
    myGLCD.drawRoundRect (1, 1, 77, 37);
    myGLCD.print("HOME", 10, 5);
    myGLCD.print("Km/h", 410, 3);
   }

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//кнопки тач . координаты и переходы
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void TouchHOME(){
TSPoint p = ts.getPoint();
    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);
if (p.z > 10 && p.z < 1000)
    {if (p.x > 140 && p.x < 320 && p.y > 140 && p.y < 260 && p.z > MINPRESSURE && p.z < MAXPRESSURE)
      { myGLCD.drawRoundRect (1, 1, 77, 37);
        currentPage = '0';           
        myGLCD.clrScr();             
        drawHomeScreen();
        x = 0;
        y = 0;
        p.z = 0;}}}

void TouchINF1(){
TSPoint p = ts.getPoint();
    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);
if (p.z > 10 && p.z < 1000)
    {
      if (p.x > 150 && p.x < 450 && p.y > 770 && p.y < 890 && p.z > MINPRESSURE && p.z < MAXPRESSURE)
      { myGLCD.drawRoundRect (15, 255, 145, 310);
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();
        x = 0;
        y = 0;
        p.z = 0;}}}
    
void TouchINF2(){
TSPoint p = ts.getPoint();
    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);
if (p.z > 10 && p.z < 1000)
    {
    if (p.x > 450 && p.x < 680 && p.y > 770 && p.y < 890 && p.z > MINPRESSURE && p.z < MAXPRESSURE)
      { myGLCD.drawRoundRect (175, 255, 305, 310);
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();
        x = 0;
        y = 0;
        p.z = 0;}}}

void TouchCHECK(){
TSPoint p = ts.getPoint();
    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);
if (p.z > 10 && p.z < 1000)
    {
if (p.x > 690 && p.x < 950 && p.y > 770 && p.y < 890 && p.z > MINPRESSURE && p.z < MAXPRESSURE)
      { myGLCD.drawRoundRect (335, 255, 465, 310);
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();
        x = 0;
        y = 0;
        p.z = 0;}}}

void TouchREAD(){
TSPoint p = ts.getPoint();
    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);
if (p.z > 10 && p.z < 1000)
    {
if (p.x > 690 && p.x < 950 && p.y > 770 && p.y < 890 && p.z > MINPRESSURE && p.z < MAXPRESSURE)
      { myGLCD.drawRoundRect (335, 255, 465, 310);
        Read();
        x = 0;
        y = 0;
        p.z = 0;}}}

void TouchERASE(){
TSPoint p = ts.getPoint();
    pinMode(XM, OUTPUT);
    pinMode(YP, OUTPUT);
if (p.z > 10 && p.z < 1000)
    {
if (p.x > 150 && p.x < 450 && p.y > 770 && p.y < 890 && p.z > MINPRESSURE && p.z < MAXPRESSURE)
      { myGLCD.drawRoundRect (15, 255, 145, 310);
        Erase();
        x = 0;
        y = 0;
        p.z = 0;}}}
 ////////////////////////////////////////////////////////////////////////////////////////
 //прорисовка линий
 ///////////////////////////////////////////////////////////////////////////////////////
 void line() {
    myGLCD.setColor(255, 0, 0); // цвет линии красный
    myGLCD.drawLine(1,35,479,35); // линия горизонтальная
    myGLCD.drawLine(1,73,479,73); // линия горизонтальная
    myGLCD.drawLine(1,108,479,108); // линия горизонтальная
    myGLCD.drawLine(1,143,479,143); // линия горизонтальная
    myGLCD.drawLine(1,178,479,178); // линия горизонтальная
    myGLCD.drawLine(1,212,479,212); // линия горизонтальная
    myGLCD.drawLine(1,248,479,248); }// линия горизонтальная


 /////////////////////////////////////////////////////////////////////////////////////////////
 //верхняя часть экрана часы и дата отображается на всех экранах
 /////////////////////////////////////////////////////////////////////////////////////////////
 void Watch (){
   DateTime now = rtc.now();
   int m = now.minute(); 
   int hour = now.hour();
   int mon = now.month();
   int date = now.day();
 
   myGLCD.setColor(255, 255, 255); //белый цвет цифры
 
   if (date<10) { 
   myGLCD.print("0", 85, 7); 
   myGLCD.printNumI(now.day(), 100, 7); } 
   else if (date >=10) {
   myGLCD.printNumI(now.day(), 85, 7); }
   myGLCD.print("/", 115, 7);
   if ( mon<10) {
   myGLCD.print("0", 130, 7); 
   myGLCD.printNumI(now.month(), 145, 7);} 
   else if (mon >=10) {
   myGLCD.printNumI(now.month(), 130, 7);}  
   myGLCD.print("/", 160, 7);
   myGLCD.printNumI(now.year(), 175, 7);
   if (hour<10) {
   myGLCD.print("0",255, 7); 
   myGLCD.printNumI(now.hour(), 270, 7); } 
   else if(hour>=10){ 
   myGLCD.printNumI(now.hour(), 255, 7); } 
   if (m<10) {
   myGLCD.print("0",300, 7); 
   myGLCD.printNumI(now.minute(), 315, 7); } 
   else if (m>=10){ 
   myGLCD.printNumI(now.minute(), 300, 7); }
    }

 void Temperature (){
   h = dht.readHumidity();
   t = dht.readTemperature();
   sensors.requestTemperatures(); 
   }

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

У меня 32U4 на 16 МГц по 10 раз в секунду успевает принять ~100 байт от GPS и полностью обновить картинку на OLED 128х64 по I2C. Так что два камня для Вашего проекта это много.

Из Вашего лога вижу что принято то 76, то 77, то 78 байт - теряется всего от 5 до 3 байт. Это прямая логика Вам подсказывает, что Вы опустошаете буфер в лупе. А если какая то библа забирает время по прерыванию ??? Запретить прерывания полностью, то же нельзя, т.к. Softserial сам на прерывании ловит байты. Вообщем я бы проверил идею с размером буфера - делов то на пару минут.