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

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

пока так попробуй 

   #include <UTouch.h>
  #include <UTFT.h>
  #include <SPI.h>
  
  //pin 20 SCL , 21 SDA датчик реального времени
  #include <Wire.h>
  #include "RTClib.h"
  RTC_DS3231 rtc;       
  
  //датчик наружней температуры
  #include <OneWire.h>
  #define ONE_WIRE_BUS 8   
  OneWire oneWire(ONE_WIRE_BUS);
  #include <DallasTemperature.h>
  DallasTemperature sensors(&oneWire);
  
  //датчик внутринней температуры и влаги
  #include "DHT.h"
  #define DHTPIN 9   
  #define DHTTYPE DHT22 
  DHT dht(DHTPIN, DHTTYPE);
  
  //пины экрана и тача
  UTFT    myGLCD(31,38,39,40,41); 
  UTouch  myTouch(6,5,4,3,2);
 
  //шрифты + не стандартный шрифт GroteskBold16x32.с
  extern uint8_t SmallFont[];
  extern uint8_t BigFont[];
  extern uint8_t SevenSegNumFont[];
  extern uint8_t GroteskBold16x32[];
 
  int x, y;
  char currentPage, selectedUnit;

  float h;
  float t;

  unsigned long prevWatch = 0;
  unsigned long prevDvoet = 0;
  unsigned long prevData = 0;
  bool Dvoet = 0;

  //////////////////////////////////////////////////////////////////////////////
  //все что касается OBD2
  #include <SoftwareSerial.h>
  SoftwareSerial mySerial(10, 11); //RХ,TХ
  #define TX 11

  int length5 = 5;
  int length6 = 6;

  int pid = 1; // очередность пида
  bool Init = 0;

  int PIDTime = 150;    // задержка между посылками запросов пидов, мс
  int PresTime = 9000;    // задержка между посылками запросов присутствия, мс 
  int waitbyte = 1;       // задержка между отправкой байт в сообщении, мс
   
  int MAF = 0;           //26,27 байты
  int BoostPres = 0;     //28,29 байты
  int RPM = 0;           //32,33 байты
  int EGRmg = 0;         //34,35 байты
  int BoostPresCom = 0;  //38,39 байты
  int Speed = 0;        //44,45 байты
  float DesaInjQua = 0.00;   //50,51 байты
  float InjQua = 0.00;    //52,53 байты
  int StaDaliv = 0;  //54,55 байты
  int PumpRPM = 0;   //56,57 байты
  int EGRPul = 0;    //62,63 байты
  int SolenPul = 0;  //64,65 байты
  int SolenPre = 0;  //70,71 байты
  float DesInj = 0.00;    //72,73 байты 
  float ActInj = 0.00;    //16,17 байты
  int TempAir = 0;   //74,75 байты
  int Temp = 0;      //14,15 байты
  int TempOil = 0;   //18,19 байты
  int TempFuel = 0;   //58,59 байты


  // массив байтов принимаемого сообщения
  byte MessageRx[110] = {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};    // запрос температуры 1
  
  unsigned long prevPID = 0;
  unsigned long prevpres = 0;


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

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

  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  void setup() {
    myGLCD.InitLCD();
    myGLCD.clrScr();
    myTouch.InitTouch();
    myTouch.setPrecision(PREC_MEDIUM);
 
    drawHomeScreen();  
    currentPage = '0'; 
    selectedUnit = '0'; 
  
    Wire.begin();
    rtc.begin();
    dht.begin();
    sensors.begin();
    // строка ниже используется для настройки даты и времени часов (год, месяц, день, часы, минуты, секунды)
    rtc.adjust(DateTime(2017, 7, 6, 17, 35, 0));
    Watch_Temperature ();
    
    pinMode(TX, OUTPUT);
    fastinit();
  }

  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  void loop() {
    

    unsigned long curPID = millis ();
    unsigned long curpres = millis ();
    TimewaitPID = millis ();
    TimewaitInit = millis ();

    if (!Init) {if (!timerenabledInit){ timerwaitInit=TimewaitInit; timerenabledInit=1; initialization(); }
    else {if (TIMEREXPIRED_Init) {timerenabledInit=0;}}}
    else {
      if (curpres - prevpres > PresTime) {present(); prevpres = curpres;}
      if (!timerenabledPID){if (curPID - prevPID > PIDTime) {PIDs(); timerwaitPID=TimewaitPID; timerenabledPID=1; prevPID = curPID;}}
      if (timerenabledPID) {if (TIMEREXPIRED_PID) {timerenabledPID=0;}}
      }
  
    receive ();
    
    unsigned long curWatch = millis();  
    unsigned long curDvoet = millis();  
    unsigned long curData = millis();  

    if (curWatch - prevWatch > 10000)  { Watch_Temperature (); prevWatch = curWatch;}
    if (curDvoet - prevDvoet > 500)  { if (!Dvoet) {myGLCD.print(":", 285, 0);} else {myGLCD.print(" ", 285, 0);} prevDvoet = curDvoet; Dvoet=!Dvoet;}
   Menu();
   //---------------------------------------------------------
   //прописываем где и что мы хотим видеть (пиды)
     if (currentPage == '0') {if (curWatch - prevWatch > 200){
       
       myGLCD.setColor(0, 255, 0);
       
       if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
       if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
       myGLCD.printNumI(Speed, 350, 0);
      
      myGLCD.setColor(255, 255, 255); 
      
      //if (--<10) {myGLCD.print("  ", 166, 40); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 40); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 40);
      
      //if (--<10) {myGLCD.print("  ", 166, 75); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 75); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 75);
      
      //if (--<10) {myGLCD.print("  ", 166, 110); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 110); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 110);

      //if (--<10) {myGLCD.print("  ", 166, 145); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 145); }; //затирает третюю цифру
      myGLCD.printNumI(h, 165, 145);

      
      //if (MAF<10) {myGLCD.print("  ", 166, 180); }; //затираем вторую цифру и третью
      if (PumpRPM>10) {myGLCD.print(" ", 198, 180); }; //затираем четвертую цифру
      myGLCD.printNumI(PumpRPM, 165, 180);
        
      if (RPM>100) {myGLCD.print(" ", 198, 215);};   //затираем четвертую цифру
      myGLCD.printNumI(RPM, 165, 215);
      
      //-------------------------------------------
      if (Temp<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      if (Temp>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumI(Temp, 410, 40);
      
      if (TempOil<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (TempOil>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(TempOil, 410, 75);
      
      if (TempFuel<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      if (TempFuel>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(TempFuel, 410, 110);
  
      myGLCD.printNumI(sensors.getTempCByIndex(0), 410, 145);
      
      myGLCD.printNumI(t, 410, 180);
      
      if (TempAir<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (TempAir>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(TempAir, 410, 215);
     
     prevData = curData;   
    }
   }
   //----------------------------------------------------------
      if (currentPage == '1') {if (curWatch - prevWatch > 200){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
      if (StaDaliv<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      if (StaDaliv>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumI(StaDaliv, 395, 40);
      
      if (DesInj<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (DesInj>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(DesInj, 395, 75);
      
      if (ActInj<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      if (ActInj>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(ActInj, 395, 110);
      
      if (DesaInjQua<10) {myGLCD.print("  ", 411, 145); }; //затираем вторую цифру и третью
      if (DesaInjQua>10) {myGLCD.print(" ", 427, 145); }; //затирает третюю цифру  
      myGLCD.printNumI(DesaInjQua, 395, 145);
      
      if (InjQua<10) {myGLCD.print("  ", 411, 180); }; //затираем вторую цифру и третью
      if (InjQua>10) {myGLCD.print(" ", 427, 180); }; //затирает третюю цифру  
      myGLCD.printNumI(InjQua, 395, 180);
      
      if (TempAir<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (TempAir>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(TempAir, 395, 215);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      if (currentPage == '2') {
        if (curWatch - prevWatch > 200){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
        if (BoostPres<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      if (BoostPres>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumI(BoostPres, 395, 40);
      
      if (BoostPresCom<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (BoostPresCom>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(BoostPresCom, 395, 75);
      
      if (EGRmg<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      if (EGRmg>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(EGRmg, 395, 110);
      
      if (EGRPul<10) {myGLCD.print("  ", 411, 145); }; //затираем вторую цифру и третью
      if (EGRPul>10) {myGLCD.print(" ", 427, 145); }; //затирает третюю цифру  
      myGLCD.printNumI(DesaInjQua, 395, 145);
      
      if (SolenPul<10) {myGLCD.print("  ", 411, 180); }; //затираем вторую цифру и третью
      if (SolenPul>10) {myGLCD.print(" ", 427, 180); }; //затирает третюю цифру  
      myGLCD.printNumI(SolenPul, 395, 180);
      
      if (SolenPre<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (SolenPre>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(SolenPre, 395, 215);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      if (currentPage == '3') {if (curWatch - prevWatch > 200){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
       myGLCD.setColor(255, 255, 255);
        
        prevData = curData;
      }
    }
  }

  ///////////////////////////////////////////////////////////////////////////
  
  //отправка запросов пидов
  void PIDs() {

    if (pid==1){
    for (int i = 0; i < length6; i++) {
    mySerial.write(messagePids[i]);
    delay (waitbyte); } 
   }
}
  void present() {
    for (int i = 0; i < length5; i++) {
    mySerial.write(messagePresent[i]);
    delay (waitbyte); }
   }


/////////////////////////////////////////////////////////////////////////////////////////////
//получение данных из конкретных ответо, конкретные байты
    void receive () {
     if (mySerial.available()) {
     delay(51);
     int k=0;
     byte inbyte=0;
     
     while( mySerial.available() && k < 110) {
     inbyte = mySerial.read();
     MessageRx[k] = inbyte;
     k++;   }
     
     for (int i = 0; i < 110; i++) {
     }

   if (MessageRx[2]==0x83 && MessageRx[3]==0xF1 && MessageRx[4]==0x11 && MessageRx[5]==0xC1 && MessageRx[6]==0x6B && MessageRx[7]==0x8F) {Init=1;
   timerenabledInit=0;  
   }

   if (MessageRx[0]==0x80 && MessageRx[1]==0xF1 && MessageRx[2]==0x11 && MessageRx[3]==0x4C && MessageRx[4]==0x61 && MessageRx[5]==0x01)    {
    
   MAF =  ((messagePids[26]*256)+messagePids[27])/10;
    BoostPres =  ((messagePids[28]*256)+messagePids[29])/1000;
    RPM =  (messagePids[32]*256)+messagePids[33];
    EGRmg =  ((messagePids[34]*256)+messagePids[35])/10;
    BoostPresCom =  ((messagePids[38]*256)+messagePids[39])/1000;
    Speed =  (messagePids[44]*256)+messagePids[45];
    DesaInjQua =  ((messagePids[50]*256)+messagePids[51])/100.00;
    InjQua =  ((messagePids[52]*256)+messagePids[53])/100.00;
    StaDaliv =  ((messagePids[54]*256)+messagePids[55])/100;
    PumpRPM =  (messagePids[56]*256)+messagePids[57];
    EGRPul =  ((messagePids[62]*256)+messagePids[63])/100;
    SolenPul =  ((messagePids[64]*256)+messagePids[65])/100;
    SolenPre =  ((messagePids[70]*256)+messagePids[71])/100;
    DesInj =  ((messagePids[72]*3)+(messagePids[73])/100.00)+0.3;
    ActInj =  ((messagePids[16]*3)+(messagePids[17])/100.00)+0.3;
    TempAir =  ((messagePids[74]*26)-278)+messagePids[75]/10;
    Temp =  ((messagePids[14]*26)-278)+messagePids[15]/10;
    TempOil =  ((messagePids[18]*26)-278)+messagePids[19]/10;
    TempFuel =  ((messagePids[58]*26)-278)+messagePids[59]/10;
    
   }
   



   
   
   for (int i = 0; i < 110; i++) MessageRx[i]=0;
     }
   }

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

  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //стартовая инициализация
  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 Menu () {
      //Page 0 (home)
      if (currentPage == '0') { 
      if (myTouch.dataAvailable()) {
         myTouch.read();
         x=myTouch.getX(); 
         y=myTouch.getY();
      
      // Button home
      if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }
       
     // Button INF1
     if ((x>=10) && (x<=120) && (y>=275) && (y<=310)) {
        drawFrame(10, 275, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();       
        Watch_Temperature ();
      } 
      
     // Button INF2
     if ((x>=180) && (x<=300) && (y>=275) && (y<=310)) {
        drawFrame(180, 275, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=275) && (y<=310)) {
        drawFrame(350, 275, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();   
        Watch_Temperature ();                                                                   
      } 
     }
    }
   
  //----------------------------------------------------------------------------------------------------------------------------------
    //Page 1
    if (currentPage == '1') { 
      if (myTouch.dataAvailable()) {
         myTouch.read();
         x=myTouch.getX(); 
         y=myTouch.getY();
      
    // Button home
    if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }
       
    // Button INF2
    if ((x>=180) && (x<=300) && (y>=275) && (y<=310)) {
        drawFrame(180, 275, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=275) && (y<=310)) {
        drawFrame(350, 275, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();   
        Watch_Temperature ();                                                                   
      } 
     }
    }
   

  //---------------------------------------------------------------------------------------------------
    //Page 2
    if (currentPage == '2') { 
      if (myTouch.dataAvailable()) {
         myTouch.read();
         x=myTouch.getX(); 
         y=myTouch.getY();
      
    // Button home
    if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }
      
    // Button INF1
    if ((x>=10) && (x<=120) && (y>=275) && (y<=310)) {
        drawFrame(10, 275, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=275) && (y<=310)) {
        drawFrame(350, 275, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();  
        Watch_Temperature ();                                                                    
      } 
    }
  }
  //----------------------------------------------------------
    //Page 3
    if (currentPage == '3') { 
       if (myTouch.dataAvailable()) {
       myTouch.read();
       x=myTouch.getX(); 
       y=myTouch.getY();
      
    //Button ERASE
    //if ((x>=180) && (x<=300) && (y>=275) && (y<=310)) {
        //drawFrame(180, 275, 300, 310); 
        //currentPage = '3';  //потом заменить на дейсвие         
        //myGLCD.clrScr();             
        //drawscreen_three();   //потом заменить на дейсвие                                                                   
      //} 
  
    // Button home
    if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }    
     }
    }
  }
  
  //--------------------------------------------------------
  //прописывает заголовки на всех страницах
   void drawHomeScreen() {
     line() ;
     vista();
     myGLCD.drawLine(239,35,239,248); // линия вертикальная
     myGLCD.print("Ltr/Hor :", 10, 40);
     myGLCD.print("Ltr/100 :", 10, 75);
     myGLCD.print("Fuel  L :", 10, 110);
     myGLCD.print("Humed  %:", 10, 145);
     myGLCD.print("PUMP RPM:", 10, 180);
     myGLCD.print("Engi RPM:", 10, 215);
     myGLCD.print("Motor *C:", 255, 40);
     myGLCD.print("Oil   *C:", 255, 75);
     myGLCD.print("Fuel  *C:", 255, 110);
     myGLCD.print("Inter *C:", 255, 145);
     myGLCD.print("Exter *C:", 255, 180);
     myGLCD.print("IntAir*C:", 255, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonINF2() ;
     buttonCHECK() ;
   }
  //-------------------------------------------------
    void drawscreen_one() {
     line() ;
     vista();
     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("Mass Air Flow     mg/s:", 10, 215);
 
  
     buttonHome() ;
     buttonINF2() ;
     buttonCHECK() ;
     }
  //-------------------------------------------------
   void drawscreen_two() {
     line() ;
     vista();
     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);
  
     buttonHome() ;
     buttonINF1() ;
     buttonCHECK() ;
   }
  //----------------------------------------------------------------------------
   void drawscreen_three() {
     vista();
     myGLCD.setColor(255, 0, 0); // цвет линии красный
     myGLCD.drawLine(1,35,479,35); // линия горизонтальная
     myGLCD.drawLine(1,248,479,248); // линия горизонтальная
     
     buttonHome();
  
     //Button - ERASE
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (180, 275, 300, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (180, 275, 300, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("ERASE", 200, 285);
   }

  ////////////////////////////////////////////////////////////////////////////////////////////////////////
  //координаты тача
  void drawFrame(int x1, int y1, int x2, int y2) {
     myGLCD.setColor(255, 0, 0);
     myGLCD.drawRoundRect (x1, y1, x2, y2);
     while (myTouch.dataAvailable())
     myTouch.read();
     myGLCD.setColor(255, 255, 255); 
   }

  /////////////////////////////////////////////////////////////////////////////////////////////////////////
  //прорисовка кнопок
  void buttonHome() {
     myGLCD.setColor(0,0,0); // цвет кнопки -серый
     myGLCD.fillRoundRect (1, 1, 65, 33);      // расположение кнопки прямоугольника
     myGLCD.setColor(0, 255, 0); // цвет текста зеленый
     myGLCD.drawRoundRect (1, 1, 65, 33);      // кнопка будет рамкой
     myGLCD.setFont(BigFont);                      // размер шрифта
     myGLCD.setBackColor(0,0,0);            // цвет фона области где будет надпись и кнопки
     myGLCD.print("HOME", 1, 10); // центровка строки
    }
  void buttonINF1() {
    myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (10, 275, 120, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (10, 275, 120, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 1", 25, 285);
    }
  void buttonINF2() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (180, 275, 300, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (180, 275, 300, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 2", 200, 285);
    }
  void buttonCHECK() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (350, 275, 470, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (350, 275, 470, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("CHECK", 375, 285);
    }

  ////////////////////////////////////////////////////////////////////////////////////////
  //прорисовка линий
  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 vista(){
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setColor(0, 255, 0);
     myGLCD.setBackColor(0,0,0); 
  }

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

 

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

все нули..

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

в строку 358 вставь это    timerenabledPID=0; 

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

все нули....

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

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

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

согласе, лепил уже с последнего, готового

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

скорее всего проверка на длинное сообщение 2101 неправильная по первым байтам

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

щас проверим

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

сместил с 1 до 6. нули.... может как то добавить функциы чтобы все отображало в сериале?

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

нашел один косяк, почему у нас так

if (MessageRx[2]==0x83 && MessageRx[3]==0xF1 && MessageRx[4]==0x11 && MessageRx[5]==0xC1 && MessageRx[6]==0x6B && MessageRx[7]==0x8F) {Init=1;

надо либо с 0 либо с 1. но это пока не помогло

хотя в рабочем скетче так работает

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

дак добавь, также как и убрал)))

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

еду домой, дома продолжу изучать

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

.

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

viki13viki пишет:

нашел один косяк, почему у нас так

if (MessageRx[2]==0x83 && MessageRx[3]==0xF1 && MessageRx[4]==0x11 && MessageRx[5]==0xC1 && MessageRx[6]==0x6B && MessageRx[7]==0x8F) {Init=1;

надо либо с 0 либо с 1. но это пока не помогло

хотя в рабочем скетче так работает

потому что там первые два байта FF вроде были

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

но самый главный косяк в том , что в формулах ты читаешь из байтов сообщения ЗАПРОСА 2101 а не ответа)))

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

Вот скетч, но ожидается ещё один косяк 

   #include <UTouch.h>
  #include <UTFT.h>
  #include <SPI.h>
  
  //pin 20 SCL , 21 SDA датчик реального времени
  #include <Wire.h>
  #include "RTClib.h"
  RTC_DS3231 rtc;       
  
  //датчик наружней температуры
  #include <OneWire.h>
  #define ONE_WIRE_BUS 8   
  OneWire oneWire(ONE_WIRE_BUS);
  #include <DallasTemperature.h>
  DallasTemperature sensors(&oneWire);
  
  //датчик внутринней температуры и влаги
  #include "DHT.h"
  #define DHTPIN 9   
  #define DHTTYPE DHT22 
  DHT dht(DHTPIN, DHTTYPE);
  
  //пины экрана и тача
  UTFT    myGLCD(31,38,39,40,41); 
  UTouch  myTouch(6,5,4,3,2);
 
  //шрифты + не стандартный шрифт GroteskBold16x32.с
  extern uint8_t SmallFont[];
  extern uint8_t BigFont[];
  extern uint8_t SevenSegNumFont[];
  extern uint8_t GroteskBold16x32[];
 
  int x, y;
  char currentPage, selectedUnit;

  float h;
  float t;

  unsigned long prevWatch = 0;
  unsigned long prevDvoet = 0;
  unsigned long prevData = 0;
  bool Dvoet = 0;

  //////////////////////////////////////////////////////////////////////////////
  //все что касается OBD2
  #include <SoftwareSerial.h>
  SoftwareSerial mySerial(10, 11); //RХ,TХ
  #define TX 11

  int length5 = 5;
  int length6 = 6;

  int pid = 1; // очередность пида
  bool Init = 0;

  int PIDTime = 150;    // задержка между посылками запросов пидов, мс
  int PresTime = 9000;    // задержка между посылками запросов присутствия, мс 
  int waitbyte = 1;       // задержка между отправкой байт в сообщении, мс
   
  int MAF = 0;           //26,27 байты
  int BoostPres = 0;     //28,29 байты
  int RPM = 0;           //32,33 байты
  int EGRmg = 0;         //34,35 байты
  int BoostPresCom = 0;  //38,39 байты
  int Speed = 0;        //44,45 байты
  float DesaInjQua = 0.00;   //50,51 байты
  float InjQua = 0.00;    //52,53 байты
  int StaDaliv = 0;  //54,55 байты
  int PumpRPM = 0;   //56,57 байты
  int EGRPul = 0;    //62,63 байты
  int SolenPul = 0;  //64,65 байты
  int SolenPre = 0;  //70,71 байты
  float DesInj = 0.00;    //72,73 байты 
  float ActInj = 0.00;    //16,17 байты
  int TempAir = 0;   //74,75 байты
  int Temp = 0;      //14,15 байты
  int TempOil = 0;   //18,19 байты
  int TempFuel = 0;   //58,59 байты


  // массив байтов принимаемого сообщения
  byte MessageRx[110] = {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};    // запрос температуры 1
  
  unsigned long prevPID = 0;
  unsigned long prevpres = 0;


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

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

  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  void setup() {
    myGLCD.InitLCD();
    myGLCD.clrScr();
    myTouch.InitTouch();
    myTouch.setPrecision(PREC_MEDIUM);
 
    drawHomeScreen();  
    currentPage = '0'; 
    selectedUnit = '0'; 
  
    Wire.begin();
    rtc.begin();
    dht.begin();
    sensors.begin();
    // строка ниже используется для настройки даты и времени часов (год, месяц, день, часы, минуты, секунды)
    rtc.adjust(DateTime(2017, 7, 6, 17, 35, 0));
    Watch_Temperature ();
    
    pinMode(TX, OUTPUT);
    fastinit();
  }

  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  void loop() {
    

    unsigned long curPID = millis ();
    unsigned long curpres = millis ();
    TimewaitPID = millis ();
    TimewaitInit = millis ();

    if (!Init) {if (!timerenabledInit){ timerwaitInit=TimewaitInit; timerenabledInit=1; initialization(); }
    else {if (TIMEREXPIRED_Init) {timerenabledInit=0;}}}
    else {
      if (curpres - prevpres > PresTime) {present(); prevpres = curpres;}
      if (!timerenabledPID){if (curPID - prevPID > PIDTime) {PIDs(); timerwaitPID=TimewaitPID; timerenabledPID=1; prevPID = curPID;}}
      if (timerenabledPID) {if (TIMEREXPIRED_PID) {timerenabledPID=0;}}
      }
  
    receive ();
    
    unsigned long curWatch = millis();  
    unsigned long curDvoet = millis();  
    unsigned long curData = millis();  

    if (curWatch - prevWatch > 10000)  { Watch_Temperature (); prevWatch = curWatch;}
    if (curDvoet - prevDvoet > 500)  { if (!Dvoet) {myGLCD.print(":", 285, 0);} else {myGLCD.print(" ", 285, 0);} prevDvoet = curDvoet; Dvoet=!Dvoet;}
   Menu();
   //---------------------------------------------------------
   //прописываем где и что мы хотим видеть (пиды)
     if (currentPage == '0') {if (curData - prevData > 200){
       
       myGLCD.setColor(0, 255, 0);
       
       if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
       if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
       myGLCD.printNumI(Speed, 350, 0);
      
      myGLCD.setColor(255, 255, 255); 
      
      //if (--<10) {myGLCD.print("  ", 166, 40); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 40); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 40);
      
      //if (--<10) {myGLCD.print("  ", 166, 75); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 75); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 75);
      
      //if (--<10) {myGLCD.print("  ", 166, 110); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 110); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 110);

      //if (--<10) {myGLCD.print("  ", 166, 145); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 145); }; //затирает третюю цифру
      myGLCD.printNumI(h, 165, 145);

      
      //if (MAF<10) {myGLCD.print("  ", 166, 180); }; //затираем вторую цифру и третью
      if (PumpRPM>10) {myGLCD.print(" ", 198, 180); }; //затираем четвертую цифру
      myGLCD.printNumI(PumpRPM, 165, 180);
        
      if (RPM>100) {myGLCD.print(" ", 198, 215);};   //затираем четвертую цифру
      myGLCD.printNumI(RPM, 165, 215);
      
      //-------------------------------------------
      if (Temp<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      if (Temp>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumI(Temp, 410, 40);
      
      if (TempOil<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (TempOil>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(TempOil, 410, 75);
      
      if (TempFuel<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      if (TempFuel>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(TempFuel, 410, 110);
  
      myGLCD.printNumI(sensors.getTempCByIndex(0), 410, 145);
      
      myGLCD.printNumI(t, 410, 180);
      
      if (TempAir<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (TempAir>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(TempAir, 410, 215);
     
     prevData = curData;   
    }
   }
   //----------------------------------------------------------
      if (currentPage == '1') {if (curData - prevData > 200){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
      if (StaDaliv<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      if (StaDaliv>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumI(StaDaliv, 395, 40);
      
      if (DesInj<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (DesInj>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(DesInj, 395, 75);
      
      if (ActInj<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      if (ActInj>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(ActInj, 395, 110);
      
      if (DesaInjQua<10) {myGLCD.print("  ", 411, 145); }; //затираем вторую цифру и третью
      if (DesaInjQua>10) {myGLCD.print(" ", 427, 145); }; //затирает третюю цифру  
      myGLCD.printNumI(DesaInjQua, 395, 145);
      
      if (InjQua<10) {myGLCD.print("  ", 411, 180); }; //затираем вторую цифру и третью
      if (InjQua>10) {myGLCD.print(" ", 427, 180); }; //затирает третюю цифру  
      myGLCD.printNumI(InjQua, 395, 180);
      
      if (TempAir<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (TempAir>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(TempAir, 395, 215);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      if (currentPage == '2') {
        if (curData - prevData > 200){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
        if (BoostPres<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      if (BoostPres>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumI(BoostPres, 395, 40);
      
      if (BoostPresCom<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (BoostPresCom>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(BoostPresCom, 395, 75);
      
      if (EGRmg<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      if (EGRmg>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(EGRmg, 395, 110);
      
      if (EGRPul<10) {myGLCD.print("  ", 411, 145); }; //затираем вторую цифру и третью
      if (EGRPul>10) {myGLCD.print(" ", 427, 145); }; //затирает третюю цифру  
      myGLCD.printNumI(DesaInjQua, 395, 145);
      
      if (SolenPul<10) {myGLCD.print("  ", 411, 180); }; //затираем вторую цифру и третью
      if (SolenPul>10) {myGLCD.print(" ", 427, 180); }; //затирает третюю цифру  
      myGLCD.printNumI(SolenPul, 395, 180);
      
      if (SolenPre<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (SolenPre>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(SolenPre, 395, 215);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      if (currentPage == '3') {if (curData - prevData > 200){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
       myGLCD.setColor(255, 255, 255);
        
        prevData = curData;
      }
    }
  }

  ///////////////////////////////////////////////////////////////////////////
  
  //отправка запросов пидов
  void PIDs() {

    if (pid==1){
    for (int i = 0; i < length6; i++) {
    mySerial.write(messagePids[i]);
    delay (waitbyte); } 
   }
}
  void present() {
    for (int i = 0; i < length5; i++) {
    mySerial.write(messagePresent[i]);
    delay (waitbyte); }
   }


/////////////////////////////////////////////////////////////////////////////////////////////
//получение данных из конкретных ответо, конкретные байты
    void receive () {
     if (mySerial.available()) {
     delay(51);
     int k=0;
     byte inbyte=0;
     
     while( mySerial.available() && k < 110) {
     inbyte = mySerial.read();
     MessageRx[k] = inbyte;
     k++;   }
     
     Serial.print ("Recieve:   ");
    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) {Init=1;
   timerenabledInit=0;  
   }

   if (MessageRx[0]==0x80 && MessageRx[1]==0xF1 && MessageRx[2]==0x11 && MessageRx[3]==0x4C && MessageRx[4]==0x61 && MessageRx[5]==0x01)    {
    
   MAF =  ((MessageRx[26]*256)+MessageRx[27])/10;
    BoostPres =  ((MessageRx[28]*256)+MessageRx[29])/1000;
    RPM =  (MessageRx[32]*256)+MessageRx[33];
    EGRmg =  ((MessageRx[34]*256)+MessageRx[35])/10;
    BoostPresCom =  ((MessageRx[38]*256)+MessageRx[39])/1000;
    Speed =  (MessageRx[44]*256)+MessageRx[45];
    DesaInjQua =  ((MessageRx[50]*256)+MessageRx[51])/100.00;
    InjQua =  ((MessageRx[52]*256)+MessageRx[53])/100.00;
    StaDaliv =  ((MessageRx[54]*256)+MessageRx[55])/100;
    PumpRPM =  (MessageRx[56]*256)+MessageRx[57];
    EGRPul =  ((MessageRx[62]*256)+MessageRx[63])/100;
    SolenPul =  ((MessageRx[64]*256)+MessageRx[65])/100;
    SolenPre =  ((MessageRx[70]*256)+MessageRx[71])/100;
    DesInj =  ((MessageRx[72]*3)+(MessageRx[73])/100.00)+0.3;
    ActInj =  ((MessageRx[16]*3)+(MessageRx[17])/100.00)+0.3;
    TempAir =  ((MessageRx[74]*26)-278)+MessageRx[75]/10;
    Temp =  ((MessageRx[14]*26)-278)+MessageRx[15]/10;
    TempOil =  ((MessageRx[18]*26)-278)+MessageRx[19]/10;
    TempFuel =  ((MessageRx[58]*26)-278)+MessageRx[59]/10;
    timerenabledPID=0; 
   }
   



   
   
   for (int i = 0; i < 110; i++) MessageRx[i]=0;
     }
   }

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

  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //стартовая инициализация
  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 Menu () {
      //Page 0 (home)
      if (currentPage == '0') { 
      if (myTouch.dataAvailable()) {
         myTouch.read();
         x=myTouch.getX(); 
         y=myTouch.getY();
      
      // Button home
      if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }
       
     // Button INF1
     if ((x>=10) && (x<=120) && (y>=275) && (y<=310)) {
        drawFrame(10, 275, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();       
        Watch_Temperature ();
      } 
      
     // Button INF2
     if ((x>=180) && (x<=300) && (y>=275) && (y<=310)) {
        drawFrame(180, 275, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=275) && (y<=310)) {
        drawFrame(350, 275, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();   
        Watch_Temperature ();                                                                   
      } 
     }
    }
   
  //----------------------------------------------------------------------------------------------------------------------------------
    //Page 1
    if (currentPage == '1') { 
      if (myTouch.dataAvailable()) {
         myTouch.read();
         x=myTouch.getX(); 
         y=myTouch.getY();
      
    // Button home
    if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }
       
    // Button INF2
    if ((x>=180) && (x<=300) && (y>=275) && (y<=310)) {
        drawFrame(180, 275, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=275) && (y<=310)) {
        drawFrame(350, 275, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();   
        Watch_Temperature ();                                                                   
      } 
     }
    }
   

  //---------------------------------------------------------------------------------------------------
    //Page 2
    if (currentPage == '2') { 
      if (myTouch.dataAvailable()) {
         myTouch.read();
         x=myTouch.getX(); 
         y=myTouch.getY();
      
    // Button home
    if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }
      
    // Button INF1
    if ((x>=10) && (x<=120) && (y>=275) && (y<=310)) {
        drawFrame(10, 275, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=275) && (y<=310)) {
        drawFrame(350, 275, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();  
        Watch_Temperature ();                                                                    
      } 
    }
  }
  //----------------------------------------------------------
    //Page 3
    if (currentPage == '3') { 
       if (myTouch.dataAvailable()) {
       myTouch.read();
       x=myTouch.getX(); 
       y=myTouch.getY();
      
    //Button ERASE
    //if ((x>=180) && (x<=300) && (y>=275) && (y<=310)) {
        //drawFrame(180, 275, 300, 310); 
        //currentPage = '3';  //потом заменить на дейсвие         
        //myGLCD.clrScr();             
        //drawscreen_three();   //потом заменить на дейсвие                                                                   
      //} 
  
    // Button home
    if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }    
     }
    }
  }
  
  //--------------------------------------------------------
  //прописывает заголовки на всех страницах
   void drawHomeScreen() {
     line() ;
     vista();
     myGLCD.drawLine(239,35,239,248); // линия вертикальная
     myGLCD.print("Ltr/Hor :", 10, 40);
     myGLCD.print("Ltr/100 :", 10, 75);
     myGLCD.print("Fuel  L :", 10, 110);
     myGLCD.print("Humed  %:", 10, 145);
     myGLCD.print("PUMP RPM:", 10, 180);
     myGLCD.print("Engi RPM:", 10, 215);
     myGLCD.print("Motor *C:", 255, 40);
     myGLCD.print("Oil   *C:", 255, 75);
     myGLCD.print("Fuel  *C:", 255, 110);
     myGLCD.print("Inter *C:", 255, 145);
     myGLCD.print("Exter *C:", 255, 180);
     myGLCD.print("IntAir*C:", 255, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonINF2() ;
     buttonCHECK() ;
   }
  //-------------------------------------------------
    void drawscreen_one() {
     line() ;
     vista();
     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("Mass Air Flow     mg/s:", 10, 215);
 
  
     buttonHome() ;
     buttonINF2() ;
     buttonCHECK() ;
     }
  //-------------------------------------------------
   void drawscreen_two() {
     line() ;
     vista();
     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);
  
     buttonHome() ;
     buttonINF1() ;
     buttonCHECK() ;
   }
  //----------------------------------------------------------------------------
   void drawscreen_three() {
     vista();
     myGLCD.setColor(255, 0, 0); // цвет линии красный
     myGLCD.drawLine(1,35,479,35); // линия горизонтальная
     myGLCD.drawLine(1,248,479,248); // линия горизонтальная
     
     buttonHome();
  
     //Button - ERASE
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (180, 275, 300, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (180, 275, 300, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("ERASE", 200, 285);
   }

  ////////////////////////////////////////////////////////////////////////////////////////////////////////
  //координаты тача
  void drawFrame(int x1, int y1, int x2, int y2) {
     myGLCD.setColor(255, 0, 0);
     myGLCD.drawRoundRect (x1, y1, x2, y2);
     while (myTouch.dataAvailable())
     myTouch.read();
     myGLCD.setColor(255, 255, 255); 
   }

  /////////////////////////////////////////////////////////////////////////////////////////////////////////
  //прорисовка кнопок
  void buttonHome() {
     myGLCD.setColor(0,0,0); // цвет кнопки -серый
     myGLCD.fillRoundRect (1, 1, 65, 33);      // расположение кнопки прямоугольника
     myGLCD.setColor(0, 255, 0); // цвет текста зеленый
     myGLCD.drawRoundRect (1, 1, 65, 33);      // кнопка будет рамкой
     myGLCD.setFont(BigFont);                      // размер шрифта
     myGLCD.setBackColor(0,0,0);            // цвет фона области где будет надпись и кнопки
     myGLCD.print("HOME", 1, 10); // центровка строки
    }
  void buttonINF1() {
    myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (10, 275, 120, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (10, 275, 120, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 1", 25, 285);
    }
  void buttonINF2() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (180, 275, 300, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (180, 275, 300, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 2", 200, 285);
    }
  void buttonCHECK() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (350, 275, 470, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (350, 275, 470, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("CHECK", 375, 285);
    }

  ////////////////////////////////////////////////////////////////////////////////////////
  //прорисовка линий
  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 vista(){
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setColor(0, 255, 0);
     myGLCD.setBackColor(0,0,0); 
  }

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

 

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

Но по стандартным подам мы тоже читали из байтов. И все чики было

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

из байтов принимаемого сообщения а не того, которое ты на ЭБУ отсылаешь. На этом сообщении всего 5 байт

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

и я нашел ещё один серьезнейший косяк. Поэтому у тебя были головняки с экраном и часами

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

c часами и двумя датчиками был порядок

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

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

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

щас и обновляться данные должны как положено по идее

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

да вспонил , двое точие иногда промигивало зеленым а не белым цветом. щас пойду попробую

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

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

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

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

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

я добавил вывод в сериал если че

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

он скорее всего в ответе на запрос 2101 какой нить FF ставит и у нас проверка по байтам не проходит

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

подозреваю тоже самое. завтра узнаем правду. я тут пока разбираюсь с

        myGLCD.print("Ltr/Hor :", 10, 40);

        myGLCD.print("Ltr/100 :", 10, 75);

        myGLCD.print("Fuel  L :", 10, 110);

литры в час, литры на 100, литры бак.

 
543

 

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

MaksVV пишет:

но ожидается ещё один косяк

 

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

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

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

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

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

   #include <UTouch.h>
  #include <UTFT.h>
  #include <SPI.h>
  
  //pin 20 SCL , 21 SDA датчик реального времени
  #include <Wire.h>
  #include "RTClib.h"
  RTC_DS3231 rtc;       
  
  //датчик наружней температуры
  #include <OneWire.h>
  #define ONE_WIRE_BUS 8   
  OneWire oneWire(ONE_WIRE_BUS);
  #include <DallasTemperature.h>
  DallasTemperature sensors(&oneWire);
  
  //датчик внутринней температуры и влаги
  #include "DHT.h"
  #define DHTPIN 9   
  #define DHTTYPE DHT22 
  DHT dht(DHTPIN, DHTTYPE);
  
  //пины экрана и тача
  UTFT    myGLCD(31,38,39,40,41); 
  UTouch  myTouch(6,5,4,3,2);
 
  //шрифты + не стандартный шрифт GroteskBold16x32.с
  extern uint8_t SmallFont[];
  extern uint8_t BigFont[];
  extern uint8_t SevenSegNumFont[];
  extern uint8_t GroteskBold16x32[];
 
  int x, y;
  char currentPage, selectedUnit;

  float h;
  float t;
  int k = 0;

  unsigned long prevWatch = 0;
  unsigned long prevDvoet = 0;
  unsigned long prevData = 0;
  bool Dvoet = 0;
  bool part_2 = 0;

  //////////////////////////////////////////////////////////////////////////////
  //все что касается OBD2
  #include <SoftwareSerial.h>
  SoftwareSerial mySerial(10, 11); //RХ,TХ
  #define TX 11

  int length5 = 5;
  int length6 = 6;

  int pid = 1; // очередность пида
  bool Init = 0;

  int PIDTime = 150;    // задержка между посылками запросов пидов, мс
  int PresTime = 9000;    // задержка между посылками запросов присутствия, мс 
  int waitbyte = 1;       // задержка между отправкой байт в сообщении, мс
   
  int MAF = 0;           //26,27 байты
  int BoostPres = 0;     //28,29 байты
  int RPM = 0;           //32,33 байты
  int EGRmg = 0;         //34,35 байты
  int BoostPresCom = 0;  //38,39 байты
  int Speed = 0;        //44,45 байты
  float DesaInjQua = 0.00;   //50,51 байты
  float InjQua = 0.00;    //52,53 байты
  int StaDaliv = 0;  //54,55 байты
  int PumpRPM = 0;   //56,57 байты
  int EGRPul = 0;    //62,63 байты
  int SolenPul = 0;  //64,65 байты
  int SolenPre = 0;  //70,71 байты
  float DesInj = 0.00;    //72,73 байты 
  float ActInj = 0.00;    //16,17 байты
  int TempAir = 0;   //74,75 байты
  int Temp = 0;      //14,15 байты
  int TempOil = 0;   //18,19 байты
  int TempFuel = 0;   //58,59 байты


  // массив байтов принимаемого сообщения
  byte MessageRx[110] = {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};    // запрос температуры 1
  
  unsigned long prevPID = 0;
  unsigned long prevpres = 0;


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

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

  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  void setup() {
    myGLCD.InitLCD();
    myGLCD.clrScr();
    myTouch.InitTouch();
    myTouch.setPrecision(PREC_MEDIUM);
 
    drawHomeScreen();  
    currentPage = '0'; 
    selectedUnit = '0'; 
  
    Wire.begin();
    rtc.begin();
    dht.begin();
    sensors.begin();
    // строка ниже используется для настройки даты и времени часов (год, месяц, день, часы, минуты, секунды)
    rtc.adjust(DateTime(2017, 7, 6, 17, 35, 0));
    Watch_Temperature ();
    
    pinMode(TX, OUTPUT);
    fastinit();
  }

  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  void loop() {
    

    unsigned long curPID = millis ();
    unsigned long curpres = millis ();
    TimewaitPID = millis ();
    TimewaitInit = millis ();

    if (!Init) {if (!timerenabledInit){ timerwaitInit=TimewaitInit; timerenabledInit=1; initialization(); }
    else {if (TIMEREXPIRED_Init) {timerenabledInit=0;}}}
    else {
      if (curpres - prevpres > PresTime) {present(); prevpres = curpres;}
      if (!timerenabledPID){if (curPID - prevPID > PIDTime) {PIDs(); timerwaitPID=TimewaitPID; timerenabledPID=1; prevPID = curPID;}}
      if (timerenabledPID) {if (TIMEREXPIRED_PID) {timerenabledPID=0;}}
      }
  
    receive ();
    
    unsigned long curWatch = millis();  
    unsigned long curDvoet = millis();  
    unsigned long curData = millis();  

    if (curWatch - prevWatch > 10000)  { Watch_Temperature (); prevWatch = curWatch;}
    if (curDvoet - prevDvoet > 500)  { if (!Dvoet) {myGLCD.print(":", 285, 0);} else {myGLCD.print(" ", 285, 0);} prevDvoet = curDvoet; Dvoet=!Dvoet;}
   Menu();
   //---------------------------------------------------------
   //прописываем где и что мы хотим видеть (пиды)
     if (currentPage == '0') {if (curData - prevData > 200){
       
       myGLCD.setColor(0, 255, 0);
       
       if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
       if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
       myGLCD.printNumI(Speed, 350, 0);
      
      myGLCD.setColor(255, 255, 255); 
      
      //if (--<10) {myGLCD.print("  ", 166, 40); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 40); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 40);
      
      //if (--<10) {myGLCD.print("  ", 166, 75); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 75); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 75);
      
      //if (--<10) {myGLCD.print("  ", 166, 110); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 110); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 110);

      //if (--<10) {myGLCD.print("  ", 166, 145); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 145); }; //затирает третюю цифру
      myGLCD.printNumI(h, 165, 145);

      
      //if (MAF<10) {myGLCD.print("  ", 166, 180); }; //затираем вторую цифру и третью
      if (PumpRPM>10) {myGLCD.print(" ", 198, 180); }; //затираем четвертую цифру
      myGLCD.printNumI(PumpRPM, 165, 180);
        
      if (RPM>100) {myGLCD.print(" ", 198, 215);};   //затираем четвертую цифру
      myGLCD.printNumI(RPM, 165, 215);
      
      //-------------------------------------------
      if (Temp<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      if (Temp>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumI(Temp, 410, 40);
      
      if (TempOil<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (TempOil>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(TempOil, 410, 75);
      
      if (TempFuel<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      if (TempFuel>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(TempFuel, 410, 110);
  
      myGLCD.printNumI(sensors.getTempCByIndex(0), 410, 145);
      
      myGLCD.printNumI(t, 410, 180);
      
      if (TempAir<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (TempAir>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(TempAir, 410, 215);
     
     prevData = curData;   
    }
   }
   //----------------------------------------------------------
      if (currentPage == '1') {if (curData - prevData > 200){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
      if (StaDaliv<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      if (StaDaliv>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumI(StaDaliv, 395, 40);
      
      if (DesInj<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (DesInj>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(DesInj, 395, 75);
      
      if (ActInj<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      if (ActInj>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(ActInj, 395, 110);
      
      if (DesaInjQua<10) {myGLCD.print("  ", 411, 145); }; //затираем вторую цифру и третью
      if (DesaInjQua>10) {myGLCD.print(" ", 427, 145); }; //затирает третюю цифру  
      myGLCD.printNumI(DesaInjQua, 395, 145);
      
      if (InjQua<10) {myGLCD.print("  ", 411, 180); }; //затираем вторую цифру и третью
      if (InjQua>10) {myGLCD.print(" ", 427, 180); }; //затирает третюю цифру  
      myGLCD.printNumI(InjQua, 395, 180);
      
      if (TempAir<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (TempAir>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(TempAir, 395, 215);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      if (currentPage == '2') {
        if (curData - prevData > 200){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
        if (BoostPres<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      if (BoostPres>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumI(BoostPres, 395, 40);
      
      if (BoostPresCom<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (BoostPresCom>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(BoostPresCom, 395, 75);
      
      if (EGRmg<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      if (EGRmg>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(EGRmg, 395, 110);
      
      if (EGRPul<10) {myGLCD.print("  ", 411, 145); }; //затираем вторую цифру и третью
      if (EGRPul>10) {myGLCD.print(" ", 427, 145); }; //затирает третюю цифру  
      myGLCD.printNumI(DesaInjQua, 395, 145);
      
      if (SolenPul<10) {myGLCD.print("  ", 411, 180); }; //затираем вторую цифру и третью
      if (SolenPul>10) {myGLCD.print(" ", 427, 180); }; //затирает третюю цифру  
      myGLCD.printNumI(SolenPul, 395, 180);
      
      if (SolenPre<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (SolenPre>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(SolenPre, 395, 215);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      if (currentPage == '3') {if (curData - prevData > 200){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
       myGLCD.setColor(255, 255, 255);
        
        prevData = curData;
      }
    }
  }

  ///////////////////////////////////////////////////////////////////////////
  
  //отправка запросов пидов
  void PIDs() {

    if (pid==1){
    for (int i = 0; i < length6; i++) {
    mySerial.write(messagePids[i]);
    delay (waitbyte); } 
   }
}
  void present() {
    for (int i = 0; i < length5; i++) {
    mySerial.write(messagePresent[i]);
    delay (waitbyte); }
   }


/////////////////////////////////////////////////////////////////////////////////////////////
//получение данных из конкретных ответо, конкретные байты
    void receive () {
     if (mySerial.available()) {
     delay(100);
     if (!part_2) k=0;
     byte inbyte=0;
     
     while( mySerial.available() && k < 110) {
     inbyte = mySerial.read();
     MessageRx[k] = inbyte;
     k++;   }
     
     Serial.print ("Recieve:   ");
    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) {Init=1;
   timerenabledInit=0;  
   }
   
   if (MessageRx[0]==0x80 && MessageRx[1]==0xF1 && MessageRx[2]==0x11 && MessageRx[3]==0x4C && MessageRx[4]==0x61 && MessageRx[5]==0x01)    {
    part_2 = 1;
   MAF =  ((MessageRx[26]*256)+MessageRx[27])/10;
    BoostPres =  ((MessageRx[28]*256)+MessageRx[29])/1000;
    RPM =  (MessageRx[32]*256)+MessageRx[33];
    EGRmg =  ((MessageRx[34]*256)+MessageRx[35])/10;
    BoostPresCom =  ((MessageRx[38]*256)+MessageRx[39])/1000;
    Speed =  (MessageRx[44]*256)+MessageRx[45];
    DesaInjQua =  ((MessageRx[50]*256)+MessageRx[51])/100.00;
    InjQua =  ((MessageRx[52]*256)+MessageRx[53])/100.00;
    StaDaliv =  ((MessageRx[54]*256)+MessageRx[55])/100;
    PumpRPM =  (MessageRx[56]*256)+MessageRx[57];
    EGRPul =  ((MessageRx[62]*256)+MessageRx[63])/100;
    SolenPul =  ((MessageRx[64]*256)+MessageRx[65])/100;
    SolenPre =  ((MessageRx[70]*256)+MessageRx[71])/100;
    DesInj =  ((MessageRx[72]*3)+(MessageRx[73])/100.00)+0.3;
    ActInj =  ((MessageRx[16]*3)+(MessageRx[17])/100.00)+0.3;
    TempAir =  ((MessageRx[74]*26)-278)+MessageRx[75]/10;
    Temp =  ((MessageRx[14]*26)-278)+MessageRx[15]/10;
    TempOil =  ((MessageRx[18]*26)-278)+MessageRx[19]/10;
    TempFuel =  ((MessageRx[58]*26)-278)+MessageRx[59]/10;
      }

   if (part_2) {MAF =  ((MessageRx[26]*256)+MessageRx[27])/10;
    BoostPres =  ((MessageRx[28]*256)+MessageRx[29])/1000;
    RPM =  (MessageRx[32]*256)+MessageRx[33];
    EGRmg =  ((MessageRx[34]*256)+MessageRx[35])/10;
    BoostPresCom =  ((MessageRx[38]*256)+MessageRx[39])/1000;
    Speed =  (MessageRx[44]*256)+MessageRx[45];
    DesaInjQua =  ((MessageRx[50]*256)+MessageRx[51])/100.00;
    InjQua =  ((MessageRx[52]*256)+MessageRx[53])/100.00;
    StaDaliv =  ((MessageRx[54]*256)+MessageRx[55])/100;
    PumpRPM =  (MessageRx[56]*256)+MessageRx[57];
    EGRPul =  ((MessageRx[62]*256)+MessageRx[63])/100;
    SolenPul =  ((MessageRx[64]*256)+MessageRx[65])/100;
    SolenPre =  ((MessageRx[70]*256)+MessageRx[71])/100;
    DesInj =  ((MessageRx[72]*3)+(MessageRx[73])/100.00)+0.3;
    ActInj =  ((MessageRx[16]*3)+(MessageRx[17])/100.00)+0.3;
    TempAir =  ((MessageRx[74]*26)-278)+MessageRx[75]/10;
    Temp =  ((MessageRx[14]*26)-278)+MessageRx[15]/10;
    TempOil =  ((MessageRx[18]*26)-278)+MessageRx[19]/10;
    TempFuel =  ((MessageRx[58]*26)-278)+MessageRx[59]/10;
    timerenabledPID=0;
    part_2 = 0; 
    }

  // for (int i = 0; i < 110; i++) MessageRx[i]=0;
     }
   }

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

  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //стартовая инициализация
  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 Menu () {
      //Page 0 (home)
      if (currentPage == '0') { 
      if (myTouch.dataAvailable()) {
         myTouch.read();
         x=myTouch.getX(); 
         y=myTouch.getY();
      
      // Button home
      if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }
       
     // Button INF1
     if ((x>=10) && (x<=120) && (y>=275) && (y<=310)) {
        drawFrame(10, 275, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();       
        Watch_Temperature ();
      } 
      
     // Button INF2
     if ((x>=180) && (x<=300) && (y>=275) && (y<=310)) {
        drawFrame(180, 275, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=275) && (y<=310)) {
        drawFrame(350, 275, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();   
        Watch_Temperature ();                                                                   
      } 
     }
    }
   
  //----------------------------------------------------------------------------------------------------------------------------------
    //Page 1
    if (currentPage == '1') { 
      if (myTouch.dataAvailable()) {
         myTouch.read();
         x=myTouch.getX(); 
         y=myTouch.getY();
      
    // Button home
    if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }
       
    // Button INF2
    if ((x>=180) && (x<=300) && (y>=275) && (y<=310)) {
        drawFrame(180, 275, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=275) && (y<=310)) {
        drawFrame(350, 275, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();   
        Watch_Temperature ();                                                                   
      } 
     }
    }
   

  //---------------------------------------------------------------------------------------------------
    //Page 2
    if (currentPage == '2') { 
      if (myTouch.dataAvailable()) {
         myTouch.read();
         x=myTouch.getX(); 
         y=myTouch.getY();
      
    // Button home
    if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }
      
    // Button INF1
    if ((x>=10) && (x<=120) && (y>=275) && (y<=310)) {
        drawFrame(10, 275, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=275) && (y<=310)) {
        drawFrame(350, 275, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();  
        Watch_Temperature ();                                                                    
      } 
    }
  }
  //----------------------------------------------------------
    //Page 3
    if (currentPage == '3') { 
       if (myTouch.dataAvailable()) {
       myTouch.read();
       x=myTouch.getX(); 
       y=myTouch.getY();
      
    //Button ERASE
    //if ((x>=180) && (x<=300) && (y>=275) && (y<=310)) {
        //drawFrame(180, 275, 300, 310); 
        //currentPage = '3';  //потом заменить на дейсвие         
        //myGLCD.clrScr();             
        //drawscreen_three();   //потом заменить на дейсвие                                                                   
      //} 
  
    // Button home
    if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }    
     }
    }
  }
  
  //--------------------------------------------------------
  //прописывает заголовки на всех страницах
   void drawHomeScreen() {
     line() ;
     vista();
     myGLCD.drawLine(239,35,239,248); // линия вертикальная
     myGLCD.print("Ltr/Hor :", 10, 40);
     myGLCD.print("Ltr/100 :", 10, 75);
     myGLCD.print("Fuel  L :", 10, 110);
     myGLCD.print("Humed  %:", 10, 145);
     myGLCD.print("PUMP RPM:", 10, 180);
     myGLCD.print("Engi RPM:", 10, 215);
     myGLCD.print("Motor *C:", 255, 40);
     myGLCD.print("Oil   *C:", 255, 75);
     myGLCD.print("Fuel  *C:", 255, 110);
     myGLCD.print("Inter *C:", 255, 145);
     myGLCD.print("Exter *C:", 255, 180);
     myGLCD.print("IntAir*C:", 255, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonINF2() ;
     buttonCHECK() ;
   }
  //-------------------------------------------------
    void drawscreen_one() {
     line() ;
     vista();
     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("Mass Air Flow     mg/s:", 10, 215);
 
  
     buttonHome() ;
     buttonINF2() ;
     buttonCHECK() ;
     }
  //-------------------------------------------------
   void drawscreen_two() {
     line() ;
     vista();
     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);
  
     buttonHome() ;
     buttonINF1() ;
     buttonCHECK() ;
   }
  //----------------------------------------------------------------------------
   void drawscreen_three() {
     vista();
     myGLCD.setColor(255, 0, 0); // цвет линии красный
     myGLCD.drawLine(1,35,479,35); // линия горизонтальная
     myGLCD.drawLine(1,248,479,248); // линия горизонтальная
     
     buttonHome();
  
     //Button - ERASE
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (180, 275, 300, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (180, 275, 300, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("ERASE", 200, 285);
   }

  ////////////////////////////////////////////////////////////////////////////////////////////////////////
  //координаты тача
  void drawFrame(int x1, int y1, int x2, int y2) {
     myGLCD.setColor(255, 0, 0);
     myGLCD.drawRoundRect (x1, y1, x2, y2);
     while (myTouch.dataAvailable())
     myTouch.read();
     myGLCD.setColor(255, 255, 255); 
   }

  /////////////////////////////////////////////////////////////////////////////////////////////////////////
  //прорисовка кнопок
  void buttonHome() {
     myGLCD.setColor(0,0,0); // цвет кнопки -серый
     myGLCD.fillRoundRect (1, 1, 65, 33);      // расположение кнопки прямоугольника
     myGLCD.setColor(0, 255, 0); // цвет текста зеленый
     myGLCD.drawRoundRect (1, 1, 65, 33);      // кнопка будет рамкой
     myGLCD.setFont(BigFont);                      // размер шрифта
     myGLCD.setBackColor(0,0,0);            // цвет фона области где будет надпись и кнопки
     myGLCD.print("HOME", 1, 10); // центровка строки
    }
  void buttonINF1() {
    myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (10, 275, 120, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (10, 275, 120, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 1", 25, 285);
    }
  void buttonINF2() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (180, 275, 300, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (180, 275, 300, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 2", 200, 285);
    }
  void buttonCHECK() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (350, 275, 470, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (350, 275, 470, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("CHECK", 375, 285);
    }

  ////////////////////////////////////////////////////////////////////////////////////////
  //прорисовка линий
  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 vista(){
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setColor(0, 255, 0);
     myGLCD.setBackColor(0,0,0); 
  }

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

 

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

вот последний снифф



82 11 F1 21 1 A6 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 C A7 1 7E C 6E 0 0 2 B6 0 0 12 55 4
110ms
 35 0 0 3 20 B B3 3 AC 4 2F 3 20 F0 5A 0 0 0 0 B 71 2 FB 3 28 8 AB 1 8F C 5E A0 0 1 2C 3 9C A9 8 1 30 0 0 1 7F B F9 3 AC 0 2 38
478ms
 82 11 F1 21 1 A6 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 C A7 1 7B C 6E 0 0 2 B4 0 0 12 21 4 3A 0 0 3 1F B AD 3
112ms
 AC 4 2F 3 20 F0 65 0 0 0 0 B 71 2 FF 3 2A 8 AA 1 8F C 5C A0 0 1 2C 3 41 AD 8 1 30 0 0 1 7E B F9 3 AD 0 2 B4
258ms
 82 11 F1 21 1 A6 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 C A7 1 7C C 6D 0 0 2 B3 0 0 12 3F 4 39 0 0 3
110ms
 21 B B3 3 AC 4 2F 3 20 F0 5A 0 0 0 0 B B1 2 FB 3 20 8 AA 1 91 C 5C A0 0 1 2C 3 72 AD 8 1 30 0 0 1 7D B F9 3 AD 0 2 31
307ms
 82 11 F1 21 1 A6 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 C A8 1 84 C 6D 0 0 2 B4 0 0 12 2E 4 39 0 0 3 21 B AA
112ms
 3 AD 4 2E 3 20 F0 0 0 0 0 0 B 2F 2 BB 3 2B 8 AB 1 8F C 5E A0 0 1 2C 3 44 AD 8 1 30 0 0 1 7E B F9 3 AD 0 2 E4
291ms
 82 11 F1 21 1 A6 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 C A8 1 7D C 6E 0 0 2 B5 0 0 12 31 4 39 0 0 3 1F B B6 3
111ms
 AD 4 2F 3 20 F0 50 0 0 0 0 B 70 2 F9 3 26 8 AB 1 8F C 5E A0 0 1 2C 3 96 A9 8 1 30 0 0 1 7F B F9 3 AC 0 2 5
305ms
 82 11 F1 21 1 A6 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 C A8 1 84 C 6E 0 0 2 B4 0 0 11 FF 4 3E 0 0 3 20 B AD 3 AC
111ms
 4 2E 3 20 F0 20 0 0 0 0 B 70 3 90 3 23 8 AB 1 91 C 5E A0 0 1 2C 3 7B A9 8 1 30 0 0 1 7E B F9 3 AD 0 2 1F
291ms
 82 11 F1 21 1 A6 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 C A8 1 81 C 6E 0 0 2 B2 0 0 12 44 4 3A 0 0
112ms
 3 20 B B6 3 AD 4 2F 3 20 F0 7A 0 0 0 0 B 71 2 C1 3 2E 8 A9 1 8F C 5C A0 0 1 2C 3 4F A9 8 1 30 0 0 1 7F B F9 3 AD 0 2 CC
307ms
 82 11 F1 21 1 A6 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 C A8 1 7D C 6F 0 0 2 B4 0 0 11 F0 4 3A
109ms
 0 0 3 22 B AD 3 AD 4 2E 3 20 F0 16 0 0 0 0 B B1 2 EE 3 1B 8 A9 1 91 C 5C A0 0 1 2C 3 34 A9 8 1 30 0 0 1 7E B F9 3 AC 0 2 49
648ms
 82 11 F1 21 1 A6 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 C A8 1 82 C 6F 0 0 2 B2 0 0 12 5B 4 3E 0 0 3 1E B
111ms
 B7 3 AC 4 2F 3 20 F0 84 0 0 0 0 B 71 2 C5 3 30 8 AB 1 8F C 5C A0 0 1 2C 3 B4 A9 8 1 30 0 0 1 7F B F9 3 AC 0 2 5D
305ms
 82 11 F1 21 1 A6 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 C A8 1 7C C 6E 0 0 2 B4 0 0 12 30 4 3A 0 0 3
112ms
 20 B B1 3 AC 4 2F 3 20 F0 45 0 0 0 0 B 2F 2 FC 3 24 8 AA 1 90 C 5C A0 0 1 2C 3 90 A9 8 1 30 0 0 1 7F B F9 3 AC 0 2 AB
292ms
 82 11 F1 21 1 A6 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 C A8 1 7E C 6F 0 0 2 B4 0 0 12 5 4 3A 0 0 3 22 B AE 3 AC
112ms
 4 2E 3 20 F0 25 0 0 0 0 B 73 3 8B 3 1D 8 AA 1 91 C 5C A0 0 1 2C 3 7E A9 8 1 30 0 0 1 7E B F9 3 AD 0 2 1D
363ms
 82 11 F1 21 1 A6 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 C A8 1 82 C 70 0 0 2 B4 0 0 12 44 4 3A 0 0 3 21 B B2 3

рвет где хочет

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

и кстати в скетче  #466  задержку  подними с 51мс до хотя бы 100. А то между байтами 1 мс задержка, значит скетч более 50 байт может не пропустить и будет тоже деление сообщения на части, уже не ЭБУ, а нашей дуней

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

ты прочел мою мысль о задержек 51м/с. я тоже подумал что может он делит не успевая прочить. если ты помнишь между запросами по стандарту опкома( я скрин выкидывал) 120м/с

 

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

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

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

логично. начну завтра со 100 и в сериале все будет понятно. сколько нужно

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

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

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

где инит портовв сериал?? ну блин 

в сетап добавь две строки

Serial.begin (115200);

mySerial.begin (10400);

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

блин, вот тормоз........... извени. щас

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

mySerial.begin не добавляй в сетап он в fastinit () происходит

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

вот что мы получаем

Recieve: 0 FF FF 83 F1 11 C1 6B 8F 40

Recieve: FF FF 83 F1 11 C1 6B 8F 40

Recieve: FF FF 83 F1 11 C1 6B 8F 40

Recieve: FF FF 83 F1 11 C1 6B 8F 40

и так далее . по ходу инициализация проходит. подскажи мне дураку с какого места мы начинаем отправлять 21 00 ? тобишь PIDs();

 

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

вставил PIDs(); в void receve и пошло дело. щас подправлю подсчет байт. так как в ответе в переди FF FF FF 

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

значит так , поставил проверку ответа с 3 байта

if (MessageRx[3]==0x80 && MessageRx[4]==0xF1 && MessageRx[5]==0x11 && MessageRx[6]==0x4C && MessageRx[7]==0x61 && MessageRx[8]==0x01)

на экране неправильный расчет. надо щас все байты в формулах сместить, и думаю щас будет ништяк. щас отпишусь. еще отвт принемает в сериале целиком, не рвет

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

viki13viki пишет:

значит так , поставил проверку ответа с 3 байта

if (MessageRx[3]==0x80 && MessageRx[4]==0xF1 && MessageRx[5]==0x11 && MessageRx[6]==0x4C && MessageRx[7]==0x61 && MessageRx[8]==0x01)

на экране неправильный расчет. надо щас все байты в формулах сместить, и думаю щас будет ништяк. щас отпишусь. еще отвт принемает в сериале целиком, не рвет

Точно из-за FF придется все смещать. А то что не режет сообщение это очень гуд. Сколько задержку поставил на буфер? 

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

заработало!!!!!!!!!! задержка была 300, попробовал на 100 и на 51 тоже не рвет. на всякий случай оставлю 100. только нужно пересмотреть, некоторые данные не корректны. TempAir показывает -278, щас все буду перепроверять, RPM и RPMPump правильно значит по байтам угадал. но щас все перепроверю. вот скетч.


    #include <UTouch.h>
  #include <UTFT.h>
  #include <SPI.h>
  
  //pin 20 SCL , 21 SDA датчик реального времени
  #include <Wire.h>
  #include "RTClib.h"
  RTC_DS3231 rtc;       
  
  //датчик наружней температуры
  #include <OneWire.h>
  #define ONE_WIRE_BUS 8   
  OneWire oneWire(ONE_WIRE_BUS);
  #include <DallasTemperature.h>
  DallasTemperature sensors(&oneWire);
  
  //датчик внутринней температуры и влаги
  #include "DHT.h"
  #define DHTPIN 9   
  #define DHTTYPE DHT22 
  DHT dht(DHTPIN, DHTTYPE);
  
  //пины экрана и тача
  UTFT    myGLCD(31,38,39,40,41); 
  UTouch  myTouch(6,5,4,3,2);
 
  //шрифты + не стандартный шрифт GroteskBold16x32.с
  extern uint8_t SmallFont[];
  extern uint8_t BigFont[];
  extern uint8_t SevenSegNumFont[];
  extern uint8_t GroteskBold16x32[];
 
  int x, y;
  char currentPage, selectedUnit;

  float h;
  float t;

  unsigned long prevWatch = 0;
  unsigned long prevDvoet = 0;
  unsigned long prevData = 0;
  bool Dvoet = 0;

  //////////////////////////////////////////////////////////////////////////////
  //все что касается OBD2
  #include <SoftwareSerial.h>
  SoftwareSerial mySerial(10, 11); //RХ,TХ
  #define TX 11

  int length5 = 5;
  int length6 = 6;

  int pid = 1; // очередность пида
  bool Init = 0;

  int PIDTime = 150;    // задержка между посылками запросов пидов, мс
  int PresTime = 9000;    // задержка между посылками запросов присутствия, мс 
  int waitbyte = 1;       // задержка между отправкой байт в сообщении, мс
   
  int MAF = 0;           //26,27 байты
  int BoostPres = 0;     //28,29 байты
  int RPM = 0;           //32,33 байты
  int EGRmg = 0;         //34,35 байты
  int BoostPresCom = 0;  //38,39 байты
  int Speed = 0;        //44,45 байты
  float DesaInjQua = 0.00;   //50,51 байты
  float InjQua = 0.00;    //52,53 байты
  int StaDaliv = 0;  //54,55 байты
  int PumpRPM = 0;   //56,57 байты
  int EGRPul = 0;    //62,63 байты
  int SolenPul = 0;  //64,65 байты
  int SolenPre = 0;  //70,71 байты
  float DesInj = 0.00;    //72,73 байты 
  float ActInj = 0.00;    //16,17 байты
  int TempAir = 0;   //74,75 байты
  int Temp = 0;      //14,15 байты
  int TempOil = 0;   //18,19 байты
  int TempFuel = 0;   //58,59 байты


  // массив байтов принимаемого сообщения
  byte MessageRx[110] = {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};    // запрос температуры 1
  
  unsigned long prevPID = 0;
  unsigned long prevpres = 0;


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

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

  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  void setup() {
    Serial.begin(115200);
    mySerial.begin(10400);
    myGLCD.InitLCD();
    myGLCD.clrScr();
    myTouch.InitTouch();
    myTouch.setPrecision(PREC_MEDIUM);
 
    drawHomeScreen();  
    currentPage = '0'; 
    selectedUnit = '0'; 
  
    Wire.begin();
    rtc.begin();
    dht.begin();
    sensors.begin();
    // строка ниже используется для настройки даты и времени часов (год, месяц, день, часы, минуты, секунды)
    rtc.adjust(DateTime(2017, 7, 6, 17, 35, 0));
    Watch_Temperature ();
    
    pinMode(TX, OUTPUT);
    fastinit();
  }

  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  void loop() {
    
    unsigned long curPID = millis ();
    unsigned long curpres = millis ();
    TimewaitPID = millis ();
    TimewaitInit = millis ();

    if (!Init) {if (!timerenabledInit){ timerwaitInit=TimewaitInit; timerenabledInit=1; initialization(); }
    else {if (TIMEREXPIRED_Init) {timerenabledInit=0;}}}
    else {
      if (curpres - prevpres > PresTime) {present(); prevpres = curpres;}
      if (!timerenabledPID){if (curPID - prevPID > PIDTime) {PIDs(); timerwaitPID=TimewaitPID; timerenabledPID=1; prevPID = curPID;}}
      if (timerenabledPID) {if (TIMEREXPIRED_PID) {timerenabledPID=0;}}
      }
   
    receive ();
    
    unsigned long curWatch = millis();  
    unsigned long curDvoet = millis();  
    unsigned long curData = millis();  

    if (curWatch - prevWatch > 10000)  { Watch_Temperature (); prevWatch = curWatch;}
    if (curDvoet - prevDvoet > 500)  { if (!Dvoet) {myGLCD.print(":", 285, 0);} else {myGLCD.print(" ", 285, 0);} prevDvoet = curDvoet; Dvoet=!Dvoet;}
   Menu();
   //---------------------------------------------------------
   //прописываем где и что мы хотим видеть (пиды)
     if (currentPage == '0') {if (curData - prevData > 200){
       
       myGLCD.setColor(0, 255, 0);
       
       if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
       if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
       myGLCD.printNumI(Speed, 350, 0);
      
      myGLCD.setColor(255, 255, 255); 
      
      //if (--<10) {myGLCD.print("  ", 166, 40); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 40); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 40);
      
      //if (--<10) {myGLCD.print("  ", 166, 75); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 75); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 75);
      
      //if (--<10) {myGLCD.print("  ", 166, 110); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 110); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 110);

      //if (--<10) {myGLCD.print("  ", 166, 145); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 145); }; //затирает третюю цифру
      myGLCD.printNumI(h, 165, 145);

      
      //if (MAF<10) {myGLCD.print("  ", 166, 180); }; //затираем вторую цифру и третью
      if (PumpRPM>10) {myGLCD.print(" ", 198, 180); }; //затираем четвертую цифру
      myGLCD.printNumI(PumpRPM, 165, 180);
        
      if (RPM>100) {myGLCD.print(" ", 198, 215);};   //затираем четвертую цифру
      myGLCD.printNumI(RPM, 165, 215);
      
      //-------------------------------------------
      if (Temp<10) {myGLCD.print("  ", 426, 40); }; //затираем вторую цифру и третью
      if (Temp>10) {myGLCD.print(" ", 442, 40); }; //затирает третюю цифру
      myGLCD.printNumI(Temp, 410, 40);
      
      if (TempOil<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (TempOil>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(TempOil, 410, 75);
      
      if (TempFuel<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      if (TempFuel>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(TempFuel, 410, 110);
  
      myGLCD.printNumI(sensors.getTempCByIndex(0), 410, 145);
      
      myGLCD.printNumI(t, 410, 180);
      
      if (TempAir<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (TempAir>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(TempAir, 410, 215);
     
     prevData = curData;   
    }
   }
   //----------------------------------------------------------
      if (currentPage == '1') {if (curData - prevData > 200){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
      if (StaDaliv<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      if (StaDaliv>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumI(StaDaliv, 395, 40);
      
      if (DesInj<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (DesInj>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(DesInj, 395, 75);
      
      if (ActInj<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      if (ActInj>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(ActInj, 395, 110);
      
      if (DesaInjQua<10) {myGLCD.print("  ", 411, 145); }; //затираем вторую цифру и третью
      if (DesaInjQua>10) {myGLCD.print(" ", 427, 145); }; //затирает третюю цифру  
      myGLCD.printNumI(DesaInjQua, 395, 145);
      
      if (InjQua<10) {myGLCD.print("  ", 411, 180); }; //затираем вторую цифру и третью
      if (InjQua>10) {myGLCD.print(" ", 427, 180); }; //затирает третюю цифру  
      myGLCD.printNumI(InjQua, 395, 180);
      
      if (TempAir<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (TempAir>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(TempAir, 395, 215);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      if (currentPage == '2') {
        if (curData - prevData > 200){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
        if (BoostPres<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      if (BoostPres>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumI(BoostPres, 395, 40);
      
      if (BoostPresCom<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (BoostPresCom>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(BoostPresCom, 395, 75);
      
      if (EGRmg<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      if (EGRmg>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(EGRmg, 395, 110);
      
      if (EGRPul<10) {myGLCD.print("  ", 411, 145); }; //затираем вторую цифру и третью
      if (EGRPul>10) {myGLCD.print(" ", 427, 145); }; //затирает третюю цифру  
      myGLCD.printNumI(DesaInjQua, 395, 145);
      
      if (SolenPul<10) {myGLCD.print("  ", 411, 180); }; //затираем вторую цифру и третью
      if (SolenPul>10) {myGLCD.print(" ", 427, 180); }; //затирает третюю цифру  
      myGLCD.printNumI(SolenPul, 395, 180);
      
      if (SolenPre<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (SolenPre>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(SolenPre, 395, 215);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      if (currentPage == '3') {if (curData - prevData > 200){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
       myGLCD.setColor(255, 255, 255);
        
        prevData = curData;
      }
    }
  }

  ///////////////////////////////////////////////////////////////////////////
  
  //отправка запросов пидов
  void PIDs() {

    if (pid==1){
    for (int i = 0; i < length6; i++) {
    mySerial.write(messagePids[i]);
    delay (waitbyte); } 
   }
}
  void present() {
    for (int i = 0; i < length5; i++) {
    mySerial.write(messagePresent[i]);
    delay (waitbyte); }
   }


/////////////////////////////////////////////////////////////////////////////////////////////
//получение данных из конкретных ответо, конкретные байты
    void receive () {
     if (mySerial.available()) {
     delay(100);
     int k=0;
     byte inbyte=0;
     
     while( mySerial.available() && k < 110) {
     inbyte = mySerial.read();
     MessageRx[k] = inbyte;
     k++;   }
     PIDs();
     Serial.print ("Recieve:   ");
    for (int i = 0; i < k; i++) {
    Serial.print(MessageRx[i],HEX); Serial.print (" ");} 
    Serial.println ("");

   if (MessageRx[0]==0x83 && MessageRx[1]==0xF1 && MessageRx[2]==0x11 && MessageRx[3]==0xC1 && MessageRx[4]==0x6B && MessageRx[5]==0x8F && MessageRx[6]==0x40) {Init=1;
   timerenabledInit=0;  
   }

   if (MessageRx[3]==0x80 && MessageRx[4]==0xF1 && MessageRx[5]==0x11 && MessageRx[6]==0x4C && MessageRx[7]==0x61 && MessageRx[8]==0x01)    {
    
   MAF =  ((MessageRx[29]*256)+MessageRx[30])/10;
    BoostPres =  ((MessageRx[21]*256)+MessageRx[22])/1000;
    RPM =  (MessageRx[35]*256)+MessageRx[36];
    EGRmg =  ((MessageRx[37]*256)+MessageRx[38])/10;
    BoostPresCom =  ((MessageRx[41]*256)+MessageRx[42])/1000;
    Speed =  (MessageRx[47]*256)+MessageRx[48];
    DesaInjQua =  ((MessageRx[53]*256)+MessageRx[54])/100.00;
    InjQua =  ((MessageRx[55]*256)+MessageRx[56])/100.00;
    StaDaliv =  ((MessageRx[57]*256)+MessageRx[58])/100;
    PumpRPM =  (MessageRx[59]*256)+MessageRx[60];
    EGRPul =  ((MessageRx[65]*256)+MessageRx[66])/100;
    SolenPul =  ((MessageRx[67]*256)+MessageRx[68])/100;
    SolenPre =  ((MessageRx[73]*256)+MessageRx[74])/100;
    DesInj =  ((MessageRx[75]*3)+(MessageRx[76])/100.00)+0.3;
    ActInj =  ((MessageRx[19]*3)+(MessageRx[20])/100.00)+0.3;
    TempAir =  ((MessageRx[77]*26)-278)+MessageRx[78]/10;
    Temp =  ((MessageRx[17]*26)-278)+MessageRx[18]/10;
    TempOil =  ((MessageRx[21]*26)-278)+MessageRx[22]/10;
    TempFuel =  ((MessageRx[61]*26)-278)+MessageRx[62]/10;
    timerenabledPID=0; 
   }
   



   
   
   for (int i = 0; i < 110; i++) MessageRx[i]=0;
     }
   }

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

  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //стартовая инициализация
  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 Menu () {
      //Page 0 (home)
      if (currentPage == '0') { 
      if (myTouch.dataAvailable()) {
         myTouch.read();
         x=myTouch.getX(); 
         y=myTouch.getY();
      
      // Button home
      if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }
       
     // Button INF1
     if ((x>=10) && (x<=120) && (y>=275) && (y<=310)) {
        drawFrame(10, 275, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();       
        Watch_Temperature ();
      } 
      
     // Button INF2
     if ((x>=180) && (x<=300) && (y>=275) && (y<=310)) {
        drawFrame(180, 275, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=275) && (y<=310)) {
        drawFrame(350, 275, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();   
        Watch_Temperature ();                                                                   
      } 
     }
    }
   
  //----------------------------------------------------------------------------------------------------------------------------------
    //Page 1
    if (currentPage == '1') { 
      if (myTouch.dataAvailable()) {
         myTouch.read();
         x=myTouch.getX(); 
         y=myTouch.getY();
      
    // Button home
    if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }
       
    // Button INF2
    if ((x>=180) && (x<=300) && (y>=275) && (y<=310)) {
        drawFrame(180, 275, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=275) && (y<=310)) {
        drawFrame(350, 275, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();   
        Watch_Temperature ();                                                                   
      } 
     }
    }
   

  //---------------------------------------------------------------------------------------------------
    //Page 2
    if (currentPage == '2') { 
      if (myTouch.dataAvailable()) {
         myTouch.read();
         x=myTouch.getX(); 
         y=myTouch.getY();
      
    // Button home
    if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }
      
    // Button INF1
    if ((x>=10) && (x<=120) && (y>=275) && (y<=310)) {
        drawFrame(10, 275, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=275) && (y<=310)) {
        drawFrame(350, 275, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();  
        Watch_Temperature ();                                                                    
      } 
    }
  }
  //----------------------------------------------------------
    //Page 3
    if (currentPage == '3') { 
       if (myTouch.dataAvailable()) {
       myTouch.read();
       x=myTouch.getX(); 
       y=myTouch.getY();
      
    //Button ERASE
    //if ((x>=180) && (x<=300) && (y>=275) && (y<=310)) {
        //drawFrame(180, 275, 300, 310); 
        //currentPage = '3';  //потом заменить на дейсвие         
        //myGLCD.clrScr();             
        //drawscreen_three();   //потом заменить на дейсвие                                                                   
      //} 
  
    // Button home
    if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }    
     }
    }
  }
  
  //--------------------------------------------------------
  //прописывает заголовки на всех страницах
   void drawHomeScreen() {
     line() ;
     vista();
     myGLCD.drawLine(239,35,239,248); // линия вертикальная
     myGLCD.print("Ltr/Hor :", 10, 40);
     myGLCD.print("Ltr/100 :", 10, 75);
     myGLCD.print("Fuel  L :", 10, 110);
     myGLCD.print("Humed  %:", 10, 145);
     myGLCD.print("PUMP RPM:", 10, 180);
     myGLCD.print("Engi RPM:", 10, 215);
     myGLCD.print("Motor *C:", 255, 40);
     myGLCD.print("Oil   *C:", 255, 75);
     myGLCD.print("Fuel  *C:", 255, 110);
     myGLCD.print("Inter *C:", 255, 145);
     myGLCD.print("Exter *C:", 255, 180);
     myGLCD.print("IntAir*C:", 255, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonINF2() ;
     buttonCHECK() ;
   }
  //-------------------------------------------------
    void drawscreen_one() {
     line() ;
     vista();
     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("Mass Air Flow     mg/s:", 10, 215);
 
  
     buttonHome() ;
     buttonINF2() ;
     buttonCHECK() ;
     }
  //-------------------------------------------------
   void drawscreen_two() {
     line() ;
     vista();
     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);
  
     buttonHome() ;
     buttonINF1() ;
     buttonCHECK() ;
   }
  //----------------------------------------------------------------------------
   void drawscreen_three() {
     vista();
     myGLCD.setColor(255, 0, 0); // цвет линии красный
     myGLCD.drawLine(1,35,479,35); // линия горизонтальная
     myGLCD.drawLine(1,248,479,248); // линия горизонтальная
     
     buttonHome();
  
     //Button - ERASE
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (180, 275, 300, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (180, 275, 300, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("ERASE", 200, 285);
   }

  ////////////////////////////////////////////////////////////////////////////////////////////////////////
  //координаты тача
  void drawFrame(int x1, int y1, int x2, int y2) {
     myGLCD.setColor(255, 0, 0);
     myGLCD.drawRoundRect (x1, y1, x2, y2);
     while (myTouch.dataAvailable())
     myTouch.read();
     myGLCD.setColor(255, 255, 255); 
   }

  /////////////////////////////////////////////////////////////////////////////////////////////////////////
  //прорисовка кнопок
  void buttonHome() {
     myGLCD.setColor(0,0,0); // цвет кнопки -серый
     myGLCD.fillRoundRect (1, 1, 65, 33);      // расположение кнопки прямоугольника
     myGLCD.setColor(0, 255, 0); // цвет текста зеленый
     myGLCD.drawRoundRect (1, 1, 65, 33);      // кнопка будет рамкой
     myGLCD.setFont(BigFont);                      // размер шрифта
     myGLCD.setBackColor(0,0,0);            // цвет фона области где будет надпись и кнопки
     myGLCD.print("HOME", 1, 10); // центровка строки
    }
  void buttonINF1() {
    myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (10, 275, 120, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (10, 275, 120, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 1", 25, 285);
    }
  void buttonINF2() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (180, 275, 300, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (180, 275, 300, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 2", 200, 285);
    }
  void buttonCHECK() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (350, 275, 470, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (350, 275, 470, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("CHECK", 375, 285);
    }

  ////////////////////////////////////////////////////////////////////////////////////////
  //прорисовка линий
  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 vista(){
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setColor(0, 255, 0);
     myGLCD.setBackColor(0,0,0); 
  }

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

 

MaksVV
Offline
Зарегистрирован: 06.08.2015
viki13viki пишет:
 
вставил PIDs(); в void receve и пошло дело
 
это плохое решение проблемы, будет работать не так как задумано 
 
попробуй так, посмотри проходит ли инициализация 
   #include <UTouch.h>
  #include <UTFT.h>
  #include <SPI.h>
  
  //pin 20 SCL , 21 SDA датчик реального времени
  #include <Wire.h>
  #include "RTClib.h"
  RTC_DS3231 rtc;       
  
  //датчик наружней температуры
  #include <OneWire.h>
  #define ONE_WIRE_BUS 8   
  OneWire oneWire(ONE_WIRE_BUS);
  #include <DallasTemperature.h>
  DallasTemperature sensors(&oneWire);
  
  //датчик внутринней температуры и влаги
  #include "DHT.h"
  #define DHTPIN 9   
  #define DHTTYPE DHT22 
  DHT dht(DHTPIN, DHTTYPE);
  
  //пины экрана и тача
  UTFT    myGLCD(31,38,39,40,41); 
  UTouch  myTouch(6,5,4,3,2);
 
  //шрифты + не стандартный шрифт GroteskBold16x32.с
  extern uint8_t SmallFont[];
  extern uint8_t BigFont[];
  extern uint8_t SevenSegNumFont[];
  extern uint8_t GroteskBold16x32[];
 
  int x, y;
  char currentPage, selectedUnit;

  float h;
  float t;

  unsigned long prevWatch = 0;
  unsigned long prevDvoet = 0;
  unsigned long prevData = 0;
  bool Dvoet = 0;

  //////////////////////////////////////////////////////////////////////////////
  //все что касается OBD2
  #include <SoftwareSerial.h>
  SoftwareSerial mySerial(10, 11); //RХ,TХ
  #define TX 11

  int length5 = 5;
  int length6 = 6;

  int pid = 1; // очередность пида
  bool Init = 0;

  int PIDTime = 150;    // задержка между посылками запросов пидов, мс
  int PresTime = 9000;    // задержка между посылками запросов присутствия, мс 
  int waitbyte = 1;       // задержка между отправкой байт в сообщении, мс
   
  int MAF = 0;           //26,27 байты
  int BoostPres = 0;     //28,29 байты
  int RPM = 0;           //32,33 байты
  int EGRmg = 0;         //34,35 байты
  int BoostPresCom = 0;  //38,39 байты
  int Speed = 0;        //44,45 байты
  float DesaInjQua = 0.00;   //50,51 байты
  float InjQua = 0.00;    //52,53 байты
  int StaDaliv = 0;  //54,55 байты
  int PumpRPM = 0;   //56,57 байты
  int EGRPul = 0;    //62,63 байты
  int SolenPul = 0;  //64,65 байты
  int SolenPre = 0;  //70,71 байты
  float DesInj = 0.00;    //72,73 байты 
  float ActInj = 0.00;    //16,17 байты
  int TempAir = 0;   //74,75 байты
  int Temp = 0;      //14,15 байты
  int TempOil = 0;   //18,19 байты
  int TempFuel = 0;   //58,59 байты


  // массив байтов принимаемого сообщения
  byte MessageRx[110] = {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};    // запрос температуры 1
  
  unsigned long prevPID = 0;
  unsigned long prevpres = 0;


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

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

  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  void setup() {
    myGLCD.InitLCD();
    myGLCD.clrScr();
    myTouch.InitTouch();
    myTouch.setPrecision(PREC_MEDIUM);
 
    drawHomeScreen();  
    currentPage = '0'; 
    selectedUnit = '0'; 
  
    Wire.begin();
    rtc.begin();
    dht.begin();
    sensors.begin();
    Serial.begin (115200);
    // строка ниже используется для настройки даты и времени часов (год, месяц, день, часы, минуты, секунды)
    rtc.adjust(DateTime(2017, 7, 6, 17, 35, 0));
    Watch_Temperature ();
    
    pinMode(TX, OUTPUT);
    fastinit();
  }

  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  void loop() {
    

    unsigned long curPID = millis ();
    unsigned long curpres = millis ();
    TimewaitPID = millis ();
    TimewaitInit = millis ();

    if (!Init) {if (!timerenabledInit){ timerwaitInit=TimewaitInit; timerenabledInit=1; initialization(); }
                else {if (TIMEREXPIRED_Init) {timerenabledInit=0;}}}
    else {
      if (curpres - prevpres > PresTime) {present(); prevpres = curpres;}
      if (!timerenabledPID){if (curPID - prevPID > PIDTime) {PIDs(); timerwaitPID=TimewaitPID; timerenabledPID=1; prevPID = curPID;}}
      if (timerenabledPID) {if (TIMEREXPIRED_PID) {timerenabledPID=0;}}
      }
  
    receive ();
    
    unsigned long curWatch = millis();  
    unsigned long curDvoet = millis();  
    unsigned long curData = millis();  

    if (curWatch - prevWatch > 10000)  { Watch_Temperature (); prevWatch = curWatch;}
    if (curDvoet - prevDvoet > 500)  { if (!Dvoet) {myGLCD.print(":", 285, 0);} else {myGLCD.print(" ", 285, 0);} prevDvoet = curDvoet; Dvoet=!Dvoet;}
   Menu();
   //---------------------------------------------------------
   //прописываем где и что мы хотим видеть (пиды)
     if (currentPage == '0') {if (curData - prevData > 200){
       
       myGLCD.setColor(0, 255, 0);
       
       if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
       if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
       myGLCD.printNumI(Speed, 350, 0);
      
      myGLCD.setColor(255, 255, 255); 
      
      //if (--<10) {myGLCD.print("  ", 166, 40); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 40); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 40);
      
      //if (--<10) {myGLCD.print("  ", 166, 75); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 75); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 75);
      
      //if (--<10) {myGLCD.print("  ", 166, 110); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 110); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 110);

      //if (--<10) {myGLCD.print("  ", 166, 145); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 145); }; //затирает третюю цифру
      myGLCD.printNumI(h, 165, 145);

      
      //if (MAF<10) {myGLCD.print("  ", 166, 180); }; //затираем вторую цифру и третью
      if (PumpRPM>10) {myGLCD.print(" ", 198, 180); }; //затираем четвертую цифру
      myGLCD.printNumI(PumpRPM, 165, 180);
        
      if (RPM>100) {myGLCD.print(" ", 198, 215);};   //затираем четвертую цифру
      myGLCD.printNumI(RPM, 165, 215);
      
      //-------------------------------------------
      if (Temp<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      if (Temp>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumI(Temp, 410, 40);
      
      if (TempOil<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (TempOil>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(TempOil, 410, 75);
      
      if (TempFuel<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      if (TempFuel>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(TempFuel, 410, 110);
  
      myGLCD.printNumI(sensors.getTempCByIndex(0), 410, 145);
      
      myGLCD.printNumI(t, 410, 180);
      
      if (TempAir<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (TempAir>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(TempAir, 410, 215);
     
     prevData = curData;   
    }
   }
   //----------------------------------------------------------
      if (currentPage == '1') {if (curData - prevData > 200){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
      if (StaDaliv<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      if (StaDaliv>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumI(StaDaliv, 395, 40);
      
      if (DesInj<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (DesInj>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(DesInj, 395, 75);
      
      if (ActInj<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      if (ActInj>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(ActInj, 395, 110);
      
      if (DesaInjQua<10) {myGLCD.print("  ", 411, 145); }; //затираем вторую цифру и третью
      if (DesaInjQua>10) {myGLCD.print(" ", 427, 145); }; //затирает третюю цифру  
      myGLCD.printNumI(DesaInjQua, 395, 145);
      
      if (InjQua<10) {myGLCD.print("  ", 411, 180); }; //затираем вторую цифру и третью
      if (InjQua>10) {myGLCD.print(" ", 427, 180); }; //затирает третюю цифру  
      myGLCD.printNumI(InjQua, 395, 180);
      
      if (TempAir<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (TempAir>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(TempAir, 395, 215);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      if (currentPage == '2') {
        if (curData - prevData > 200){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
        if (BoostPres<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      if (BoostPres>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumI(BoostPres, 395, 40);
      
      if (BoostPresCom<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (BoostPresCom>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(BoostPresCom, 395, 75);
      
      if (EGRmg<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      if (EGRmg>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(EGRmg, 395, 110);
      
      if (EGRPul<10) {myGLCD.print("  ", 411, 145); }; //затираем вторую цифру и третью
      if (EGRPul>10) {myGLCD.print(" ", 427, 145); }; //затирает третюю цифру  
      myGLCD.printNumI(DesaInjQua, 395, 145);
      
      if (SolenPul<10) {myGLCD.print("  ", 411, 180); }; //затираем вторую цифру и третью
      if (SolenPul>10) {myGLCD.print(" ", 427, 180); }; //затирает третюю цифру  
      myGLCD.printNumI(SolenPul, 395, 180);
      
      if (SolenPre<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (SolenPre>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(SolenPre, 395, 215);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      if (currentPage == '3') {if (curData - prevData > 200){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
       myGLCD.setColor(255, 255, 255);
        
        prevData = curData;
      }
    }
  }

  ///////////////////////////////////////////////////////////////////////////
  
  //отправка запросов пидов
  void PIDs() {
Serial.println ("Otpravil zapros 21 01");
    if (pid==1){
    for (int i = 0; i < length6; i++) {
    mySerial.write(messagePids[i]);
    delay (waitbyte); } 
   }
}
  void present() {
    for (int i = 0; i < length5; i++) {
    mySerial.write(messagePresent[i]);
    delay (waitbyte); }
   }


/////////////////////////////////////////////////////////////////////////////////////////////
//получение данных из конкретных ответо, конкретные байты
    void receive () {
     if (mySerial.available()) {
     delay(51);
     int k=0;
     byte inbyte=0;
     
     while( mySerial.available() && k < 110) {
     inbyte = mySerial.read();
     MessageRx[k] = inbyte;
     k++;   }
     
     Serial.print ("Recieve:   ");
    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) {Init=1;
   timerenabledInit=0;  Serial.println ("     Initialization OK!!!!:  ");
   }

   if (MessageRx[0]==0x80 && MessageRx[1]==0xF1 && MessageRx[2]==0x11 && MessageRx[3]==0x4C && MessageRx[4]==0x61 && MessageRx[5]==0x01)    {
    
   MAF =  ((MessageRx[26]*256)+MessageRx[27])/10;
    BoostPres =  ((MessageRx[28]*256)+MessageRx[29])/1000;
    RPM =  (MessageRx[32]*256)+MessageRx[33];
    EGRmg =  ((MessageRx[34]*256)+MessageRx[35])/10;
    BoostPresCom =  ((MessageRx[38]*256)+MessageRx[39])/1000;
    Speed =  (MessageRx[44]*256)+MessageRx[45];
    DesaInjQua =  ((MessageRx[50]*256)+MessageRx[51])/100.00;
    InjQua =  ((MessageRx[52]*256)+MessageRx[53])/100.00;
    StaDaliv =  ((MessageRx[54]*256)+MessageRx[55])/100;
    PumpRPM =  (MessageRx[56]*256)+MessageRx[57];
    EGRPul =  ((MessageRx[62]*256)+MessageRx[63])/100;
    SolenPul =  ((MessageRx[64]*256)+MessageRx[65])/100;
    SolenPre =  ((MessageRx[70]*256)+MessageRx[71])/100;
    DesInj =  ((MessageRx[72]*3)+(MessageRx[73])/100.00)+0.3;
    ActInj =  ((MessageRx[16]*3)+(MessageRx[17])/100.00)+0.3;
    TempAir =  ((MessageRx[74]*26)-278)+MessageRx[75]/10;
    Temp =  ((MessageRx[14]*26)-278)+MessageRx[15]/10;
    TempOil =  ((MessageRx[18]*26)-278)+MessageRx[19]/10;
    TempFuel =  ((MessageRx[58]*26)-278)+MessageRx[59]/10;
    timerenabledPID=0; 
   }
   



   
   
   for (int i = 0; i < 110; i++) MessageRx[i]=0;
     }
   }

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

  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //стартовая инициализация
  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 Menu () {
      //Page 0 (home)
      if (currentPage == '0') { 
      if (myTouch.dataAvailable()) {
         myTouch.read();
         x=myTouch.getX(); 
         y=myTouch.getY();
      
      // Button home
      if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }
       
     // Button INF1
     if ((x>=10) && (x<=120) && (y>=275) && (y<=310)) {
        drawFrame(10, 275, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();       
        Watch_Temperature ();
      } 
      
     // Button INF2
     if ((x>=180) && (x<=300) && (y>=275) && (y<=310)) {
        drawFrame(180, 275, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=275) && (y<=310)) {
        drawFrame(350, 275, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();   
        Watch_Temperature ();                                                                   
      } 
     }
    }
   
  //----------------------------------------------------------------------------------------------------------------------------------
    //Page 1
    if (currentPage == '1') { 
      if (myTouch.dataAvailable()) {
         myTouch.read();
         x=myTouch.getX(); 
         y=myTouch.getY();
      
    // Button home
    if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }
       
    // Button INF2
    if ((x>=180) && (x<=300) && (y>=275) && (y<=310)) {
        drawFrame(180, 275, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=275) && (y<=310)) {
        drawFrame(350, 275, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();   
        Watch_Temperature ();                                                                   
      } 
     }
    }
   

  //---------------------------------------------------------------------------------------------------
    //Page 2
    if (currentPage == '2') { 
      if (myTouch.dataAvailable()) {
         myTouch.read();
         x=myTouch.getX(); 
         y=myTouch.getY();
      
    // Button home
    if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }
      
    // Button INF1
    if ((x>=10) && (x<=120) && (y>=275) && (y<=310)) {
        drawFrame(10, 275, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=275) && (y<=310)) {
        drawFrame(350, 275, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();  
        Watch_Temperature ();                                                                    
      } 
    }
  }
  //----------------------------------------------------------
    //Page 3
    if (currentPage == '3') { 
       if (myTouch.dataAvailable()) {
       myTouch.read();
       x=myTouch.getX(); 
       y=myTouch.getY();
      
    //Button ERASE
    //if ((x>=180) && (x<=300) && (y>=275) && (y<=310)) {
        //drawFrame(180, 275, 300, 310); 
        //currentPage = '3';  //потом заменить на дейсвие         
        //myGLCD.clrScr();             
        //drawscreen_three();   //потом заменить на дейсвие                                                                   
      //} 
  
    // Button home
    if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }    
     }
    }
  }
  
  //--------------------------------------------------------
  //прописывает заголовки на всех страницах
   void drawHomeScreen() {
     line() ;
     vista();
     myGLCD.drawLine(239,35,239,248); // линия вертикальная
     myGLCD.print("Ltr/Hor :", 10, 40);
     myGLCD.print("Ltr/100 :", 10, 75);
     myGLCD.print("Fuel  L :", 10, 110);
     myGLCD.print("Humed  %:", 10, 145);
     myGLCD.print("PUMP RPM:", 10, 180);
     myGLCD.print("Engi RPM:", 10, 215);
     myGLCD.print("Motor *C:", 255, 40);
     myGLCD.print("Oil   *C:", 255, 75);
     myGLCD.print("Fuel  *C:", 255, 110);
     myGLCD.print("Inter *C:", 255, 145);
     myGLCD.print("Exter *C:", 255, 180);
     myGLCD.print("IntAir*C:", 255, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonINF2() ;
     buttonCHECK() ;
   }
  //-------------------------------------------------
    void drawscreen_one() {
     line() ;
     vista();
     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("Mass Air Flow     mg/s:", 10, 215);
 
  
     buttonHome() ;
     buttonINF2() ;
     buttonCHECK() ;
     }
  //-------------------------------------------------
   void drawscreen_two() {
     line() ;
     vista();
     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);
  
     buttonHome() ;
     buttonINF1() ;
     buttonCHECK() ;
   }
  //----------------------------------------------------------------------------
   void drawscreen_three() {
     vista();
     myGLCD.setColor(255, 0, 0); // цвет линии красный
     myGLCD.drawLine(1,35,479,35); // линия горизонтальная
     myGLCD.drawLine(1,248,479,248); // линия горизонтальная
     
     buttonHome();
  
     //Button - ERASE
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (180, 275, 300, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (180, 275, 300, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("ERASE", 200, 285);
   }

  ////////////////////////////////////////////////////////////////////////////////////////////////////////
  //координаты тача
  void drawFrame(int x1, int y1, int x2, int y2) {
     myGLCD.setColor(255, 0, 0);
     myGLCD.drawRoundRect (x1, y1, x2, y2);
     while (myTouch.dataAvailable())
     myTouch.read();
     myGLCD.setColor(255, 255, 255); 
   }

  /////////////////////////////////////////////////////////////////////////////////////////////////////////
  //прорисовка кнопок
  void buttonHome() {
     myGLCD.setColor(0,0,0); // цвет кнопки -серый
     myGLCD.fillRoundRect (1, 1, 65, 33);      // расположение кнопки прямоугольника
     myGLCD.setColor(0, 255, 0); // цвет текста зеленый
     myGLCD.drawRoundRect (1, 1, 65, 33);      // кнопка будет рамкой
     myGLCD.setFont(BigFont);                      // размер шрифта
     myGLCD.setBackColor(0,0,0);            // цвет фона области где будет надпись и кнопки
     myGLCD.print("HOME", 1, 10); // центровка строки
    }
  void buttonINF1() {
    myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (10, 275, 120, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (10, 275, 120, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 1", 25, 285);
    }
  void buttonINF2() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (180, 275, 300, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (180, 275, 300, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 2", 200, 285);
    }
  void buttonCHECK() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (350, 275, 470, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (350, 275, 470, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("CHECK", 375, 285);
    }

  ////////////////////////////////////////////////////////////////////////////////////////
  //прорисовка линий
  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 vista(){
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setColor(0, 255, 0);
     myGLCD.setBackColor(0,0,0); 
  }

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

 

 

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

через час...... попробую

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

.

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

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

Recieve:   0 FF FF 83 F1 11 C1 6B 8F 40 
Recieve:   FF FF 83 F1 11 C1 6B 8F 40 
     Initialization OK!!!!:  
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2C 0 0 D E5 0 0 2 72 0 0 0 0 4 39 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 AF 0 0 C CC 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E5 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 70 0 0 0 0 8 AF 0 0 C CC 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E5 0 0 2 72 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 70 0 0 0 0 8 AF 0 0 C CC 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2C 0 0 D E5 0 0 2 72 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 70 0 0 0 0 8 B0 0 0 C CF 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E5 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B0 0 0 C CF 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E5 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 70 0 0 0 0 8 AF 0 0 C CC 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E5 0 0 2 72 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 AF 0 0 C CC 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E5 0 0 2 72 0 0 0 0 4 3F 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 AF 0 0 C CC 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E3 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 2C 0 0 0 0 8 AF 0 0 C CC 
Otpravil zapros 21 01
Recieve:   FF FF FF 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E3 0 0 2 72 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B0 0 0 C CF 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E3 0 0 2 71 0 0 0 0 4 34 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B0 0 0 C CF 
Otpravil zapros 21 01
Recieve:   FF FF FF FF FF 83 F1 11 7F 3E 12 54 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E3 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B0 0 0 C CF 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E3 0 0 2 71 0 0 0 0 4 39 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B0 0 0 C CF 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E3 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B0 0 0 C CF 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2C 0 0 D E1 0 0 2 71 0 0 0 0 4 39 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B0 0 0 C CF 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E1 0 0 2 71 0 0 0 0 4 3C 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B0 0 0 C CF 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E3 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 70 0 0 0 0 8 B0 0 0 C CF 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2C 0 0 D E1 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B0 0 0 C CF 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E1 0 0 2 71 0 0 0 0 4 3E 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 70 0 0 0 0 8 B0 0 0 C CF 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E3 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 70 0 0 0 0 8 B0 0 0 C CF 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E1 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E1 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 2C 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E1 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E1 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6C 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E1 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E1 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 70 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2C 0 0 D E3 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 70 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D DF 0 0 2 71 0 0 0 0 4 37 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 70 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D E1 0 0 2 71 0 0 0 0 4 3C 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF FF FF 83 F1 11 7F 3E 12 54 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D DF 0 0 2 72 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D DF 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D DE 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2C 0 0 D DF 0 0 2 71 0 0 0 0 4 39 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 2C 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D DF 0 0 2 70 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2C 0 0 D DF 0 0 2 71 0 0 0 0 4 3C 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 2C 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D DF 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D DF 0 0 2 70 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 70 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D DF 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D DE 0 0 2 70 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6C 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D DE 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 70 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2C 0 0 D DE 0 0 2 70 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2C 0 0 D DE 0 0 2 71 0 0 0 0 4 39 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6C 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2C 0 0 D DE 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2C 0 0 D DE 0 0 2 71 0 0 0 0 4 39 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6C 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2C 0 0 D DE 0 0 2 71 0 0 0 0 4 39 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2E 0 0 D DC 0 0 2 70 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 E 2C 0 0 D DE 0 0 2 71 0 0 0 0 4 3A 0 0 0 0 32 C8 3 9F 4 29 3 20 E5 62 0 0 0 0 E 6E 0 0 0 0 8 B1 0 0 C D1 
Otpravil zapros 21 01
Recieve:   FF FF FF FF FF 83 F1 11 7F 3E 12 54 

а вот скетч подправил байты в формулах. и задержку и в проверке от 3 байта осчет. 

 #include <UTouch.h>
  #include <UTFT.h>
  #include <SPI.h>
  
  //pin 20 SCL , 21 SDA датчик реального времени
  #include <Wire.h>
  #include "RTClib.h"
  RTC_DS3231 rtc;       
  
  //датчик наружней температуры
  #include <OneWire.h>
  #define ONE_WIRE_BUS 8   
  OneWire oneWire(ONE_WIRE_BUS);
  #include <DallasTemperature.h>
  DallasTemperature sensors(&oneWire);
  
  //датчик внутринней температуры и влаги
  #include "DHT.h"
  #define DHTPIN 9   
  #define DHTTYPE DHT22 
  DHT dht(DHTPIN, DHTTYPE);
  
  //пины экрана и тача
  UTFT    myGLCD(31,38,39,40,41); 
  UTouch  myTouch(6,5,4,3,2);
 
  //шрифты + не стандартный шрифт GroteskBold16x32.с
  extern uint8_t SmallFont[];
  extern uint8_t BigFont[];
  extern uint8_t SevenSegNumFont[];
  extern uint8_t GroteskBold16x32[];
 
  int x, y;
  char currentPage, selectedUnit;

  float h;
  float t;

  unsigned long prevWatch = 0;
  unsigned long prevDvoet = 0;
  unsigned long prevData = 0;
  bool Dvoet = 0;

  //////////////////////////////////////////////////////////////////////////////
  //все что касается OBD2
  #include <SoftwareSerial.h>
  SoftwareSerial mySerial(10, 11); //RХ,TХ
  #define TX 11

  int length5 = 5;
  int length6 = 6;

  int pid = 1; // очередность пида
  bool Init = 0;

  int PIDTime = 150;    // задержка между посылками запросов пидов, мс
  int PresTime = 9000;    // задержка между посылками запросов присутствия, мс 
  int waitbyte = 1;       // задержка между отправкой байт в сообщении, мс
   
  int MAF = 0;           //26,27 байты
  int BoostPres = 0;     //28,29 байты
  int RPM = 0;           //32,33 байты
  int EGRmg = 0;         //34,35 байты
  int BoostPresCom = 0;  //38,39 байты
  int Speed = 0;        //44,45 байты
  float DesaInjQua = 0.00;   //50,51 байты
  float InjQua = 0.00;    //52,53 байты
  float StaDaliv = 0;  //54,55 байты
  int PumpRPM = 0;   //56,57 байты
  int EGRPul = 0;    //62,63 байты
  int SolenPul = 0;  //64,65 байты
  int SolenPre = 0;  //70,71 байты
  int DesInj = 0.00;    //72,73 байты 
  float ActInj = 0.00;    //16,17 байты
  int TempAir = 0;   //74,75 байты
  int Temp = 0;      //14,15 байты
  int TempOil = 0;   //18,19 байты
  int TempFuel = 0;   //58,59 байты


  // массив байтов принимаемого сообщения
  byte MessageRx[110] = {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};    // запрос температуры 1
  
  unsigned long prevPID = 0;
  unsigned long prevpres = 0;


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

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

  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  void setup() {
    Serial.begin(115200);
    mySerial.begin(10400);

    myGLCD.InitLCD();
    myGLCD.clrScr();
    myTouch.InitTouch();
    myTouch.setPrecision(PREC_MEDIUM);
 
    drawHomeScreen();  
    currentPage = '0'; 
    selectedUnit = '0'; 
  
    Wire.begin();
    rtc.begin();
    dht.begin();
    sensors.begin();
    Serial.begin (115200);
    // строка ниже используется для настройки даты и времени часов (год, месяц, день, часы, минуты, секунды)
    rtc.adjust(DateTime(2017, 7, 6, 17, 35, 0));
    Watch_Temperature ();
    
    pinMode(TX, OUTPUT);
    fastinit();
  }

  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  void loop() {
    

    unsigned long curPID = millis ();
    unsigned long curpres = millis ();
    TimewaitPID = millis ();
    TimewaitInit = millis ();

    if (!Init) {if (!timerenabledInit){ timerwaitInit=TimewaitInit; timerenabledInit=1; initialization(); }
                else {if (TIMEREXPIRED_Init) {timerenabledInit=0;}}}
    else {
      if (curpres - prevpres > PresTime) {present(); prevpres = curpres;}
      if (!timerenabledPID){if (curPID - prevPID > PIDTime) {PIDs(); timerwaitPID=TimewaitPID; timerenabledPID=1; prevPID = curPID;}}
      if (timerenabledPID) {if (TIMEREXPIRED_PID) {timerenabledPID=0;}}
      }
  
    receive ();
    
    unsigned long curWatch = millis();  
    unsigned long curDvoet = millis();  
    unsigned long curData = millis();  

    if (curWatch - prevWatch > 10000)  { Watch_Temperature (); prevWatch = curWatch;}
    if (curDvoet - prevDvoet > 500)  { if (!Dvoet) {myGLCD.print(":", 285, 0);} else {myGLCD.print(" ", 285, 0);} prevDvoet = curDvoet; Dvoet=!Dvoet;}
   Menu();
   //---------------------------------------------------------
   //прописываем где и что мы хотим видеть (пиды)
     if (currentPage == '0') {if (curData - prevData > 200){
       
       myGLCD.setColor(0, 255, 0);
       
       if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
       if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
       myGLCD.printNumI(Speed, 350, 0);
      
      myGLCD.setColor(255, 255, 255); 
      
      //if (--<10) {myGLCD.print("  ", 166, 40); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 40); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 40);
      
      //if (--<10) {myGLCD.print("  ", 166, 75); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 75); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 75);
      
      //if (--<10) {myGLCD.print("  ", 166, 110); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 110); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 110);

      //if (--<10) {myGLCD.print("  ", 166, 145); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 145); }; //затирает третюю цифру
      myGLCD.printNumI(h, 165, 145);

      
      //if (MAF<10) {myGLCD.print("  ", 166, 180); }; //затираем вторую цифру и третью
      if (PumpRPM>10) {myGLCD.print(" ", 198, 180); }; //затираем четвертую цифру
      myGLCD.printNumI(PumpRPM, 165, 180);
        
      if (RPM>100) {myGLCD.print(" ", 198, 215);};   //затираем четвертую цифру
      myGLCD.printNumI(RPM, 165, 215);
      
      //-------------------------------------------
      if (Temp<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      if (Temp>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumI(Temp, 410, 40);
      
      if (TempOil<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (TempOil>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(TempOil, 410, 75);
      
      if (TempFuel<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      if (TempFuel>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(TempFuel, 410, 110);
  
      myGLCD.printNumI(sensors.getTempCByIndex(0), 410, 145);
      
      myGLCD.printNumI(t, 410, 180);
      
      if (TempAir<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (TempAir>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(TempAir, 410, 215);
     
     prevData = curData;   
    }
   }
   //----------------------------------------------------------
      if (currentPage == '1') {if (curData - prevData > 200){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
      if (StaDaliv<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      if (StaDaliv>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumI(StaDaliv, 395, 40);
      
      if (DesInj<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (DesInj>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(DesInj, 395, 75);
      
      if (ActInj<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      if (ActInj>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(ActInj, 395, 110);
      
      if (DesaInjQua<10) {myGLCD.print("  ", 411, 145); }; //затираем вторую цифру и третью
      if (DesaInjQua>10) {myGLCD.print(" ", 427, 145); }; //затирает третюю цифру  
      myGLCD.printNumI(DesaInjQua, 395, 145);
      
      if (InjQua<10) {myGLCD.print("  ", 411, 180); }; //затираем вторую цифру и третью
      if (InjQua>10) {myGLCD.print(" ", 427, 180); }; //затирает третюю цифру  
      myGLCD.printNumI(InjQua, 395, 180);
      
      if (TempAir<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (TempAir>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(TempAir, 395, 215);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      if (currentPage == '2') {
        if (curData - prevData > 200){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
        if (BoostPres<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      if (BoostPres>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumI(BoostPres, 395, 40);
      
      if (BoostPresCom<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (BoostPresCom>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(BoostPresCom, 395, 75);
      
      if (EGRmg<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      if (EGRmg>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(EGRmg, 395, 110);
      
      if (EGRPul<10) {myGLCD.print("  ", 411, 145); }; //затираем вторую цифру и третью
      if (EGRPul>10) {myGLCD.print(" ", 427, 145); }; //затирает третюю цифру  
      myGLCD.printNumI(DesaInjQua, 395, 145);
      
      if (SolenPul<10) {myGLCD.print("  ", 411, 180); }; //затираем вторую цифру и третью
      if (SolenPul>10) {myGLCD.print(" ", 427, 180); }; //затирает третюю цифру  
      myGLCD.printNumI(SolenPul, 395, 180);
      
      if (SolenPre<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (SolenPre>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(SolenPre, 395, 215);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      if (currentPage == '3') {if (curData - prevData > 200){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
       myGLCD.setColor(255, 255, 255);
        
        prevData = curData;
      }
    }
  }

  ///////////////////////////////////////////////////////////////////////////
  
  //отправка запросов пидов
  void PIDs() {
Serial.println ("Otpravil zapros 21 01");
    if (pid==1){
    for (int i = 0; i < length6; i++) {
    mySerial.write(messagePids[i]);
    delay (waitbyte); } 
   }
}
  void present() {
    for (int i = 0; i < length5; i++) {
    mySerial.write(messagePresent[i]);
    delay (waitbyte); }
   }


/////////////////////////////////////////////////////////////////////////////////////////////
//получение данных из конкретных ответо, конкретные байты
    void receive () {
     if (mySerial.available()) {
     delay(200);
     int k=0;
     byte inbyte=0;
     
     while( mySerial.available() && k < 110) {
     inbyte = mySerial.read();
     MessageRx[k] = inbyte;
     k++;   }
     
     Serial.print ("Recieve:   ");
    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) {Init=1;
   timerenabledInit=0;  Serial.println ("     Initialization OK!!!!:  ");
   }

   if (MessageRx[3]==0x80 && MessageRx[4]==0xF1 && MessageRx[5]==0x11 && MessageRx[6]==0x4C && MessageRx[7]==0x61 && MessageRx[8]==0x01)    {
    
   MAF =  ((MessageRx[29]*256)+MessageRx[30])/10;
    BoostPres =  ((MessageRx[31]*256)+MessageRx[32])/1000;
    RPM =  (MessageRx[35]*256)+MessageRx[36];
    EGRmg =  ((MessageRx[37]*256)+MessageRx[38])/10;
    BoostPresCom =  ((MessageRx[41]*256)+MessageRx[42])/1000;
    Speed =  (MessageRx[47]*256)+MessageRx[48];
    DesaInjQua =  ((MessageRx[53]*256)+MessageRx[54])/100.00;
    InjQua =  ((MessageRx[55]*256)+MessageRx[56])/100.00;
    StaDaliv =  ((MessageRx[57]*256)+MessageRx[58])/100;
    PumpRPM =  (MessageRx[59]*256)+MessageRx[60];
    EGRPul =  ((MessageRx[65]*256)+MessageRx[66])/100;
    SolenPul =  ((MessageRx[67]*256)+MessageRx[68])/100;
    SolenPre =  ((MessageRx[76]*256)+MessageRx[77])/100;
    DesInj =  ((MessageRx[75]*3)+(MessageRx[76])/100.00)+0.3;
    ActInj =  ((MessageRx[19]*3)+(MessageRx[20])/100.00)+0.3;
    TempAir =  ((MessageRx[77]*26)-278)+MessageRx[78]/10;
    Temp =  ((MessageRx[17]*26)-278)+MessageRx[18]/10;
    TempOil =  ((MessageRx[21]*26)-278)+MessageRx[22]/10;
    TempFuel =  ((MessageRx[61]*26)-278)+MessageRx[62]/10;
    timerenabledPID=0; 
   }
   



   
   
   for (int i = 0; i < 110; i++) MessageRx[i]=0;
     }
   }

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

  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //стартовая инициализация
  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 Menu () {
      //Page 0 (home)
      if (currentPage == '0') { 
      if (myTouch.dataAvailable()) {
         myTouch.read();
         x=myTouch.getX(); 
         y=myTouch.getY();
      
      // Button home
      if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }
       
     // Button INF1
     if ((x>=10) && (x<=120) && (y>=275) && (y<=310)) {
        drawFrame(10, 275, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();       
        Watch_Temperature ();
      } 
      
     // Button INF2
     if ((x>=180) && (x<=300) && (y>=275) && (y<=310)) {
        drawFrame(180, 275, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=275) && (y<=310)) {
        drawFrame(350, 275, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();   
        Watch_Temperature ();                                                                   
      } 
     }
    }
   
  //----------------------------------------------------------------------------------------------------------------------------------
    //Page 1
    if (currentPage == '1') { 
      if (myTouch.dataAvailable()) {
         myTouch.read();
         x=myTouch.getX(); 
         y=myTouch.getY();
      
    // Button home
    if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }
       
    // Button INF2
    if ((x>=180) && (x<=300) && (y>=275) && (y<=310)) {
        drawFrame(180, 275, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=275) && (y<=310)) {
        drawFrame(350, 275, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();   
        Watch_Temperature ();                                                                   
      } 
     }
    }
   

  //---------------------------------------------------------------------------------------------------
    //Page 2
    if (currentPage == '2') { 
      if (myTouch.dataAvailable()) {
         myTouch.read();
         x=myTouch.getX(); 
         y=myTouch.getY();
      
    // Button home
    if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }
      
    // Button INF1
    if ((x>=10) && (x<=120) && (y>=275) && (y<=310)) {
        drawFrame(10, 275, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=275) && (y<=310)) {
        drawFrame(350, 275, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();  
        Watch_Temperature ();                                                                    
      } 
    }
  }
  //----------------------------------------------------------
    //Page 3
    if (currentPage == '3') { 
       if (myTouch.dataAvailable()) {
       myTouch.read();
       x=myTouch.getX(); 
       y=myTouch.getY();
      
    //Button ERASE
    //if ((x>=180) && (x<=300) && (y>=275) && (y<=310)) {
        //drawFrame(180, 275, 300, 310); 
        //currentPage = '3';  //потом заменить на дейсвие         
        //myGLCD.clrScr();             
        //drawscreen_three();   //потом заменить на дейсвие                                                                   
      //} 
  
    // Button home
    if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        selectedUnit == 0;
        myGLCD.clrScr();
        drawHomeScreen(); 
        Watch_Temperature ();
      }    
     }
    }
  }
  
  //--------------------------------------------------------
  //прописывает заголовки на всех страницах
   void drawHomeScreen() {
     line() ;
     vista();
     myGLCD.drawLine(239,35,239,248); // линия вертикальная
     myGLCD.print("Ltr/Hor :", 10, 40);
     myGLCD.print("Ltr/100 :", 10, 75);
     myGLCD.print("Fuel  L :", 10, 110);
     myGLCD.print("Humed  %:", 10, 145);
     myGLCD.print("PUMP RPM:", 10, 180);
     myGLCD.print("Engi RPM:", 10, 215);
     myGLCD.print("Motor *C:", 255, 40);
     myGLCD.print("Oil   *C:", 255, 75);
     myGLCD.print("Fuel  *C:", 255, 110);
     myGLCD.print("Inter *C:", 255, 145);
     myGLCD.print("Exter *C:", 255, 180);
     myGLCD.print("IntAir*C:", 255, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonINF2() ;
     buttonCHECK() ;
   }
  //-------------------------------------------------
    void drawscreen_one() {
     line() ;
     vista();
     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("Mass Air Flow     mg/s:", 10, 215);
 
  
     buttonHome() ;
     buttonINF2() ;
     buttonCHECK() ;
     }
  //-------------------------------------------------
   void drawscreen_two() {
     line() ;
     vista();
     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);
  
     buttonHome() ;
     buttonINF1() ;
     buttonCHECK() ;
   }
  //----------------------------------------------------------------------------
   void drawscreen_three() {
     vista();
     myGLCD.setColor(255, 0, 0); // цвет линии красный
     myGLCD.drawLine(1,35,479,35); // линия горизонтальная
     myGLCD.drawLine(1,248,479,248); // линия горизонтальная
     
     buttonHome();
  
     //Button - ERASE
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (180, 275, 300, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (180, 275, 300, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("ERASE", 200, 285);
   }

  ////////////////////////////////////////////////////////////////////////////////////////////////////////
  //координаты тача
  void drawFrame(int x1, int y1, int x2, int y2) {
     myGLCD.setColor(255, 0, 0);
     myGLCD.drawRoundRect (x1, y1, x2, y2);
     while (myTouch.dataAvailable())
     myTouch.read();
     myGLCD.setColor(255, 255, 255); 
   }

  /////////////////////////////////////////////////////////////////////////////////////////////////////////
  //прорисовка кнопок
  void buttonHome() {
     myGLCD.setColor(0,0,0); // цвет кнопки -серый
     myGLCD.fillRoundRect (1, 1, 65, 33);      // расположение кнопки прямоугольника
     myGLCD.setColor(0, 255, 0); // цвет текста зеленый
     myGLCD.drawRoundRect (1, 1, 65, 33);      // кнопка будет рамкой
     myGLCD.setFont(BigFont);                      // размер шрифта
     myGLCD.setBackColor(0,0,0);            // цвет фона области где будет надпись и кнопки
     myGLCD.print("HOME", 1, 10); // центровка строки
    }
  void buttonINF1() {
    myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (10, 275, 120, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (10, 275, 120, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 1", 25, 285);
    }
  void buttonINF2() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (180, 275, 300, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (180, 275, 300, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 2", 200, 285);
    }
  void buttonCHECK() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (350, 275, 470, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (350, 275, 470, 310);
     myGLCD.setFont(BigFont);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("CHECK", 375, 285);
    }

  ////////////////////////////////////////////////////////////////////////////////////////
  //прорисовка линий
  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 vista(){
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setColor(0, 255, 0);
     myGLCD.setBackColor(0,0,0); 
  }

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

щас буду допиливаит, смотреть формулы , проверю номера байтов , вообщем все перепроверю. да еще в сериале при работе с эмулятором у меня выводило данные с запятой  типа 22,1 на экране 22. читал чуток про float что он для таких целей, увидел что ты заявил на некоторые пиды но не помогает. я попробовал заявить на StarDavil должно показывать 22,1 , не помогло все равно 22

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

есть проблем .  ответ 80 F1 11 4C 61 1  где 4С(DEC=76 байт) число байт начиная от единицы. в опкоме четко получает 76 байт. у меня же принемает только 55 байт, поэтому данные отображаются не корректно, гдето теряется 21 байт. делал задержку 250, все равно тольк 55 байт. вот гдето тут собака порылась. может ему кидать как обком идентификацию 1 и 2? сейчас попробую