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

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

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

#include <UTouch.h>
  #include <UTFT.h>
  #include <SPI.h>
  
  #include <Wire.h>
  #include "RTClib.h"
  RTC_DS3231 rtc;       //pin 20 SCL , 21 SDA
  
  #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);
 
  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;

/////////////////////////////




#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 Temp = 0;    // температура 
int rpm = 0;     // обороты
int load = 0;    // нагрузка
int tempair = 0; // температура входного воздуха
int Speed = 0;   // скорость
int MAP = 0;     // давление впускного коллектора
int gaz = 0;     // положение педали
int MAF = 0;     // сассовый расход воздуха


byte MessageRx[12] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};  // массив байтов принимаемого сообщения

byte messageInit[5] = {0x81, 0x11, 0xF1, 0x81, 0x04};    // запрос инициализации
byte messagePresent[5] = {0x81,0x11,0xF1,0x3E,0xC1};      // запрос присутствия 
byte messageTemp[6] = {0x82,0x11,0xF1,0x01,0x05,0x8A};    // запрос температуры 1
byte messageRPM[6] = {0x82,0x11,0xF1,0x01,0x0C,0x91};     // запрос оборотов ДВС 2
byte messageLoad[6] = {0x82,0x11,0xF1,0x01,0x04,0x89};    // запрос нагрузки на ДВС 3
byte messageAirTemp[6] = {0x82,0x11,0xF1,0x01,0x0F,0x94}; // запрос температура впускного воздуха 4
byte messageSpeed[6]= {0x82,0x11,0xF1,0x01,0x0D,0x92};    // запрос скорости а/м 5
byte messageMAP[6] = {0x82,0x11,0xF1,0x01,0x0B,0x90};     // запрос абсолютное давление во впускном коллекторе (MAP) 6
byte messageAcceler[6] = {0x82,0x11,0xF1,0x01,0x11,0x96}; // положения педали газа, % 7
byte messageMAF[6] = {0x82,0x11,0xF1,0x01,0x10,0x95};     // массовый расход воздуха, г/cек  8

unsigned long prevPID = 0;
unsigned long prevpres = 0;


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

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

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, 6, 23, 18, 0, 0));
  
  
  Serial.begin(115200);
  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.print("Ltr/Hor:", 10, 40);
  //      myGLCD.print("Ltr/100:", 10, 75);
  //    myGLCD.print("Ult  Km:", 10, 110);
 //       myGLCD.print("Ult Ltr:", 10, 145);
 //      myGLCD.print("Fuel Km:", 10, 180);
        myGLCD.printNumI(rpm, 120, 215);
        myGLCD.printNumI(Temp, 385, 40);
 //       myGLCD.print("Oil   C:", 255, 75);
 //       myGLCD.print("Exter C:", 255, 110);
        myGLCD.printNumI(t, 385, 145);
 //       myGLCD.print("Fuel  C:", 255, 180);
        myGLCD.printNumI(load, 385, 215);
     prevData = curData;   }}

   
  }



void PIDs() {

  if (pid==1){
  Serial.print ("Zapros Temp:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageTemp[i]);
    Serial.print(messageTemp[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==2){
  Serial.print ("Zapros RPM:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageRPM[i]);
    Serial.print(messageRPM[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==3){
  Serial.print ("Zapros Load:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageLoad[i]);
    Serial.print(messageLoad[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==4){
  Serial.print ("Zapros AirTemp:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageAirTemp[i]);
    Serial.print(messageAirTemp[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

    if (pid==5){
  Serial.print ("Zapros Speed:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageSpeed[i]);
    Serial.print(messageSpeed[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==6){
  Serial.print ("Zapros MAP:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageMAP[i]);
    Serial.print(messageMAP[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==7){
  Serial.print ("Zapros Accelerate:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageAcceler[i]);
    Serial.print(messageAcceler[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==8){
  Serial.print ("Zapros MAF:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageMAF[i]);
    Serial.print(messageMAF[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }
  
 pid++; if (pid>8) {pid = 1; Serial.println ("");}
  Serial.println ("");
 
}

void present() {
  Serial.print ("Zapros prisutstviya:   ");
  for (int i = 0; i < length5; i++) {
    mySerial.write(messagePresent[i]);
    Serial.print(messagePresent[i],HEX); Serial.print ("  ");
     delay (waitbyte); } 
  Serial.print("       "); Serial.print(PresTime); Serial.println("ms");
}

      
   
    
    void receive () {
     if (mySerial.available()) {
      delay(100);
     int k=0;
     byte inbyte=0;
     
  while( mySerial.available() && k < 12) {
     inbyte = mySerial.read();
    MessageRx[k] = inbyte;
    k++;   }

      Serial.print ("                                                            Recieve:   ");
    
    for (int i = 0; i < 12; 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!  "); 
   Serial.println("");
  Serial.print ("PID delay:  "); Serial.print(PIDTime);  Serial.println("ms");
  Serial.print ("Present delay:  "); Serial.print(PresTime);  Serial.println("ms");
    Serial.println("");}
 
    
if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x05) {Temp = MessageRx[8]-40;
 timerenabledPID=0; Serial.print ("                                                            Temperature:  "); 
    Serial.print (Temp);  Serial.println (" *C");}

if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x0C) {rpm = ((MessageRx[8]*256) + MessageRx[9]) / 4;
timerenabledPID=0; Serial.print ("                                                            RPM:  "); 
    Serial.print (rpm);  Serial.println (" /min");}
    
if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x04){ load = MessageRx[8]*100/255;
timerenabledPID=0; Serial.print ("                                                            Load:  "); 
    Serial.print (load);  Serial.println (" %");}
    
if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x0F) {tempair = MessageRx[8]-40;
timerenabledPID=0; Serial.print ("                                                            AirTemp:  "); 
    Serial.print (tempair);  Serial.println (" *C");}

if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x0D){ Speed = MessageRx[8];
timerenabledPID=0; Serial.print ("                                                            Speed:  "); 
    Serial.print (Speed);  Serial.println (" km/h");}

if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x0B){ MAP = MessageRx[8];
timerenabledPID=0; Serial.print ("                                                            MAP:  "); 
    Serial.print (MAP);  Serial.println (" kPa");}

if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x11) {gaz = MessageRx[8]*100/255;
timerenabledPID=0; Serial.print ("                                                            Accelerate:  "); 
    Serial.print (gaz);  Serial.println (" %");}

if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x10) { MAF = ((MessageRx[8]*256) + MessageRx[9]) / 100;
timerenabledPID=0; Serial.print ("                                                            MAF:  "); 
    Serial.print (MAF);  Serial.println (" g/sec");}
  
     for (int i = 0; i < 12; i++) MessageRx[i]=0;
     }
   }

void initialization() {

Serial.print ("Zapros Initialization:  ");
    for (int i = 0; i < length5; i++) {
    mySerial.write(messageInit[i]);
    Serial.print(messageInit[i],HEX); Serial.print ("  ");
    delay (5);
      } 
      delay (55);
   Serial.println("");
  

}

void fastinit() {
  
    Serial.println("starting comunication (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
    Serial.println("starting serial comunication");
                }






                ///////////////////////////////





                 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(); 
      }
       
   // Button INF1
   if ((x>=10) && (x<=120) && (y>=275) && (y<=310)) {
        drawFrame(10, 275, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();       
      } 
      
    // Button INF2
    if ((x>=180) && (x<=300) && (y>=275) && (y<=310)) {
        drawFrame(180, 275, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();                                                                      
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=275) && (y<=310)) {
        drawFrame(350, 275, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();                                                                      
      } 
     }
    }
   
//----------------------------------------------------------------------------------------------------------------------------------
    //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(); 
      }
       
    // Button INF2
    if ((x>=180) && (x<=300) && (y>=275) && (y<=310)) {
        drawFrame(180, 275, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();                                                                      
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=275) && (y<=310)) {
        drawFrame(350, 275, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();                                                                      
      } 
     }
    }
   

//-----------------------------------------------------
    //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(); 
      }
      
    // Button INF1
    if ((x>=10) && (x<=120) && (y>=275) && (y<=310)) {
        drawFrame(10, 275, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();                                                                      
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=275) && (y<=310)) {
        drawFrame(350, 275, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();                                                                      
      } 
    }
  }
//------------------------------------------------------------------------------
    //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(); 
      }    
     }
    }
  }
  
//-----------------------------------------------------------------------------------
   void drawHomeScreen() {
    // линии
     line() ;
     myGLCD.drawLine(239,35,239,248); // линия вертикальная
     
     vista();
     myGLCD.print("Ltr/Hor:", 10, 40);
          
     vista();
     myGLCD.print("Ltr/100:", 10, 75);
     
     vista();
     myGLCD.print("Ult  Km:", 10, 110);
     
     vista();
     myGLCD.print("Ult Ltr:", 10, 145);
     
     vista();
     myGLCD.print("Fuel Km:", 10, 180);
     
     vista();
     myGLCD.print("Eng RPM:", 10, 215);
     
     
     
     vista();
     myGLCD.print("Engin C:", 255, 40);
     
     vista();
     myGLCD.print("Oil   C:", 255, 75);
     
     vista();
     myGLCD.print("Exter C:", 255, 110);
     
     vista();
     myGLCD.print("Inter C:", 255, 145);
     
     vista();
     myGLCD.print("Fuel  C:", 255, 180);
     
     vista();
     myGLCD.print("Load  %:", 255, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonINF2() ;
     buttonCHECK() ;
   }
//-----------------------------------------------------------------------------------
    void drawscreen_one() {
     line() ;
     
     vista();
     myGLCD.print("Start of Delivery  C:", 10, 40);
     
     vista();
     myGLCD.print("Desir inject Start C:", 10, 75);
     
     vista();
     myGLCD.print("Actua Inject Start C:", 10, 110);
     
     vista();
     myGLCD.print("Desir Inject Quan mg:", 10, 145);
     
     vista();
     myGLCD.print("Actu Inject Quant mg:", 10, 180);
     
     vista();
     myGLCD.print("Mass Air Flow     mg:", 10, 215);
 
  
     buttonHome() ;
     buttonINF2() ;
     buttonCHECK() ;
}
//----------------------------------------------------------------------------------------
    void drawscreen_two() {
     // линии
     line() ;
     vista();
     myGLCD.print("EGR Pulse Ratio  :", 10, 40);
     
     vista();
     myGLCD.print("Boost Pressure   :", 10, 75);
     
     vista();
     myGLCD.print("Fuel Valve       :", 10, 110);
     
     vista();
     myGLCD.print("Pump Speed       :", 10, 145);
     
     vista();
     myGLCD.print("Glow Time        :", 10, 180);
     
     vista();
     myGLCD.print("A/C Pressure     :", 10, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonCHECK() ;
   }
//----------------------------------------------------------------------------
    void drawscreen_three() {
     // линии
     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(255, 0, 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.printNumI(h, 350, 0);
  myGLCD.print("% ", 380, 0); 
  myGLCD.printNumI(t, 410, 0);
  myGLCD.print("C", 440, 0);
  myGLCD.print(" ", 285, 0);
  
  myGLCD.setColor(255, 255, 255);
  myGLCD.printNumI(t, 395, 145);
    
    sensors.requestTemperatures();
    myGLCD.setColor(255, 255, 255);
    myGLCD.printNumI(sensors.getTempCByIndex(0), 395, 110); 
  }

 

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

кнопи реагируют супер, точки мегают супер, rpm engine load отображают ноли(я же не подключен к машине). единственное при переходе на другую страницу часы время и температура прописовывается через 5 секунд и в это время все данные в таблице имеет маленькие цифры, когда прорисовалась верхняя часть часы время и температура в таблиц все становится нормального размера. блин ништяк. и чуток щас сдвину цифры в таблице в право

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

хех круто че, ща поправлю немного

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

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

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

вот подправил те что уже есть   

  myGLCD.print("Ltr/Hor:", 10, 40);
  //      myGLCD.print("Ltr/100:", 10, 75);
  //    myGLCD.print("Ult  Km:", 10, 110);
 //       myGLCD.print("Ult Ltr:", 10, 145);
 //      myGLCD.print("Fuel Km:", 10, 180);
        myGLCD.printNumI(rpm, 150, 215);
        myGLCD.printNumI(Temp, 395, 40);
 //       myGLCD.print("Oil   C:", 255, 75);
 //       myGLCD.print("Exter C:", 255, 110);
        myGLCD.printNumI(t, 395, 145);
 //       myGLCD.print("Fuel  C:", 255, 180);
        myGLCD.printNumI(load, 395, 215);

 

MaksVV
Offline
Зарегистрирован: 06.08.2015
#include <UTouch.h>
  #include <UTFT.h>
  #include <SPI.h>
  
  #include <Wire.h>
  #include "RTClib.h"
  RTC_DS3231 rtc;       //pin 20 SCL , 21 SDA
  
  #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);
 
  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;

/////////////////////////////




#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 Temp = 0;    // температура 
int rpm = 0;     // обороты
int load = 0;    // нагрузка
int tempair = 0; // температура входного воздуха
int Speed = 0;   // скорость
int MAP = 0;     // давление впускного коллектора
int gaz = 0;     // положение педали
int MAF = 0;     // сассовый расход воздуха


byte MessageRx[12] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};  // массив байтов принимаемого сообщения

byte messageInit[5] = {0x81, 0x11, 0xF1, 0x81, 0x04};    // запрос инициализации
byte messagePresent[5] = {0x81,0x11,0xF1,0x3E,0xC1};      // запрос присутствия 
byte messageTemp[6] = {0x82,0x11,0xF1,0x01,0x05,0x8A};    // запрос температуры 1
byte messageRPM[6] = {0x82,0x11,0xF1,0x01,0x0C,0x91};     // запрос оборотов ДВС 2
byte messageLoad[6] = {0x82,0x11,0xF1,0x01,0x04,0x89};    // запрос нагрузки на ДВС 3
byte messageAirTemp[6] = {0x82,0x11,0xF1,0x01,0x0F,0x94}; // запрос температура впускного воздуха 4
byte messageSpeed[6]= {0x82,0x11,0xF1,0x01,0x0D,0x92};    // запрос скорости а/м 5
byte messageMAP[6] = {0x82,0x11,0xF1,0x01,0x0B,0x90};     // запрос абсолютное давление во впускном коллекторе (MAP) 6
byte messageAcceler[6] = {0x82,0x11,0xF1,0x01,0x11,0x96}; // положения педали газа, % 7
byte messageMAF[6] = {0x82,0x11,0xF1,0x01,0x10,0x95};     // массовый расход воздуха, г/cек  8

unsigned long prevPID = 0;
unsigned long prevpres = 0;


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

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

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, 6, 23, 18, 0, 0));
  
  
  Serial.begin(115200);
  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(255, 255, 255);
  myGLCD.printNumI(t, 395, 145);
  myGLCD.printNumI(sensors.getTempCByIndex(0), 395, 110); 

//        myGLCD.print("Ltr/Hor:", 10, 40);
  //      myGLCD.print("Ltr/100:", 10, 75);
  //    myGLCD.print("Ult  Km:", 10, 110);
 //       myGLCD.print("Ult Ltr:", 10, 145);
 //      myGLCD.print("Fuel Km:", 10, 180);
        myGLCD.printNumI(rpm, 120, 215);
        myGLCD.printNumI(Temp, 395, 40);
 //       myGLCD.print("Oil   C:", 255, 75);
 //       myGLCD.print("Exter C:", 255, 110);
        myGLCD.printNumI(t, 395, 145);
 //       myGLCD.print("Fuel  C:", 255, 180);
        myGLCD.printNumI(load, 395, 215);
     prevData = curData;   }}

   
  }



void PIDs() {

  if (pid==1){
  Serial.print ("Zapros Temp:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageTemp[i]);
    Serial.print(messageTemp[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==2){
  Serial.print ("Zapros RPM:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageRPM[i]);
    Serial.print(messageRPM[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==3){
  Serial.print ("Zapros Load:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageLoad[i]);
    Serial.print(messageLoad[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==4){
  Serial.print ("Zapros AirTemp:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageAirTemp[i]);
    Serial.print(messageAirTemp[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

    if (pid==5){
  Serial.print ("Zapros Speed:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageSpeed[i]);
    Serial.print(messageSpeed[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==6){
  Serial.print ("Zapros MAP:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageMAP[i]);
    Serial.print(messageMAP[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==7){
  Serial.print ("Zapros Accelerate:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageAcceler[i]);
    Serial.print(messageAcceler[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==8){
  Serial.print ("Zapros MAF:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageMAF[i]);
    Serial.print(messageMAF[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }
  
 pid++; if (pid>8) {pid = 1; Serial.println ("");}
  Serial.println ("");
 
}

void present() {
  Serial.print ("Zapros prisutstviya:   ");
  for (int i = 0; i < length5; i++) {
    mySerial.write(messagePresent[i]);
    Serial.print(messagePresent[i],HEX); Serial.print ("  ");
     delay (waitbyte); } 
  Serial.print("       "); Serial.print(PresTime); Serial.println("ms");
}

      
   
    
    void receive () {
     if (mySerial.available()) {
      delay(100);
     int k=0;
     byte inbyte=0;
     
  while( mySerial.available() && k < 12) {
     inbyte = mySerial.read();
    MessageRx[k] = inbyte;
    k++;   }

      Serial.print ("                                                            Recieve:   ");
    
    for (int i = 0; i < 12; 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!  "); 
   Serial.println("");
  Serial.print ("PID delay:  "); Serial.print(PIDTime);  Serial.println("ms");
  Serial.print ("Present delay:  "); Serial.print(PresTime);  Serial.println("ms");
    Serial.println("");}
 
    
if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x05) {Temp = MessageRx[8]-40;
 timerenabledPID=0; Serial.print ("                                                            Temperature:  "); 
    Serial.print (Temp);  Serial.println (" *C");}

if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x0C) {rpm = ((MessageRx[8]*256) + MessageRx[9]) / 4;
timerenabledPID=0; Serial.print ("                                                            RPM:  "); 
    Serial.print (rpm);  Serial.println (" /min");}
    
if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x04){ load = MessageRx[8]*100/255;
timerenabledPID=0; Serial.print ("                                                            Load:  "); 
    Serial.print (load);  Serial.println (" %");}
    
if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x0F) {tempair = MessageRx[8]-40;
timerenabledPID=0; Serial.print ("                                                            AirTemp:  "); 
    Serial.print (tempair);  Serial.println (" *C");}

if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x0D){ Speed = MessageRx[8];
timerenabledPID=0; Serial.print ("                                                            Speed:  "); 
    Serial.print (Speed);  Serial.println (" km/h");}

if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x0B){ MAP = MessageRx[8];
timerenabledPID=0; Serial.print ("                                                            MAP:  "); 
    Serial.print (MAP);  Serial.println (" kPa");}

if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x11) {gaz = MessageRx[8]*100/255;
timerenabledPID=0; Serial.print ("                                                            Accelerate:  "); 
    Serial.print (gaz);  Serial.println (" %");}

if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x10) { MAF = ((MessageRx[8]*256) + MessageRx[9]) / 100;
timerenabledPID=0; Serial.print ("                                                            MAF:  "); 
    Serial.print (MAF);  Serial.println (" g/sec");}
  
     for (int i = 0; i < 12; i++) MessageRx[i]=0;
     }
   }

void initialization() {

Serial.print ("Zapros Initialization:  ");
    for (int i = 0; i < length5; i++) {
    mySerial.write(messageInit[i]);
    Serial.print(messageInit[i],HEX); Serial.print ("  ");
    delay (5);
      } 
      delay (55);
   Serial.println("");
  

}

void fastinit() {
  
    Serial.println("starting comunication (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
    Serial.println("starting serial comunication");
                }






                ///////////////////////////////





                 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() ;
     myGLCD.drawLine(239,35,239,248); // линия вертикальная
     
     vista();
     myGLCD.print("Ltr/Hor:", 10, 40);
          
     vista();
     myGLCD.print("Ltr/100:", 10, 75);
     
     vista();
     myGLCD.print("Ult  Km:", 10, 110);
     
     vista();
     myGLCD.print("Ult Ltr:", 10, 145);
     
     vista();
     myGLCD.print("Fuel Km:", 10, 180);
     
     vista();
     myGLCD.print("Eng RPM:", 10, 215);
     
     
     
     vista();
     myGLCD.print("Engin C:", 255, 40);
     
     vista();
     myGLCD.print("Oil   C:", 255, 75);
     
     vista();
     myGLCD.print("Exter C:", 255, 110);
     
     vista();
     myGLCD.print("Inter C:", 255, 145);
     
     vista();
     myGLCD.print("Fuel  C:", 255, 180);
     
     vista();
     myGLCD.print("Load  %:", 255, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonINF2() ;
     buttonCHECK() ;
   }
//-----------------------------------------------------------------------------------
    void drawscreen_one() {
     line() ;
     
     vista();
     myGLCD.print("Start of Delivery  C:", 10, 40);
     
     vista();
     myGLCD.print("Desir inject Start C:", 10, 75);
     
     vista();
     myGLCD.print("Actua Inject Start C:", 10, 110);
     
     vista();
     myGLCD.print("Desir Inject Quan mg:", 10, 145);
     
     vista();
     myGLCD.print("Actu Inject Quant mg:", 10, 180);
     
     vista();
     myGLCD.print("Mass Air Flow     mg:", 10, 215);
 
  
     buttonHome() ;
     buttonINF2() ;
     buttonCHECK() ;
}
//----------------------------------------------------------------------------------------
    void drawscreen_two() {
     // линии
     line() ;
     vista();
     myGLCD.print("EGR Pulse Ratio  :", 10, 40);
     
     vista();
     myGLCD.print("Boost Pressure   :", 10, 75);
     
     vista();
     myGLCD.print("Fuel Valve       :", 10, 110);
     
     vista();
     myGLCD.print("Pump Speed       :", 10, 145);
     
     vista();
     myGLCD.print("Glow Time        :", 10, 180);
     
     vista();
     myGLCD.print("A/C Pressure     :", 10, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonCHECK() ;
   }
//----------------------------------------------------------------------------
    void drawscreen_three() {
     // линии
     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(255, 0, 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.printNumI(h, 350, 0);
  myGLCD.print("% ", 380, 0); 
  myGLCD.printNumI(t, 410, 0);
  myGLCD.print("C", 440, 0);
  myGLCD.print(" ", 285, 0);
   sensors.requestTemperatures();
  
  }

 

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

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

и там на 150                       myGLCD.printNumI(rpm, 150, 215);

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

мне как раз такой же дисплей подойдет для одно проекта. Разбили на форде родной дисплей щитка приборов. Фиг где отдельно купишь, только панель -  дорогая она, а этот по размерам вроде подходит. А на штатном дисплей информации то было, надпись форд, время и положение селектора АКПП и всё. А тут можно красиво все сделать

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

ага. факт

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

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

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

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

#include <UTouch.h>
  #include <UTFT.h>
  #include <SPI.h>
  
  #include <Wire.h>
  #include "RTClib.h"
  RTC_DS3231 rtc;       //pin 20 SCL , 21 SDA
  
  #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);
 
  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;

/////////////////////////////




#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 Temp = 0;    // температура 
int rpm = 0;     // обороты
int load = 0;    // нагрузка
int tempair = 0; // температура входного воздуха
int Speed = 0;   // скорость
int MAP = 0;     // давление впускного коллектора
int gaz = 0;     // положение педали
int MAF = 0;     // сассовый расход воздуха


byte MessageRx[12] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};  // массив байтов принимаемого сообщения

byte messageInit[5] = {0x81, 0x11, 0xF1, 0x81, 0x04};    // запрос инициализации
byte messagePresent[5] = {0x81,0x11,0xF1,0x3E,0xC1};      // запрос присутствия 
byte messageTemp[6] = {0x82,0x11,0xF1,0x01,0x05,0x8A};    // запрос температуры 1
byte messageRPM[6] = {0x82,0x11,0xF1,0x01,0x0C,0x91};     // запрос оборотов ДВС 2
byte messageLoad[6] = {0x82,0x11,0xF1,0x01,0x04,0x89};    // запрос нагрузки на ДВС 3
byte messageAirTemp[6] = {0x82,0x11,0xF1,0x01,0x0F,0x94}; // запрос температура впускного воздуха 4
byte messageSpeed[6]= {0x82,0x11,0xF1,0x01,0x0D,0x92};    // запрос скорости а/м 5
byte messageMAP[6] = {0x82,0x11,0xF1,0x01,0x0B,0x90};     // запрос абсолютное давление во впускном коллекторе (MAP) 6
byte messageAcceler[6] = {0x82,0x11,0xF1,0x01,0x11,0x96}; // положения педали газа, % 7
byte messageMAF[6] = {0x82,0x11,0xF1,0x01,0x10,0x95};     // массовый расход воздуха, г/cек  8

unsigned long prevPID = 0;
unsigned long prevpres = 0;


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

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

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, 6, 23, 18, 0, 0));
  
  
  Serial.begin(115200);
  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.setFont(BigFont);
  myGLCD.setColor(255, 255, 255);
  myGLCD.printNumI(t, 395, 145);
  myGLCD.printNumI(sensors.getTempCByIndex(0), 395, 110); 

//        myGLCD.print("Ltr/Hor:", 10, 40);
  //      myGLCD.print("Ltr/100:", 10, 75);
  //    myGLCD.print("Ult  Km:", 10, 110);
 //       myGLCD.print("Ult Ltr:", 10, 145);
 //      myGLCD.print("Fuel Km:", 10, 180);
        myGLCD.printNumI(rpm, 120, 215);
        myGLCD.printNumI(Temp, 395, 40);
 //       myGLCD.print("Oil   C:", 255, 75);
 //       myGLCD.print("Exter C:", 255, 110);
        myGLCD.printNumI(t, 395, 145);
 //       myGLCD.print("Fuel  C:", 255, 180);
        myGLCD.printNumI(load, 395, 215);
     prevData = curData;   }}

   
  }



void PIDs() {

  if (pid==1){
  Serial.print ("Zapros Temp:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageTemp[i]);
    Serial.print(messageTemp[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==2){
  Serial.print ("Zapros RPM:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageRPM[i]);
    Serial.print(messageRPM[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==3){
  Serial.print ("Zapros Load:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageLoad[i]);
    Serial.print(messageLoad[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==4){
  Serial.print ("Zapros AirTemp:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageAirTemp[i]);
    Serial.print(messageAirTemp[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

    if (pid==5){
  Serial.print ("Zapros Speed:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageSpeed[i]);
    Serial.print(messageSpeed[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==6){
  Serial.print ("Zapros MAP:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageMAP[i]);
    Serial.print(messageMAP[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==7){
  Serial.print ("Zapros Accelerate:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageAcceler[i]);
    Serial.print(messageAcceler[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==8){
  Serial.print ("Zapros MAF:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageMAF[i]);
    Serial.print(messageMAF[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }
  
 pid++; if (pid>8) {pid = 1; Serial.println ("");}
  Serial.println ("");
 
}

void present() {
  Serial.print ("Zapros prisutstviya:   ");
  for (int i = 0; i < length5; i++) {
    mySerial.write(messagePresent[i]);
    Serial.print(messagePresent[i],HEX); Serial.print ("  ");
     delay (waitbyte); } 
  Serial.print("       "); Serial.print(PresTime); Serial.println("ms");
}

      
   
    
    void receive () {
     if (mySerial.available()) {
      delay(100);
     int k=0;
     byte inbyte=0;
     
  while( mySerial.available() && k < 12) {
     inbyte = mySerial.read();
    MessageRx[k] = inbyte;
    k++;   }

      Serial.print ("                                                            Recieve:   ");
    
    for (int i = 0; i < 12; 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!  "); 
   Serial.println("");
  Serial.print ("PID delay:  "); Serial.print(PIDTime);  Serial.println("ms");
  Serial.print ("Present delay:  "); Serial.print(PresTime);  Serial.println("ms");
    Serial.println("");}
 
    
if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x05) {Temp = MessageRx[8]-40;
 timerenabledPID=0; Serial.print ("                                                            Temperature:  "); 
    Serial.print (Temp);  Serial.println (" *C");}

if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x0C) {rpm = ((MessageRx[8]*256) + MessageRx[9]) / 4;
timerenabledPID=0; Serial.print ("                                                            RPM:  "); 
    Serial.print (rpm);  Serial.println (" /min");}
    
if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x04){ load = MessageRx[8]*100/255;
timerenabledPID=0; Serial.print ("                                                            Load:  "); 
    Serial.print (load);  Serial.println (" %");}
    
if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x0F) {tempair = MessageRx[8]-40;
timerenabledPID=0; Serial.print ("                                                            AirTemp:  "); 
    Serial.print (tempair);  Serial.println (" *C");}

if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x0D){ Speed = MessageRx[8];
timerenabledPID=0; Serial.print ("                                                            Speed:  "); 
    Serial.print (Speed);  Serial.println (" km/h");}

if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x0B){ MAP = MessageRx[8];
timerenabledPID=0; Serial.print ("                                                            MAP:  "); 
    Serial.print (MAP);  Serial.println (" kPa");}

if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x11) {gaz = MessageRx[8]*100/255;
timerenabledPID=0; Serial.print ("                                                            Accelerate:  "); 
    Serial.print (gaz);  Serial.println (" %");}

if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x10) { MAF = ((MessageRx[8]*256) + MessageRx[9]) / 100;
timerenabledPID=0; Serial.print ("                                                            MAF:  "); 
    Serial.print (MAF);  Serial.println (" g/sec");}
  
     for (int i = 0; i < 12; i++) MessageRx[i]=0;
     }
   }

void initialization() {

Serial.print ("Zapros Initialization:  ");
    for (int i = 0; i < length5; i++) {
    mySerial.write(messageInit[i]);
    Serial.print(messageInit[i],HEX); Serial.print ("  ");
    delay (5);
      } 
      delay (55);
   Serial.println("");
  

}

void fastinit() {
  
    Serial.println("starting comunication (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
    Serial.println("starting serial comunication");
                }






                ///////////////////////////////





                 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() ;
     myGLCD.drawLine(239,35,239,248); // линия вертикальная
     
     vista();
     myGLCD.print("Ltr/Hor:", 10, 40);
          
     vista();
     myGLCD.print("Ltr/100:", 10, 75);
     
     vista();
     myGLCD.print("Ult  Km:", 10, 110);
     
     vista();
     myGLCD.print("Ult Ltr:", 10, 145);
     
     vista();
     myGLCD.print("Fuel Km:", 10, 180);
     
     vista();
     myGLCD.print("Eng RPM:", 10, 215);
     
     
     
     vista();
     myGLCD.print("Engin C:", 255, 40);
     
     vista();
     myGLCD.print("Oil   C:", 255, 75);
     
     vista();
     myGLCD.print("Exter C:", 255, 110);
     
     vista();
     myGLCD.print("Inter C:", 255, 145);
     
     vista();
     myGLCD.print("Fuel  C:", 255, 180);
     
     vista();
     myGLCD.print("Load  %:", 255, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonINF2() ;
     buttonCHECK() ;
   }
//-----------------------------------------------------------------------------------
    void drawscreen_one() {
     line() ;
     
     vista();
     myGLCD.print("Start of Delivery  C:", 10, 40);
     
     vista();
     myGLCD.print("Desir inject Start C:", 10, 75);
     
     vista();
     myGLCD.print("Actua Inject Start C:", 10, 110);
     
     vista();
     myGLCD.print("Desir Inject Quan mg:", 10, 145);
     
     vista();
     myGLCD.print("Actu Inject Quant mg:", 10, 180);
     
     vista();
     myGLCD.print("Mass Air Flow     mg:", 10, 215);
 
  
     buttonHome() ;
     buttonINF2() ;
     buttonCHECK() ;
}
//----------------------------------------------------------------------------------------
    void drawscreen_two() {
     // линии
     line() ;
     vista();
     myGLCD.print("EGR Pulse Ratio  :", 10, 40);
     
     vista();
     myGLCD.print("Boost Pressure   :", 10, 75);
     
     vista();
     myGLCD.print("Fuel Valve       :", 10, 110);
     
     vista();
     myGLCD.print("Pump Speed       :", 10, 145);
     
     vista();
     myGLCD.print("Glow Time        :", 10, 180);
     
     vista();
     myGLCD.print("A/C Pressure     :", 10, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonCHECK() ;
   }
//----------------------------------------------------------------------------
    void drawscreen_three() {
     // линии
     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(255, 0, 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.printNumI(h, 350, 0);
  myGLCD.print("% ", 380, 0); 
  myGLCD.printNumI(t, 410, 0);
  myGLCD.print("C", 440, 0);
  myGLCD.print(" ", 285, 0);
   sensors.requestTemperatures();
  
  }

 

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

ну всё я спать, завтра попробуй с авто. Как часть скетча обд работает, отпишись

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

ок. завтра отпишусь О ВЕЛИКИЙ ИЗ ВЕЛИКИХ. спасибо за очередную магию

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

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

vsrgv
Offline
Зарегистрирован: 20.06.2017

Я тут спецификацию автоваза читаю для KWP2000 и там написано

4.2.2 Байт адреса приемника.

В реализации данного протокола используется физическая адресация. 
Поэтому, под адресом приемника сообщения подразумевается физический адрес блока управления, которому предназначено конкретное сообщение. 
Байт адреса приемника всегда используется совместно с байтом адреса источника. 
Согласно стандарту SAE J2178, физический адрес контроллера системы управления двигателем назначен равным 10h.

4.2.3 Байт адреса источника.

Для диагностического тестера физический адрес принят равным F1h, для иммобилизатора C0h. Иные адреса, данной реализацией не поддерживаются.

это значит что адрес мозгов моей тачки не 10 а 10h?

Еще написано  Контроллер Motronic M1.5.4 поддерживает только “быструю” инициализацию. у меня как раз такой

 

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

да быстрая единственное быстрая или быстаря 5 боуд

vsrgv
Offline
Зарегистрирован: 20.06.2017

январи и bosch, последний как раз и есть Motronic

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

с твоими мозгами ты свою быстро раскусиш и еще и стаким опытом как сдесь

vsrgv
Offline
Зарегистрирован: 20.06.2017

Ты наверно меня с MaksVV спутал))) я пока еще не совсем все понимаю.

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

блин. прости думал что с ним продолжаю. щас раскурю что ты до этого сказал

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

в запросах не дается такой адрес 10h . прослушка линии тебе же показала четко что твой адрес запроса это 10. а что иниты не пошли ни один ни другой? обрати внимание что в доке и F1h но задается как F1

vsrgv
Offline
Зарегистрирован: 20.06.2017

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

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

нет твой это 10. 10h он распечатет так в какомто порт тесте программе. но это 10 и F1 и никак иначе

vsrgv
Offline
Зарегистрирован: 20.06.2017

MaksVV пишет:

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

Функция startCommunication.

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

 

Не поможет эта инфа?

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

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

vsrgv
Offline
Зарегистрирован: 20.06.2017

В общем незнаю надо или нет здесь это, но пожалуй оставлю http://chiptuner.ru/download/docs/kwp2000r.zip

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

сенкс. комуто пригодится. я имею .

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

Подозреваю что 10h или там F1h. h это значит понимать число в НЕХ

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

смотри в проге кажется называется comtest все данные выводит в сериал через h. хотя у меня в скетче все без h. я не спец но подозреваю что это как разделитель символов, ну и возможно что как определение HEX байта. например у меня в скетче прописано вывадить в сериал 8111F18104,а в comtest он выводит как 81h11hF1h81h04h. тоесть хочу сказать не зацикливайся на h.

vsrgv
Offline
Зарегистрирован: 20.06.2017

скоро пойду инициализацию попробую сделать

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

Так MaksVV, отчитываюсь. все работает. но...... первая поблема обновляются данные с торможением гдето в 2 секунды, иногда как в 4 секунды но это возможно потому что он поймал два раза одинаковое значение и по этому кажется что задержка в 4 секунды. вторая проблема при старте например обороты 800 об/м,  потом даю газу и показывает например 1238 об/м , убираю ногу с газа и происходит такое показвывает  8008 об/м, тоесть последнаяя цифра 8 не исчезает а продолжает висесть пока не поменяется на другую если дам гаду. тоесть не происходит очистка данных. Вот как то так. Но уже приятный ништяк. вот фотка, солнце лупило видно не очень, просто хотел чтобы ты видел на фото холостые обороты , цифра 5 осталась после последней подгазовки.

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

#include <UTouch.h>
  #include <UTFT.h>
  #include <SPI.h>
  
  #include <Wire.h>
  #include "RTClib.h"
  RTC_DS3231 rtc;       //pin 20 SCL , 21 SDA
  
  #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);
 
  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;

//////////////////////////////////////////////////////////////////////////////
#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 Temp = 0;    // температура 
int rpm = 0;     // обороты
int load = 0;    // нагрузка
int tempair = 0; // температура входного воздуха
int Speed = 0;   // скорость
int MAP = 0;     // давление впускного коллектора
int gaz = 0;     // положение педали
int MAF = 0;     // сассовый расход воздуха


byte MessageRx[12] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};  // массив байтов принимаемого сообщения

byte messageInit[5] = {0x81, 0x11, 0xF1, 0x81, 0x04};    // запрос инициализации
byte messagePresent[5] = {0x81,0x11,0xF1,0x3E,0xC1};      // запрос присутствия 
byte messageTemp[6] = {0x82,0x11,0xF1,0x01,0x05,0x8A};    // запрос температуры 1
byte messageRPM[6] = {0x82,0x11,0xF1,0x01,0x0C,0x91};     // запрос оборотов ДВС 2
byte messageLoad[6] = {0x82,0x11,0xF1,0x01,0x04,0x89};    // запрос нагрузки на ДВС 3
byte messageAirTemp[6] = {0x82,0x11,0xF1,0x01,0x0F,0x94}; // запрос температура впускного воздуха 4
byte messageSpeed[6]= {0x82,0x11,0xF1,0x01,0x0D,0x92};    // запрос скорости а/м 5
byte messageMAP[6] = {0x82,0x11,0xF1,0x01,0x0B,0x90};     // запрос абсолютное давление во впускном коллекторе (MAP) 6
byte messageAcceler[6] = {0x82,0x11,0xF1,0x01,0x11,0x96}; // положения педали газа, % 7
byte messageMAF[6] = {0x82,0x11,0xF1,0x01,0x10,0x95};     // массовый расход воздуха, г/cек  8

unsigned long prevPID = 0;
unsigned long prevpres = 0;


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

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

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
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, 6, 23, 18, 0, 0));
    Watch_Temperature ();
  
  Serial.begin(115200);
  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(255, 255, 255); 
//        myGLCD.print("Ltr/Hor:", 10, 40);
  //      myGLCD.print("Ltr/100:", 10, 75);
  //    myGLCD.print("Ult  Km:", 10, 110);
 //       myGLCD.print("Ult Ltr:", 10, 145);
 //      myGLCD.print("Fuel Km:", 10, 180);
        myGLCD.printNumI(rpm, 150, 215);
        myGLCD.printNumI(Temp, 395, 40);
 //       myGLCD.print("Oil   C:", 255, 75);
        myGLCD.printNumI(sensors.getTempCByIndex(0), 395, 110);
        myGLCD.printNumI(t, 395, 145);
 //       myGLCD.print("Fuel  C:", 255, 180);
        myGLCD.printNumI(load, 395, 215);
     prevData = curData;   
    }
   }
  }

///////////////////////////////////////////////////////////////////////////
void PIDs() {

  if (pid==1){
  Serial.print ("Zapros Temp:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageTemp[i]);
    Serial.print(messageTemp[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==2){
  Serial.print ("Zapros RPM:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageRPM[i]);
    Serial.print(messageRPM[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==3){
  Serial.print ("Zapros Load:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageLoad[i]);
    Serial.print(messageLoad[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==4){
  Serial.print ("Zapros AirTemp:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageAirTemp[i]);
    Serial.print(messageAirTemp[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

    if (pid==5){
  Serial.print ("Zapros Speed:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageSpeed[i]);
    Serial.print(messageSpeed[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==6){
  Serial.print ("Zapros MAP:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageMAP[i]);
    Serial.print(messageMAP[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==7){
  Serial.print ("Zapros Accelerate:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageAcceler[i]);
    Serial.print(messageAcceler[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }

   if (pid==8){
  Serial.print ("Zapros MAF:   ");
  for (int i = 0; i < length6; i++) {
    mySerial.write(messageMAF[i]);
    Serial.print(messageMAF[i],HEX); Serial.print ("  ");
    delay (waitbyte); } 
   }
  
 pid++; if (pid>8) {pid = 1; Serial.println ("");}
  Serial.println ("");
}

void present() {
  Serial.print ("Zapros prisutstviya:   ");
  for (int i = 0; i < length5; i++) {
    mySerial.write(messagePresent[i]);
    Serial.print(messagePresent[i],HEX); Serial.print ("  ");
     delay (waitbyte); } 
  Serial.print("       "); Serial.print(PresTime); Serial.println("ms");
}

/////////////////////////////////////////////////////////////////////////////////////////////
    void receive () {
     if (mySerial.available()) {
     delay(100);
     int k=0;
     byte inbyte=0;
     
     while( mySerial.available() && k < 12) {
     inbyte = mySerial.read();
     MessageRx[k] = inbyte;
     k++;   }

      Serial.print ("                                                            Recieve:   ");
    
     for (int i = 0; i < 12; 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!  "); 
   Serial.println("");
   Serial.print ("PID delay:  "); Serial.print(PIDTime);  Serial.println("ms");
   Serial.print ("Present delay:  "); Serial.print(PresTime);  Serial.println("ms");
   Serial.println("");}
 
    
if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x05) {Temp = MessageRx[8]-40;
    timerenabledPID=0; Serial.print ("                                                            Temperature:  "); 
    Serial.print (Temp);  Serial.println (" *C");}

if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x0C) {rpm = ((MessageRx[8]*256) + MessageRx[9]) / 4;
    timerenabledPID=0; Serial.print ("                                                            RPM:  "); 
    Serial.print (rpm);  Serial.println (" /min");}
    
if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x04){ load = MessageRx[8]*100/255;
    timerenabledPID=0; Serial.print ("                                                            Load:  "); 
    Serial.print (load);  Serial.println (" %");}
    
if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x0F) {tempair = MessageRx[8]-40;
    timerenabledPID=0; Serial.print ("                                                            AirTemp:  "); 
    Serial.print (tempair);  Serial.println (" *C");}

if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x0D){ Speed = MessageRx[8];
    timerenabledPID=0; Serial.print ("                                                            Speed:  "); 
    Serial.print (Speed);  Serial.println (" km/h");}

if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x0B){ MAP = MessageRx[8];
    timerenabledPID=0; Serial.print ("                                                            MAP:  "); 
    Serial.print (MAP);  Serial.println (" kPa");}

if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x11) {gaz = MessageRx[8]*100/255;
    timerenabledPID=0; Serial.print ("                                                            Accelerate:  "); 
    Serial.print (gaz);  Serial.println (" %");}

if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x10) { MAF = ((MessageRx[8]*256) + MessageRx[9]) / 100;
timerenabledPID=0; Serial.print ("                                                            MAF:  "); 
    Serial.print (MAF);  Serial.println (" g/sec");}
  
     for (int i = 0; i < 12; i++) MessageRx[i]=0;
     }
   }

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void initialization() {

Serial.print ("Zapros Initialization:  ");
    for (int i = 0; i < length5; i++) {
    mySerial.write(messageInit[i]);
    Serial.print(messageInit[i],HEX); Serial.print ("  ");
    delay (5);
      } 
      delay (55);
   Serial.println("");
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void fastinit() {
  
    Serial.println("starting comunication (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
    Serial.println("starting serial comunication");
                }
///////////////////////////////////////////////////////////////////////////////////////////////////////
  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("Ult  Km:", 10, 110);
     myGLCD.print("Ult Ltr:", 10, 145);
     myGLCD.print("Fuel Km:", 10, 180);
     myGLCD.print("Eng RPM:", 10, 215);
     myGLCD.print("Engin C:", 255, 40);
     myGLCD.print("Oil   C:", 255, 75);
     myGLCD.print("Exter C:", 255, 110);
     myGLCD.print("Inter C:", 255, 145);
     myGLCD.print("Fuel  C:", 255, 180);
     myGLCD.print("Load  %:", 255, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonINF2() ;
     buttonCHECK() ;
   }
////////////////////////////////////////////////////////////////////////////////////////////////
    void drawscreen_one() {
     line() ;
     vista();
     myGLCD.print("Start of Delivery  C:", 10, 40);
     myGLCD.print("Desir inject Start C:", 10, 75);
     myGLCD.print("Actua Inject Start C:", 10, 110);
     myGLCD.print("Desir Inject Quan mg:", 10, 145);
     myGLCD.print("Actu Inject Quant mg:", 10, 180);
     myGLCD.print("Mass Air Flow     mg:", 10, 215);
 
  
     buttonHome() ;
     buttonINF2() ;
     buttonCHECK() ;
}
//----------------------------------------------------------------------------------------
    void drawscreen_two() {
     line() ;
     vista();
     myGLCD.print("EGR Pulse Ratio  :", 10, 40);
     myGLCD.print("Boost Pressure   :", 10, 75);
     myGLCD.print("Fuel Valve       :", 10, 110);
     myGLCD.print("Pump Speed       :", 10, 145);
     myGLCD.print("Glow Time        :", 10, 180);
     myGLCD.print("A/C Pressure     :", 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(255, 0, 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.printNumI(h, 350, 0);
  myGLCD.print("% ", 380, 0); 
  myGLCD.printNumI(t, 410, 0);
  myGLCD.print("C", 440, 0);
  myGLCD.print(" ", 285, 0);
  sensors.requestTemperatures();
  
  }

 

Думаю нужно поставить очистку скрина после каждого проиденого цикла.

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

ок vsrgv. давай. ждемссссс. но я сейчас на работу. вечером спишемся.

vsrgv
Offline
Зарегистрирован: 20.06.2017

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

starting comunication (fastinit)
starting serial comunication
Zapros Initialization:  81  10  F1  81  3  
FAST INIT OK

PID delay:  150ms
Present delay:  9000ms

Zapros Temp:   82  10  F1  1  5  89  
                                                            Recieve:   FF FF FF FF FF 0 0 0 0 0 0 0 
Zapros RPM:   82  10  F1  1  C  90  
                                                            Recieve:   FF FF FF 0 0 0 0 0 0 0 0 0 
Zapros Load:   82  10  F1  1  4  88  
                                                            Recieve:   FF FF FF 0 0 0 0 0 0 0 0 0 
Zapros AirTemp:   82  10  F1  1  F  93  
                                                            Recieve:   FF FF FF 0 0 0 0 0 0 0 0 0 
Zapros Speed:   82  10  F1  1  D  91  
                                                            Recieve:   FF FF FF 0 0 0 0 0 0 0 0 0 
Zapros MAP:   82  10  F1  1  B  8A  
                                                            Recieve:   FF FF FF 0 0 0 0 0 0 0 0 0 
Zapros Accelerate:   82  10  F1  1  11  95  
                                                            Recieve:   FF FF FF 0 0 0 0 0 0 0 0 0 
Zapros MAF:   82  10  F1  1  10  94  

                                                            Recieve:   FF FF FF 0 0 0 0 0 0 0 0 0 
Zapros Temp:   82  10  F1  1  5  89  
                                                            Recieve:   FF FF FF 0 0 0 0 0 0 0 0 0 
                                                            Recieve:   0 0 0 0 0 0 0 0 0 0 0 0 
Zapros RPM:   82  10  F1  1  C  90  
                                                            Recieve:   FF FF FF 0 0 0 0 0 0 0 0 0 
Zapros Load:   82  10  F1  1  4  88  
                                                            Recieve:   FE FF FC FF FF 0 0 0 0 0 0 0 
Zapros AirTemp:   82  10  F1  1  F  93  
                                                            Recieve:   FF FF FF 83 F1 10 7F 1 11 15 0 0 
Zapros Speed:   82  10  F1  1  D  91  
                                                            Recieve:   FF FF FF 83 F1 10 7F 1 11 15 0 0 
Zapros MAP:   82  10  F1  1  B  8A  
                                                            Recieve:   FF FF FF 0 0 0 0 0 0 0 0 0 
Zapros Accelerate:   82  10  F1  1  11  95  
                                                            Recieve:   FF FF FF 83 F1 10 7F 1 11 15 0 0 
Zapros MAF:   82  10  F1  1  10  94  

                                                            Recieve:   FF FF FF 83 F1 10 7F 1 11 15 0 0 
Zapros Temp:   82  10  F1  1  5  89  
                                                            Recieve:   FF FF FF 83 F1 10 7F 1 11 15 0 0 
Zapros prisutstviya:   81  10  F1  3E  C0         9000ms
                                                            Recieve:   FF FF 83 F1 10 7F 3E 10 51 0 0 0 
Zapros RPM:   82  10  F1  1  C  90  
                                                            Recieve:   FF FF FF 0 0 0 0 0 0 0 0 0 
Zapros Load:   82  10  F1  1  4  88  
                                                            Recieve:   FF FF FF 83 F1 10 7F 1 11 15 0 0 
Zapros AirTemp:   82  10  F1  1  F  93  
                                                            Recieve:   FF FF FF 83 F1 10 7F 1 11 15 0 0 
Zapros Speed:   82  10  F1  1  D  91  
                                                            Recieve:   FF FF FF 83 F1 10 7F 1 11 15 0 0 
Zapros MAP:   82  10  F1  1  B  8A  
                                                            Recieve:   FF FF FF 0 0 0 0 0 0 0 0 0 
Zapros Accelerate:   82  10  F1  1  11  95  
                                                            Recieve:   FF FF FF 83 F1 10 7F 1 11 15 0 0 
Zapros MAF:   82  10  F1  1  10  94  

                                                            Recieve:   FF FF FF 83 F1 10 7F 1 11 15 0 0 
Zapros Temp:   82  10  F1  1  5  89  
                                                            Recieve:   FF FF FF 83 F1 10 7F 1 11 15 0 0 
Zapros RPM:   82  10  F1  1  C  90  
                                                            Recieve:   FF FF FF 83 F1 10 7F 1 11 15 0 0 
Zapros Load:   82  10  F1  1  4  88  
                                                            Recieve:   FF FF FF 83 F1 10 7F 1 11 15 0 0 
Zapros AirTemp:   82  10  F1  1  F  93  
                                                            Recieve:   FF FF FF 83 F1 10 7F 1 11 15 0 0 
Zapros Speed:   82  10  F1  1  D  91  
                                                            Recieve:   FF FF FF 83 F1 10 7F 1 11 15 0 0 
Zapros MAP:   82  10  F1  1  B  8A  
                                                            Recieve:   FF FF FF 0 0 0 0 0 0 0 0 0 
Zapros Accelerate:   82  10  F1  1  11  95  
                                                            Recieve:   FF FF FF 83 F1 10 7F 1 11 15 0 0 
Zapros MAF:   82  10  F1  1  10  94  

                                                            Recieve:   FF FF FF 83 F1 10 7F 1 11 15 0 0 
Zapros Temp:   82  10  F1  1  5  89  
                                                            Recieve:   FF FF FF 83 F1 10 7F 1 11 15 0 0 
Zapros RPM:   82  10  F1  1  C  90  
                                                            Recieve:   FF FF FF 83 F1 10 7F 1 11 15 0 0 
Zapros Load:   82  10  F1  1  4  88  
                                                            Recieve:   FF FF FF 83 F1 10 7F 1 11 15 0 0

 

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

И инетересен еще вопрос, при прослушке К линии на запрос  параметров 82 10 F1 21 01 A5 выдавался ответ 

82 10 F1 21 1 A5        425ms
12
80 F1 10 22 61 1 8 35 1 4 0 0 0 0 75 13 0 0 0 78 78 80 2 0 87 0 0 0 0 0 0 0 0 0 FF FF 0 0 C6        75ms
13
82 10 F1 21 1 A5        421ms
14
80 F1 10 22 61 1 8 35 1 4 0 0 0 0 75 13 0 0 0 78 78 80 2 0 87 0 0 0 0 0 0 0 0 0 FF FF 0 0 C6        78ms
15
82 10 F1 21 1 A5        417ms
16
80 F1 10 22 61 1 8 35 1 4 0 0 0 0 75 13 0 0 0 78 78 80 2 0 89 0 0 0 0 0 0 0 0 0 FF FF 0 0 C8        81ms
17
82 10 F1 21 1 A5        414ms
18
80 F1 10 22 61 1 8 35 1 4 0 0 0 0 75 13 0 0 0 78 78 80 2 0 8D 0 0 0 0 0 0 0 0 0 FF FF 0 0 CC        64ms
19
82 10 F1 21 1 A5        430ms
20
80 F1 10 22 61 1 8 35 1 4 0 0 0 0 75 13 0 0 0 78 78 80 2 0 8D 0 0 0 0 0 0 0 0 0 FF FF 0 0 CC        69ms
21
82 10 F1 21 1 A5        427ms
22
80 F1 10 22 61 1 8 35 1 4 0 0 0 0 75 13 0 0 0 78 78 80 2 0 8E 0 0 0 0 0 0 0 0 0 FF FF 0 0 CD 

 

что значат эти данные? 1 8 35 1 4 0 0 0 0 75 13 0 0 0 78 78 80 2 0 87 0 0 0 0 0 0 0 0 0 FF FF 0 0 

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

FF FF FF В начале это лишние байты. Так как массив у нас прописан на 12 байт а ответ мы получаем только 5 - 6 байт то он и подставляет пустые байты. По поводу эпоса 21 01 он выдаёт кучу байт в которых тоже закрыты ответы, каждый байт отвечает за определённую вещь. Например обычно по 10 адресу, если считать от 61 ( это будет первый байт) то одиннадцатый байт отвечает за температуру. Пересчитай его в DEC и отнеми 40, получишь температуру. И так далее. Проблема узнать за что отвечает каждый байт. У меня 11 байт не совпадает с температурой. Если у тебя совпало то ищи в нете расшифровку ответа на 21 01. А потом можно каждый байт выдергивать, перечитывать по формуле и выводить в сериал. Где то так. Если в ответе есть 7F значит не потдерживается.

vsrgv
Offline
Зарегистрирован: 20.06.2017

Искал,пока ничего вразумительного не увидел

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

Что конкретно?

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

После 61 у тебя 11 байт это 75. 75=117(DEC)-40=77град. Если у тебя такая температура то гуд. Ищи расшифровку на запрос 21 00. Когда будешь знать расшифровку то можно выводить нужные пересчитаные байты в сериал

vsrgv
Offline
Зарегистрирован: 20.06.2017

Скорее всего 11 байт это и есть температура, пока недолго искал про расшифровку ответа 

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

Ищи расшифровки где 11 байт отвечает за температуру. Мне попадались много форумов с расшифровка, именно на 11 байт. Но так как у меня не совпало, другая специфика ебу, то я и не запоминал эти форумы. Ищи. Легче из одного ответа ловить все чем из кучи разное.

vsrgv
Offline
Зарегистрирован: 20.06.2017

Понял,дома буду поищу, на ходу не очень получается)

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

В поиске забей типа: 11 байт это температура. И рыскай по этим сайтам.

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

viki13viki пишет:

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

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

печатаем параметр далее:

if (rpm<10) {напечатать три пробела};

if (rpm>=10 && rpm<100) {напечатать два пробела};

if (rpm>=100 && rpm<1000) {напечатать один пробел};

так пробелы будут задирать предыдущие данные. А если обновлять (стирать все данные с экрана?) каждый раз возможно будет мерцать, хотя попробуй и с обновлением экрана, я просто с таким LCD не работал

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

а по первой проблеме, в сериале то быстро обновляет?

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

.

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

при вет. попробовал встунть в лупе myGLCD.clrScr(); происходит страшная дрянь. по первой проблеме, думаю нужно очиситить от всех Serial скетч и искать лишние задержки. щас вычещу лишнее потом проверю и буду делать выводы. еще одно эту функцию можно сделать для всех отображаемых параметров?

if (rpm<10) {напечатать три пробела};

if (rpm>=10 && rpm<100) {напечатать два пробела};

if (rpm>=100 && rpm<1000) {напечатать один пробел};

чтобы не возникло подобного с другими пидами

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

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

vsrgv
Offline
Зарегистрирован: 20.06.2017

мозг плывет уже, никак не могу найти расшифровку ответа, только про температуру и написано везде

vsrgv
Offline
Зарегистрирован: 20.06.2017

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

Ну так вот программа CE может сохранять данные в файл и потом их оттуда считывать и рисовать графики, и открыв этот бинарный файл в winhex-у я вдруг увидел, что Юрий ничего не кодирует а напрямую просто пишет весь обмен туда с временами пакетов! Ну чтож — вот оно решение проблемы, в том же хекс редакторе я начал в одном из пакетов по очереди заменять значения в разделе данных сначала на 00 потом на FF, сохранять, загружать этот откорректированный лог в программу CE и наблюдать значение какого параметра изменилось и как ))) таким образом были расшифрованы почти все параметры.

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

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

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

теперь MaksVV поигрался с задержками. уменьшил задержку ожидания правильного ответа на пиды до 60 м/с надо будет попробовать на 51 м/с, задержку на ответ инита до 500 м/с, значит нашел такой прикол вот здесь

void receive () {
     if (mySerial.available()) {
     delay(100);

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

  #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 Temp = 0;    // температура 
  int rpm = 0;     // обороты
  int load = 0;    // нагрузка
  int tempair = 0; // температура входного воздуха
  int Speed = 0;   // скорость
  int MAP = 0;     // давление впускного коллектора
  int gaz = 0;     // положение педали
  int MAF = 0;     // массовый расход воздуха

  // массив байтов принимаемого сообщения
  byte MessageRx[12] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};  

  //массивы сообщений (пидов)
  byte messageInit[5] = {0x81, 0x11, 0xF1, 0x81, 0x04};    // запрос инициализации
  byte messagePresent[5] = {0x81,0x11,0xF1,0x3E,0xC1};      // запрос присутствия 
  byte messageTemp[6] = {0x82,0x11,0xF1,0x01,0x05,0x8A};    // запрос температуры 1
  byte messageRPM[6] = {0x82,0x11,0xF1,0x01,0x0C,0x91};     // запрос оборотов ДВС 2
  byte messageLoad[6] = {0x82,0x11,0xF1,0x01,0x04,0x89};    // запрос нагрузки на ДВС 3
  byte messageAirTemp[6] = {0x82,0x11,0xF1,0x01,0x0F,0x94}; // запрос температура впускного воздуха 4
  byte messageSpeed[6]= {0x82,0x11,0xF1,0x01,0x0D,0x92};    // запрос скорости а/м 5
  byte messageMAP[6] = {0x82,0x11,0xF1,0x01,0x0B,0x90};     // запрос абсолютное давление во впускном коллекторе (MAP) 6
  byte messageAcceler[6] = {0x82,0x11,0xF1,0x01,0x11,0x96}; // положения педали газа, % 7
  byte messageMAF[6] = {0x82,0x11,0xF1,0x01,0x10,0x95};     // массовый расход воздуха, г/cек  8

  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, 6, 23, 18, 0, 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);
      myGLCD.printNumI(Speed, 350, 0);
      
      myGLCD.setColor(255, 255, 255); 
  //    myGLCD.print("Ltr/Hor:", 10, 40);
  //    myGLCD.print("Ltr/100:", 10, 75);
  //    myGLCD.print("Ult  Km:", 10, 110);
  //    myGLCD.print("Ult Ltr:", 10, 145);
  //    myGLCD.print("Fuel Km:", 10, 180);
      myGLCD.printNumI(rpm, 150, 215);
      myGLCD.printNumI(Temp, 395, 40);
  //    myGLCD.print("Oil   C:", 255, 75);
      myGLCD.printNumI(sensors.getTempCByIndex(0), 395, 110);
      myGLCD.printNumI(t, 395, 145);
  //    myGLCD.print("Fuel  C:", 255, 180);
        myGLCD.printNumI(load, 395, 215);
     prevData = curData;   
    }
   }
   //----------------------------------------------------------
      if (currentPage == '1') {if (curWatch - prevWatch > 200){
        myGLCD.setColor(0, 255, 0);
        myGLCD.printNumI(Speed, 350, 0);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      if (currentPage == '2') {
        if (curWatch - prevWatch > 200){
        myGLCD.setColor(0, 255, 0);
        myGLCD.printNumI(Speed, 350, 0);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      if (currentPage == '3') {if (curWatch - prevWatch > 200){
        myGLCD.setColor(0, 255, 0);
        myGLCD.printNumI(Speed, 350, 0);
        
        prevData = curData;
      }
    }
  }

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

    if (pid==1){
    for (int i = 0; i < length6; i++) {
    mySerial.write(messageTemp[i]);
    delay (waitbyte); } 
   }

    if (pid==2){
    for (int i = 0; i < length6; i++) {
    mySerial.write(messageRPM[i]);
    delay (waitbyte); } 
   }

    if (pid==3){
    for (int i = 0; i < length6; i++) {
    mySerial.write(messageLoad[i]);
    delay (waitbyte); } 
   }

   if (pid==4){
    for (int i = 0; i < length6; i++) {
    mySerial.write(messageAirTemp[i]);
    delay (waitbyte); } 
   }

    if (pid==5){
    for (int i = 0; i < length6; i++) {
    mySerial.write(messageSpeed[i]);
    delay (waitbyte); } 
   }

   if (pid==6){
    for (int i = 0; i < length6; i++) {
    mySerial.write(messageMAP[i]);
    delay (waitbyte); } 
   }

   if (pid==7){
    for (int i = 0; i < length6; i++) {
    mySerial.write(messageAcceler[i]);
    delay (waitbyte); } 
   }

   if (pid==8){
    for (int i = 0; i < length6; i++) {
    mySerial.write(messageMAF[i]);
    delay (waitbyte); } 
   }
  
   pid++; if (pid>8) {pid = 1; }
   }

  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 < 12) {
     inbyte = mySerial.read();
     MessageRx[k] = inbyte;
     k++;   }
     
     for (int i = 0; i < 12; 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[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x05) {Temp = MessageRx[8]-40;
   timerenabledPID=0; }

   if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x0C) {rpm = ((MessageRx[8]*256) + MessageRx[9]) / 4;
   timerenabledPID=0; }
    
   if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x04){ load = MessageRx[8]*100/255;
   timerenabledPID=0; }
    
   if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x0F) {tempair = MessageRx[8]-40;
   timerenabledPID=0; }

   if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x0D){ Speed = MessageRx[8];
   timerenabledPID=0; }

   if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x0B){ MAP = MessageRx[8];
   timerenabledPID=0; }

   if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x11) {gaz = MessageRx[8]*100/255;
   timerenabledPID=0; }

   if (MessageRx[5]==0x11 && MessageRx[6]==0x41 && MessageRx[7]==0x10) { MAF = ((MessageRx[8]*256) + MessageRx[9]) / 100;
   timerenabledPID=0; }
  
   for (int i = 0; i < 12; 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("Ult  Km:", 10, 110);
     myGLCD.print("Ult Ltr:", 10, 145);
     myGLCD.print("Fuel Km:", 10, 180);
     myGLCD.print("Eng RPM:", 10, 215);
     myGLCD.print("Engin C:", 255, 40);
     myGLCD.print("Oil   C:", 255, 75);
     myGLCD.print("Exter C:", 255, 110);
     myGLCD.print("Inter C:", 255, 145);
     myGLCD.print("Fuel  C:", 255, 180);
     myGLCD.print("Load  %:", 255, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonINF2() ;
     buttonCHECK() ;
   }
  //-------------------------------------------------
    void drawscreen_one() {
     line() ;
     vista();
     myGLCD.print("Start of Delivery  C:", 10, 40);
     myGLCD.print("Desir inject Start C:", 10, 75);
     myGLCD.print("Actua Inject Start C:", 10, 110);
     myGLCD.print("Desir Inject Quan mg:", 10, 145);
     myGLCD.print("Actu Inject Quant mg:", 10, 180);
     myGLCD.print("Mass Air Flow     mg:", 10, 215);
 
  
     buttonHome() ;
     buttonINF2() ;
     buttonCHECK() ;
     }
  //-------------------------------------------------
   void drawscreen_two() {
     line() ;
     vista();
     myGLCD.print("EGR Pulse Ratio  :", 10, 40);
     myGLCD.print("Boost Pressure   :", 10, 75);
     myGLCD.print("Fuel Valve       :", 10, 110);
     myGLCD.print("Pump Speed       :", 10, 145);
     myGLCD.print("Glow Time        :", 10, 180);
     myGLCD.print("A/C Pressure     :", 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(255, 0, 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();
  }