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

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

а ты говорил не режет сообщение

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

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

 видимо так и происходит

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

пробуй скетч #481.  вставляй туда также распетатку Serial. не забудь Serial.begin и правильную проверку по начальным байтам ответа на 2101. и задержку буфера отрегулируй оптимальную , ну может 150 сделать или 180 

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

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

#define SERIAL_RX_BUFFER_SIZE 100

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

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

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

#504 пробовал, есть изменения?

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

Не помогло. Рвет

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

У меня ощущение что очередной запрос рвет

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

Он не успел напечатать а тут опять запрос и он после него допечатывает. Бывает что часть состоит из второй половины первого ответа и первой второго ответа

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

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

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

выкладывай каждый раз что происходит в сериале. В прошлый раз ты выложил, дак там каждый ответ по 63 байта присутствовало, а это как раз стандартный размер буфера Serial.available

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

Ок. Сейчас

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

короче я понял как нужно сделать, щас всё будет

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

MaksVV пишет:

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

#define SERIAL_RX_BUFFER_SIZE 100

вот это вообще не даст результата, ))) надо в файле библиотке Software.Serial эту строчку поменять 

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

лови троиная цифра отдельно это задер

200

Recieve:   0 FF FF 83 F1 11 C1 6B 8F 40 
Recieve:   FF FF 83 F1 11 C1 6B 8F 40 
     Initialization OK!!!!:  
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 67 1 8C D 34 0 0 2 AC 0 0 10 E3 4 33 0 0 3 1E B 61 3 9F 4 2E 3 20 EF B1 0 0 0 0 B EB 2 D8 3 8 8 CF 1 8E C 9F 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 69 1 87 D 34 0 0 2 AB 0 0 11 39 4 2D 0 0 3 25 B 51 3 9F 4 2D 3 20 EF 13 0 0 0 0 B EE 2 E7 2 EE 8 CB 1 92 C 9F 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 69 1 94 D 37 0 0 2 AB 0 0 10 F7 4 34 0 0 3 22 B 5D 3 9E 4 2E 3 20 EF 3D 0 0 0 0 B EB 3 13 2 F2 8 CD 1 91 C 9F C 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 69 1 9D D 34 0 0 2 AD 0 0 11 6A 4 30 0 0 3 1F B 6C 3 9E 4 2E 3 20 F0 16 0 0 0 0 B EE 3 15 3 15 8 D2 1 8E C 9F 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 69 1 90 D 35 0 0 2 AC 0 0 11 36 4 30 0 0 3 20 B 5F 3 9F 4 2E 3 20 EF 9C 0 0 0 0 B EC 3 24 3 4 8 CE 1 90 C 9F 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 67 1 97 D 35 0 0 2 AE 0 0 11 1 4 30 0 0 3 20 B 5F 3 9F 4 2E 3 20 EF 77 0 0 0 0 B EE 2 CD 2 FD 8 CF 1 8F C 9F 20 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 69 1 91 D 35 0 0 2 AB 0 0 11 5A 4 30 0 0 3 20 B 59 3 9F 4 2E 3 20 EF 62 0 0 0 0 B EC 3 1D 2 FF 8 CD 1 91 C 9F 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 69 1 7A D 35 0 0 2 AD 0 0 11 2 4 30 0 0 3 21 B 69 3 9E 4 2E 3 20 EF F6 0 0 0 0 B EC 2 E6 3 15 8 D0 1 8E C 9F 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 6B 1 84 D 35 0 0 2 AC 0 0 11 27 4 30 0 0 3 1B B 6D 3 9F 4 2E 3 20 F0 2B 0 0 0 0 B F0 3 11 3 13 8 D1 1 8E C 9F 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 69 1 95 D 34 0 0 2 AC 0 0 10 E8 4 2C 0 0 3 1F B 5B 3 9E 4 2E 3 20 EF 72 0 0 0 0 B EC 2 CF 2 FC 8 D0 1 90 C 9F 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 69 1 96 D 35 0 0 2 AB 0 0 11 1 4 2C 0 0 3 20 B 5D 3 9E 4 2E 3 20 EF 87 0 0 0 0 B EC 2 FB 3 0 8 CF 1 90 C 9F 
Otpravil zapros 21 01
Recieve:   FF FF FF FF FF 83 F1 11 7F 3E 12 54 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 69 1 73 D 35 0 0 2 AB 0 0 11 D 4 34 0 0 3 1C B 59 3 9E 4 2E 3 20 EF 62 0 0 0 0 B F0 2 EC 2 EF 8 CE 1 8F C 9F 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 69 1 8F D 35 0 0 2 AD 0 0 11 20 4 34 0 0 3 22 B 51 3 9E 4 2D 3 20 EF 13 0 0 0 0 B EE 2 BF 2 EA 8 CC 1 91 C 9D 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 6B 1 90 D 35 0 0 2 AB 0 0 11 1C 4 32 0 0 3 1F B 64 3 9E 4 2E 3 20 EF B7 0 0 0 0 B EE 3 B 3 9 8 CF 1 8F C 9D 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 6B 1 91 D 35 0 0 2 AC 0 0 11 4A 4 30 0 0 3 22 B 4F 3 9E 4 2D 3 20 EF 8 0 0 0 0 B F0 2 BE 2 C 8 CE 1 8F C 9D 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 6B 1 93 D 35 0 0 2 AC 0 0 11 21 4 2E 0 0 3 21 B 61 3 9E 4 2E 3 20 EF 92 0 0 0 0 B EE 2 FF 3 2 8 CE 1 90 C 9D 


190

Recieve:   0 FF FF 83 F1 11 C1 6B 8F 40 
Recieve:   FF FF 83 F1 11 C1 6B 8F 40 
     Initialization OK!!!!:  
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 85 1 91 D 46 0 0 2 AC 0 0 11 2B 4 30 0 0 3 20 B 54 3 9E 4 2E 3 20 EF 28 0 0 0 0 B EE 2 EF 2 EE 8 C8 1 90 C 8B 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 85 1 85 D 46 0 0 2 AE 0 0 11 5F 4 34 0 0 3 20 B 51 3 9F 4 2D 3 20 EF 13 0 0 0 0 C 30 2 FB 2 E3 8 C6 1 90 C 8B 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 85 1 94 D 46 0 0 2 AC 0 0 11 26 4 30 0 0 3 21 B 42 3 9E 4 2D 3 20 EE BE 0 0 0 0 C 30 2 DB 2 DA 8 C7 1 91 C 8B 11 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 85 1 80 D 46 0 0 2 AE 0 0 10 FD 4 34 0 0 3 1F B 4D 3 9E 4 2D 3 20 EE F3 0 0 0 0 C 30 2 F4 2 DC 8 C7 1 91 C 8B F4 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 85 1 96 D 46 0 0 2 AC 0 0 11 35 4 30 0 0 3 22 B 42 3 9F 4 2D 3 20 EE 9F 0 0 0 0 C 32 2 CE 2 F5 8 C8 1 8F C 8B 2 
Otpravil zapros 21 01
Recieve:   11 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 85 1 83 D 46 0 0 2 AE 0 0 10 F7 4 34 0 0 3 22 B 49 3 9E 4 2D 3 20 EE D9 0 0 0 0 C 32 2 F4 2 DD 8 C6 1 90 C 2 
Recieve:   CF 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 85 1 86 D 47 0 0 2 AE 0 0 11 16 4 35 0 0 3 22 B 49 3 9E 4 2D 3 20 EE D9 0 0 0 0 C 32 2 F8 2 DD 8 C6 1 90 C 89 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 85 1 8C D 46 0 0 2 AD 0 0 11 C 4 30 0 0 3 20 B 54 3 9F 4 2E 3 20 EF 28 0 0 0 0 C 33 2 CD 2 F0 8 C6 1 8F C 89 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 85 1 87 D 47 0 0 2 AE 0 0 11 3A 4 33 0 0 3 21 B 4D 3 9E 4 2D 3 20 EE F3 0 0 0 0 C 33 3 3 2 E3 8 C6 1 90 C 89 
Otpravil zapros 21 01
Recieve:   FF FF FF 
Otpravil zapros 21 01
Recieve:   FF FF FF FF FF 83 F1 11 7F 3E 12 54 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 85 1 8F D 47 0 0 2 AE 0 0 11 16 4 34 0 0 3 22 B 4A 3 9E 4 2D 3 20 EE A9 0 0 0 0 C 2E 2 D2 2 D6 8 C5 1 91 C 89 3B 
Otpravil zapros 21 01
Recieve:   3 9F 0 2 4A FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 85 1 8F D 47 0 0 2 AD 0 0 11 31 4 30 0 0 3 1D B 56 3 9E 4 2E 3 20 EF 7C 0 0 0 0 C 32 3 30 2 F9 8 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 85 1 84 D 48 0 0 2 AE 0 0 10 E2 4 30 0 0 3 22 B 47 3 9F 4 2D 3 20 EE C4 0 0 0 0 C 2E 2 F7 2 D9 8 C5 1 91 C 89 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 87 1 8F D 48 0 0 2 AC 0 0 10 D8 4 30 0 0 3 20 B 51 3 9E 4 2D 3 20 EF 18 0 0 0 0 C 2E 2 ED 2 EB 8 C6 1 90 C 89 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 87 1 85 D 47 0 0 2 AE 0 0 10 ED 4 2D 0 0 3 20 B 49 3 9E 4 2D 3 20 EE D4 0 0 0 0 C 30 2 FD 2 DE 8 C6 1 91 C 89 60 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 87 1 8C D 48 0 0 2 AC 0 0 11 20 4 30 0 0 3 22 B 44 3 9F 4 2D 3 20 EE AF 0 0 0 0 C 2D 2 D9 2 D9 8 C4 1 90 C 89 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 87 1 84 D 48 0 0 2 AE 0 0 11 3B 4 32 0 0 3 1E B 52 3 9E 4 2D 3 20 EF 42 0 0 0 0 C 2E 3 11 2 F3 8 C7 1 90 C 89 9E 
Otpravil zapros 21 01
Recieve:   0 2 71 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 87 1 8D D 48 0 0 2 AC 0 0 11 C 4 30 0 0 3 20 B 51 3 9F 4 2D 3 20 EF 18 0 0 0 0 C 2E 2 FC 2 CB 8 C4 1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 87 1 80 D 4A 0 0 2 AE 0 0 10 F2 4 30 0 0 3 1F B 56 3 9F 4 2E 3 20 EF 42 0 0 0 0 C 30 3 E 2 EC 8 C6 1 90 C 89 3 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 87 1 8F D 48 0 0 2 AC 0 0 11 2C 4 30 0 0 3 1E B 58 3 9E 4 2E 3 20 EF 52 0 0 0 0 B EC 2 F8 2 F6 8 C8 1 8F C 89 3 
Otpravil zapros 21 01
Recieve:   9E 0 2 F5 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 87 1 86 D 48 0 0 2 AF 0 0 11 59 4 30 0 0 3 20 B 43 3 9E 4 2D 3 20 EE C4 0 0 0 0 C 30 2 FC 2 DB 8 C6 2 

180

Recieve:   0 FF FF 83 F1 11 C1 6B 8F 40 
Recieve:   FF FF 83 F1 11 C1 6B 8F 40 
     Initialization OK!!!!:  
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 98 1 8F D 56 0 0 2 AB 0 0 B 34 4 30 0 0 3 1F B 48 3 9E 4 2D 3 20 EE C9 0 0 0 0 C 30 3 14 2 ED 8 C4 1 8E C 7C 9E 
Otpravil zapros 21 01
Recieve:   0 2 6E FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 98 1 85 D 57 0 0 2 AC 0 0 B 52 4 33 0 0 3 22 B 3E 3 9E 4 2D 3 20 EE 7A 0 0 0 0 C 30 3 2 2 CE 8 C1 1 0 
Recieve:   2 A6 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 98 1 84 D 56 0 0 2 AF 0 0 B 30 4 30 0 0 3 23 B 38 3 9E 4 2D 3 20 EE 50 0 0 0 0 C 2E 2 F7 2 C6 8 C1 1 91 C 7C 43 
Otpravil zapros 21 01
Recieve:   3 9F 0 2 F7 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 99 1 8E D 57 0 0 2 AC 0 0 B 29 4 30 0 0 3 1F B 4A 3 9E 4 2D 3 20 EE D9 0 0 0 0 C 33 2 C1 2 E8 8 41 
Recieve:   3 9E 0 2 C6 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 98 1 77 D 56 0 0 2 AC 0 0 B 14 4 2E 0 0 3 1B B 58 3 9F 4 2E 3 20 EF 52 0 0 0 0 C 2D 2 DF 3 0 8 C3 1 8E C 7C 1 89 
Otpravil zapros 21 01
Recieve:   C 41 3 9E 0 2 8B FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 99 1 7B D 57 0 0 2 AE 0 0 B 8D 4 30 0 0 3 23 B 43 3 9E 4 2D 3 20 EE DE 0 0 0 0 C 2E 3 14 2 9F 
Recieve:   0 2 5A 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 98 1 9C D 57 0 0 2 AE 0 0 B 30 4 34 0 0 3 23 B 43 3 9F 4 2D 3 20 EE A4 0 0 0 0 C 30 2 EE 2 C9 8 C1 1 92 C 7C 87 C 
Otpravil zapros 21 01
Recieve:   41 3 9F 0 2 44 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 99 1 9C D 59 0 0 2 AD 0 0 B 4C 4 30 0 0 3 1F B 55 3 9F 4 2E 3 20 EF 38 0 0 0 0 C 30 2 C0 2 EC C 43 
Recieve:   3 9E 0 2 64 
Otpravil zapros 21 01
Recieve:   FF FF FF FF FF 83 F1 11 7F 3E 12 54 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 99 1 86 D 57 0 0 2 AC 0 0 B 3E 4 30 0 0 3 22 B 3F 3 9F 4 2D 3 20 EE 84 0 0 0 0 C 32 2 F3 2 DA 8 C2 1 90 C 7C 0 
Otpravil zapros 21 01
Recieve:   2 23 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 9B 1 85 D 59 0 0 2 AD 0 0 B 68 4 33 0 0 3 20 B 50 3 9E 4 2D 3 20 EE 8A 0 0 0 0 C 2E 3 11 2 D1 8 C1 1 91 9F 
Recieve:   0 2 31 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 99 1 86 D 57 0 0 2 AD 0 0 A FC 4 35 0 0 3 21 B 4A 3 9F 4 2D 3 20 EE B9 0 0 0 0 C 30 2 17 2 DB 8 C2 1 91 C 7C C 
Otpravil zapros 21 01
Recieve:   43 3 9E 0 2 15 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 99 1 90 D 59 0 0 2 AE 0 0 B 83 4 30 0 0 3 20 B 4A 3 9F 4 2D 3 20 EE D9 0 0 0 0 C 2D 2 BD 2 E0 C 43 
Recieve:   3 9E 0 2 73 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 99 1 90 D 59 0 0 2 AD 0 0 B A9 4 33 0 0 3 21 B 4D 3 9F 4 2D 3 20 EE EE 0 0 0 0 C 2E 2 C3 2 E4 8 C2 1 8F C 7C 1 89 
Otpravil zapros 21 01
Recieve:   C 43 3 9E 0 2 BD FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 99 1 85 D 59 0 0 2 AD 0 0 B 1E 4 30 0 0 3 23 B 40 3 9E 4 2D 3 20 EE 65 0 0 0 0 C 2E 2 E3 2 9E 
Recieve:   0 2 3F 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 9D 1 81 D 59 0 0 2 AB 0 0 A FF 4 34 0 0 3 22 B 40 3 9E 4 2D 3 20 EE 65 0 0 0 0 B EE 2 E3 2 CA 8 C1 1 8F C 7C 88 C 
Otpravil zapros 21 01
Recieve:   43 3 9E 0 2 B4 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 9B 1 8F D 57 0 0 2 AD 0 0 B 5D 4 34 0 0 3 1F B 48 3 9F 4 2D 3 20 EE C9 0 0 0 0 C 2E 2 CA 2 EB C 43 
Recieve:   3 9E 0 2 32 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 9B 1 8E D 59 0 0 2 AE 0 0 B 68 4 32 0 0 3 1F B 4B 3 9E 4 2D 3 20 EE E3 0 0 0 0 C 2D 3 1D 2 E2 8 C2 1 8F C 7C 89 
Otpravil zapros 21 01
Recieve:   C 41 3 9E 0 2 72 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 99 1 83 D 59 0 0 2 AD 0 0 B 6 4 30 0 0 3 21 B 42 3 9E 4 2D 3 20 EE 99 0 0 0 0 C 2E 2 F2 2 9E 
Recieve:   0 2 4F 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 99 1 81 D 59 0 0 2 AD 0 0 B 45 4 32 0 0 3 20 B 48 3 9F 4 2D 3 20 EE 75 0 0 0 0 C 2E 2 E8 2 CD 8 C1 1 90 C 7C 88 C 
Otpravil zapros 21 01
Recieve:   43 3 9E 0 2 29 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 9B 1 82 D 5A 0 0 2 AD 0 0 B 3E 4 30 0 0 3 1F B 52 3 9E 4 2D 3 20 EF 18 0 0 0 0 B EC 3 27 2 EC C 

170

Recieve:   0 FF FF 83 F1 11 C1 6B 8F 40 
Recieve:   FF FF 83 F1 11 C1 6B 8F 40 
     Initialization OK!!!!:  
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A9 1 89 D 65 0 0 2 AE 0 0 11 16 4 33 0 0 3 20 B 45 3 9F 4 2D 3 20 EE AF 0 0 0 0 B EE 3 10 2 D8 8 C0 1 90 C 7A 1 
Otpravil zapros 21 01
Recieve:   87 C 40 3 9E 0 2 82 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A8 1 88 D 65 0 0 2 AC 0 0 11 46 4 30 0 0 3 1D B 51 3 9E 4 2D 3 20 EF 13 0 0 0 0 C 2E 2 E8 6 
Recieve:   1 88 C 41 3 9E 0 2 9A 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A9 1 8E D 65 0 0 2 AD 0 0 11 2B 4 30 0 0 3 20 B 45 3 9E 4 2D 3 20 EE AF 0 0 0 0 C 32 2 E4 2 E8 8 C2 1 8F C 7A F6 
Otpravil zapros 21 01
Recieve:   1 88 C 41 3 9E 0 2 1 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A8 1 83 D 65 0 0 2 AF 0 0 11 7 4 38 0 0 3 20 B 4D 3 9E 4 2D 3 20 EE EE 0 0 0 0 C 32 3 1 
Recieve:   30 11 EF 1 88 C 41 3 9E 0 2 2D 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A9 1 82 D 63 0 0 2 AE 0 0 10 F2 4 34 0 0 3 1F B 47 3 9E 4 2D 3 20 EE BE 0 0 0 0 C 2E 3 A 2 CF 8 C0 1 90 C 7A 30 
Otpravil zapros 21 01
Recieve:   11 DC 1 88 C 40 3 9E 0 2 76 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A9 1 89 D 65 0 0 2 AD 0 0 11 40 4 30 0 0 3 20 B 43 3 9E 4 2D 3 20 EE A4 0 0 0 0 C 30 11 
Recieve:   D9 1 88 C 41 3 9E 0 2 64 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A9 1 8C D 66 0 0 2 AE 0 0 11 1B 4 34 0 0 3 20 B 3E 3 9E 4 2D 3 20 EE C9 0 0 0 0 C 30 2 AD 2 DD 8 C2 1 90 C 7A 11 
Otpravil zapros 21 01
Recieve:   CF 1 87 C 41 3 9E 0 2 7E FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A9 1 86 D 65 0 0 2 AE 0 0 11 3B 4 30 0 0 3 1F B 45 3 9E 4 2D 3 20 EE AF 0 0 0 0 C 30 8 
Recieve:   1 30 11 B8 1 88 C 40 3 9E 0 2 AE 
Otpravil zapros 21 01
Recieve:   FF FF FF FF FF 83 F1 11 7F 3E 12 54 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A9 1 81 D 65 0 0 2 AE 0 0 10 ED 4 2C 0 0 3 20 B 4A 3 9E 4 2D 3 20 EE D9 0 0 0 0 C 2D 2 FD 2 C6 8 BF 1 91 C 7A 30 11 
Otpravil zapros 21 01
Recieve:   A5 1 87 C 40 3 9E 0 2 1E FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A9 1 8F D 66 0 0 2 AD 0 0 11 30 4 34 0 0 3 21 B 3F 3 9F 4 2D 3 20 EE E9 0 0 0 0 C 2D 8 1 
Recieve:   30 11 84 1 87 C 41 3 9E 0 2 8A 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D AB 1 8F D 66 0 0 2 AE 0 0 11 16 4 35 0 0 3 21 B 3E 3 9E 4 2D 3 20 EE 94 0 0 0 0 C 30 3 A 2 D3 8 C0 1 91 C 7A 30 
Otpravil zapros 21 01
Recieve:   11 73 1 87 C 41 3 9E 0 2 4B FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D AB 1 88 D 66 0 0 2 AD 0 0 11 11 4 2D 0 0 3 21 B 3B 3 9E 4 2D 3 20 EE 65 0 0 0 0 C 8 
Recieve:   1 30 11 63 1 87 C 41 3 9E 0 2 88 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A9 1 82 D 66 0 0 2 AE 0 0 11 11 4 30 0 0 3 1F B 49 3 9E 4 2D 3 20 EE D4 0 0 0 0 C 2E 2 AE 2 D5 8 C1 1 8F C 7A 1 
Otpravil zapros 21 01
Recieve:   30 11 5A 1 88 C 41 3 9E 0 2 FC FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D AB 1 8D D 66 0 0 2 AF 0 0 11 1C 4 30 0 0 3 20 B 47 3 9F 4 2D 3 20 EE C4 0 0 0 0 11 
Recieve:   4E 1 87 C 40 3 9E 0 2 64 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D AB 1 89 D 69 0 0 2 AF 0 0 11 3B 4 32 0 0 3 1F B 4B 3 9E 4 2D 3 20 EE E3 0 0 0 0 C 30 3 4 2 E2 8 C1 1 90 C 7A 1 
Otpravil zapros 21 01
Recieve:   88 C 41 3 9E 0 2 91 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D AB 1 91 D 67 0 0 2 AE 0 0 11 3F 4 30 0 0 3 1E B 4F 3 9E 4 2D 3 20 EE FE 0 0 0 0 C 2E 2 BB 87 
Recieve:   C 41 3 9E 0 2 88 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D AB 1 93 D 66 0 0 2 AD 0 0 11 46 4 35 0 0 3 1F B 43 3 9E 4 2D 3 20 EE C4 0 0 0 0 C 30 3 C2 2 E9 8 C2 1 8F C 7A 88 
Otpravil zapros 21 01
Recieve:   C 41 3 9E 0 2 4E FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D AB 1 86 D 67 0 0 2 AD 0 0 11 7 4 30 0 0 3 23 B 3D 3 9E 4 2D 3 20 EE 75 0 0 0 0 C 33 2 E0 2 C 
Recieve:   41 3 9E 0 2 51 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D AB 1 81 D 67 0 0 2 AD 0 0 10 C8 4 30 0 0 3 1F B 4B 3 9E 4 2D 3 20 EE E3 0 0 0 0 C 2D 2 BE 2 C6 8 C0 1 90 C 7A 88 
Otpravil zapros 21 01
Recieve:   C 40 3 9F 0 2 31 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D AB 1 85 D 67 0 0 2 AE 0 0 11 C 4 33 0 0 3 20 B 45 3 9F 4 2D 3 20 EE B4 0 0 0 0 B EE 3 13 2 A9 

160

Recieve:   0 FF FF 83 F1 11 C1 6B 8F 40 
Recieve:   FF FF 83 F1 11 C1 6B 8F 40 
     Initialization OK!!!!:  
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B7 1 90 D 74 0 0 2 B1 0 0 11 16 4 32 0 0 3 1F B 36 3 9E 4 2D 3 20 EE 40 0 0 0 0 C 30 2 AD 2 D3 8 C0 1 8E C 77 2C 
Otpravil zapros 21 01
Recieve:   2 98 A9 8 1 30 B 5A 1 88 C 41 3 9E 0 2 5D FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B7 1 83 D 74 0 0 2 B0 0 0 11 30 4 34 0 0 3 22 B 23 3 9E 4 2C 3 20 ED 2 
Recieve:   16 A9 8 1 30 B 4F 1 86 C 41 3 9E 0 2 2B 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B7 1 80 D 74 0 0 2 AF 0 0 11 71 4 34 0 0 3 1B B 43 3 9F 4 2D 3 20 EE 9F 0 0 0 0 C 32 2 D8 2 D5 8 BF 1 8D C 75 A9 8 
Otpravil zapros 21 01
Recieve:   1 30 B 3F 1 87 C 41 3 9E 0 2 17 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B7 1 89 D 74 0 0 2 AF 0 0 10 E2 4 30 0 0 3 22 B 32 3 9E 4 2D 3 20 EE 20 0 0 0 30 
Recieve:   B 3A 1 86 C 41 3 9E 0 2 33 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B7 1 8B D 74 0 0 2 AE 0 0 11 45 4 33 0 0 3 21 B 37 3 9E 4 2D 3 20 EE 45 0 0 0 0 C 30 2 DA 2 C4 8 BF 1 90 C 77 0 1 
Otpravil zapros 21 01
Recieve:   2C 2 76 A9 8 1 30 B 20 1 86 C 41 3 9E 0 2 4E FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B7 1 8A D 74 0 0 2 B1 0 0 11 11 4 34 0 0 3 20 B 39 3 9E 4 2D 3 20 0 
Recieve:   1 2C 2 7F AD 8 1 30 B 18 1 87 C 41 3 9E 0 2 F4 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B7 1 89 D 74 0 0 2 AF 0 0 11 20 4 30 0 0 3 21 B 1C 3 9E 4 2C 3 20 ED 92 0 0 0 0 C 30 2 83 2 A2 8 BC 1 91 C 75 AD 
Otpravil zapros 21 01
Recieve:   8 1 30 B 2 1 86 C 43 3 9E 0 2 54 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B7 1 82 D 74 0 0 2 B0 0 0 11 1C 4 34 0 0 3 1F B 43 3 9F 4 2D 3 20 EE 9F 0 0 1 
Recieve:   30 A F9 1 87 C 41 3 9E 0 2 1F 
Otpravil zapros 21 01
Recieve:   FF FF FF FF FF 83 F1 11 7F 3E 12 54 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B9 1 84 D 74 0 0 2 AF 0 0 10 E8 4 30 0 0 3 1F B 29 3 9E 4 2C 3 20 ED D6 0 0 0 0 C 30 2 F1 2 CE 8 C1 1 8E C 77 A9 8 
Otpravil zapros 21 01
Recieve:   1 30 A DF 1 87 C 41 3 9E 0 2 4E FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B7 1 8E D 74 0 0 2 AF 0 0 11 26 4 30 0 0 3 20 B 32 3 9E 4 2D 3 20 EE 40 0 0 0 2C 
Recieve:   2 6D A9 8 1 30 A CE 1 87 C 41 3 9E 0 2 93 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B9 1 7E D 75 0 0 2 B0 0 0 10 89 4 33 0 0 3 24 B 2A 3 9E 4 2C 3 20 ED E1 0 0 0 0 C 33 2 D7 2 B4 8 BD 1 91 C 77 30 
Otpravil zapros 21 01
Recieve:   A AA 1 86 C 41 3 9F 0 2 57 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B9 1 87 D 74 0 0 2 AF 0 0 11 12 4 30 0 0 3 1C B 47 3 9E 4 2D 3 20 EE EE 0 0 0 0 C 82 AD 
Recieve:   8 1 30 A 9A 1 88 C 43 3 9E 0 2 4D 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B9 1 99 D 77 0 0 2 AF 0 0 10 FC 4 30 0 0 3 20 B 34 3 9E 4 2D 3 20 EE 4A 0 0 0 0 C 30 2 A9 2 C5 8 BF 1 91 C 75 1 
Otpravil zapros 21 01
Recieve:   30 A 96 1 86 C 44 3 9E 0 2 5E FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B9 1 78 D 75 0 0 2 AE 0 0 11 26 4 32 0 0 3 1F B 48 3 9E 4 2D 3 20 EE C9 0 0 0 0 1 
Recieve:   30 A 85 1 86 C 43 3 9E 0 2 35 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B9 1 8E D 74 0 0 2 AD 0 0 10 BE 4 30 0 0 3 21 B 38 3 9F 4 2D 3 20 EE 4A 0 0 0 0 C 32 2 C4 2 C5 8 BE 1 8F C 77 A0 
Otpravil zapros 21 01
Recieve:   0 1 2C 2 73 A9 8 1 30 A 72 1 87 C 41 3 9E 0 2 8 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B9 1 91 D 75 0 0 2 AE 0 0 11 2B 4 34 0 0 3 22 B 2A 3 9E 4 2C 2 
Recieve:   90 AD 8 1 30 A 6F 1 86 C 43 3 9E 0 2 27 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B9 1 87 D 75 0 0 2 B0 0 0 10 A4 4 30 0 0 3 23 B 32 3 9F 4 2D 3 20 EE 1B 0 0 0 0 B F0 2 D9 2 B4 8 BD 1 91 C 75 8 
Otpravil zapros 21 01
Recieve:   1 30 A 69 1 86 C 43 3 9E 0 2 3D FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B9 1 91 D 75 0 0 2 AF 0 0 10 B9 4 30 0 0 3 1E B 43 3 9E 4 2D 3 20 EE A4 0 0 0 8 
Recieve:   1 30 A 60 1 87 C 41 3 9E 0 2 8E 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B9 1 8C D 75 0 0 2 B0 0 0 11 B 4 30 0 0 3 22 B 2E 3 9E 4 2C 3 20 EE 0 0 0 0 0 C 2E 2 E1 2 A7 8 BD 1 90 C 77 30 
Otpravil zapros 21 01
Recieve:   A 5A 1 86 C 43 3 9E 0 2 8D FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B9 1 8B D 75 0 0 2 AD 0 0 10 C9 4 2E 0 0 3 20 B 3A 3 9F 4 2D 3 20 EE 5A 0 0 0 0 C 8 
Recieve:   1 30 A 55 1 88 C 41 3 9E 0 2 2F FF FF 81 F1 11 7E 1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D BA 1 82 D 75 0 0 2 AF 0 0 11 12 4 2A 0 0 3 1D B 43 3 9E 4 2D 3 20 EE A4 0 0 0 0 C 2E 2 BD 2 B9 8 BC 1 8F C 75 2 
Otpravil zapros 21 01
Recieve:   64 A9 8 1 30 A 4D 1 87 C 41 3 9E 0 2 60 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B9 1 84 D 75 0 0 2 B1 0 0 11 63 4 30 0 0 3 20 B 34 3 9E 4 2D 3 20 EE 30 1 
Recieve:   30 A 46 1 86 C 41 3 9E 0 2 74 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B9 1 88 D 74 0 0 2 B0 0 0 10 E7 4 30 0 0 3 21 B 38 3 9E 4 2D 3 20 EE 4A 0 0 0 0 C 35 2 DF 2 C4 8 C0 1 90 C 77 1 
Otpravil zapros 21 01
Recieve:   30 A 3E 1 87 C 43 3 9E 0 2 F FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D BA 1 8F D 77 0 0 2 AF 0 0 11 11 4 30 0 0 3 1F B 39 3 9E 4 2D 3 20 EE 9F 0 0 0 0 A9 
Recieve:   8 1 30 A 42 1 88 C 41 3 9E 0 2 B1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D BA 1 86 D 77 0 0 2 AF 0 0 11 3A 4 2E 0 0 3 21 B 36 3 9E 4 2D 3 20 EE 9F 0 0 0 0 C 32 3 3 2 D5 8 C0 1 90 C 75 30 
Otpravil zapros 21 01
Recieve:   A 31 1 86 C 43 3 9E 0 2 F FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D BA 1 84 D 77 0 0 2 AF 0 0 10 DE 4 2D 0 0 3 1D B 3C 3 9E 4 2D 3 20 EE 6A 0 0 0 0 C AD 8 
Recieve:   1 30 A 31 1 86 C 43 3 9E 0 2 5 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D BA 1 88 D 75 0 0 2 AF 0 0 11 21 4 32 0 0 3 1F B 38 3 9E 4 2D 3 20 EE 6F 0 0 0 0 C 32 2 A7 2 C1 8 BE 1 90 C 75 1 30 
Otpravil zapros 21 01
Recieve:   A 2C 1 87 C 43 3 9E 0 2 20 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D BA 1 87 D 77 0 0 2 AE 0 0 10 8F 4 2D 0 0 3 1F B 33 3 9F 4 2D 3 20 EE 25 0 0 0 0 C 1 
Recieve:   2C 2 5E AD 8 1 30 A 2B 1 86 C 43 3 9E 0 2 6D 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D BA 1 88 D 77 0 0 2 AE 0 0 11 20 4 2D 0 0 3 24 B 24 3 9F 4 2C 3 20 ED B1 0 0 0 0 B F0 2 89 2 A8 8 BC 1 91 C 75 AD 
Otpravil zapros 21 01
Recieve:   8 1 30 A 1E 1 85 C 41 3 9E 0 2 4A FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D BA 1 8B D 77 0 0 2 B1 0 0 11 C 4 2D 0 0 3 1B B 49 3 9E 4 2D 3 20 EE CE 0 0 2C 
Recieve:   2 B2 AD 8 1 30 A 1E 1 87 C 44 3 9E 0 2 2D 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D B9 1 8A D 77 0 0 2 B0 0 0 11 1B 4 2C 0 0 3 20 B 32 3 9F 4 2D 3 20 EE 20 0 0 0 0 C 2E 2 E2 2 C3 8 BC 1 90 C 75 1 
Otpravil zapros 21 01
Recieve:   30 A 16 1 86 C 43 3 9E 0 2 3 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D BA 1 86 D 77 0 0 2 AF 0 0 10 F2 4 30 0 0 3 1F B 3B 3 9E 4 2D 3 20 ED A1 0 0 0 0 1 

150

Recieve:   0 FF FF 83 F1 11 C1 6B 8F 40 
Recieve:   FF FF 83 F1 11 C1 6B 8F 40 
     Initialization OK!!!!:  
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D C5 1 87 D 80 0 0 2 B0 0 0 11 1B 4 2D 0 0 3 21 B 29 3 9E 4 2C 3 20 ED DB 0 0 0 0 C 32 2 A7 2 B0 8 BD 1 90 C 75 2C 
Otpravil zapros 21 01
Recieve:   2 34 AD 8 1 30 9 BB 1 85 C 41 3 9E 0 2 CD FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D C5 1 8F D 82 0 0 2 AF 0 0 11 8 4 30 0 0 3 1B B 3A 3 9E 4 2D 3 20 EE 0 
Recieve:   1 2C 2 A9 A9 8 1 30 9 BE 1 87 C 41 3 9E 0 2 28 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D C5 1 82 D 83 0 0 2 AF 0 0 10 ED 4 2D 0 0 3 1E B 3A 3 9E 4 2D 3 20 ED F1 0 0 0 0 C 30 2 DA 2 BA 8 BD 1 91 C 75 2C 
Otpravil zapros 21 01
Recieve:   2 40 AD 8 1 30 9 BF 1 86 C 40 3 9E 0 2 C FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D C5 1 8F D 82 0 0 2 B0 0 0 10 BE 4 2D 0 0 3 20 B 34 3 9F 4 2D 3 20 EE 2C 2 
Recieve:   52 AD 8 1 30 9 BE 1 86 C 41 3 9E 0 2 FA 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D C5 1 95 D 80 0 0 2 AE 0 0 10 CD 4 2C 0 0 3 20 B 33 3 9E 4 2D 3 20 EE 25 0 0 0 0 C 2E 2 DF 2 BE 8 BE 1 90 C 
Otpravil zapros 21 01
Recieve:   75 A0 0 1 2C 2 61 AD 8 1 30 9 BE 1 86 C 40 3 9E 0 2 51 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D C5 1 87 D 82 0 0 2 B0 0 0 11 26 4 2D 0 0 3 20 B 36 3 9E 2C 2 
Recieve:   5B A9 8 1 30 9 BB 1 86 C 40 3 9E 0 2 69 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D C5 1 8E D 82 0 0 2 B0 0 0 11 1C 4 2C 0 0 3 1D B 40 3 9E 4 2D 3 20 EE 99 0 0 0 0 B F0 2 B7 2 D4 8 C0 1 8E 
Otpravil zapros 21 01
Recieve:   C 75 A0 0 1 2C 2 99 A9 8 1 30 9 BE 1 87 C 40 3 9E 0 2 0 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D C5 1 83 D 82 0 0 2 B0 0 0 10 8F 4 2D 0 0 3 20 B 29 3 A0 
Recieve:   0 1 2C 2 28 A9 8 1 30 9 B9 1 86 C 41 3 9F 0 2 A 
Otpravil zapros 21 01
Recieve:   FF FF FF FF FF 83 F1 11 7F 3E 12 54 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D C5 1 8B D 82 0 0 2 AF 0 0 11 1B 4 32 0 0 3 20 B 27 3 9E 4 2C 3 20 ED CC 0 0 0 0 C 30 2 C4 2 B3 8 BD 1 91 C 75 2C 
Otpravil zapros 21 01
Recieve:   2 28 A9 8 1 30 9 B2 1 86 C 41 3 9E 0 2 CC FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D C7 1 83 D 83 0 0 2 AF 0 0 10 A9 4 2E 0 0 3 1E B 3C 3 9E 4 2D 3 20 EE 8F C 
Recieve:   75 A0 0 1 2C 2 5B A9 8 1 30 9 BA 1 87 C 41 3 9E 0 2 F1 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D C7 1 8B D 80 0 0 2 AF 0 0 11 26 4 2D 0 0 3 1E B 29 3 9E 4 2C 3 20 ED D6 0 0 0 0 C 30 2 98 2 AF 8 BC 
Otpravil zapros 21 01
Recieve:   1 8F C 75 A0 0 1 2C 2 31 AD 8 1 30 9 B5 1 86 C 41 3 9E 0 2 B9 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D C7 1 87 D 82 0 0 2 AE 0 0 10 CD 4 2C 0 0 3 21 B 2C 2 
Recieve:   16 AD 8 1 30 9 A5 1 86 C 41 3 9F 0 2 A 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D C7 1 85 D 82 0 0 2 AD 0 0 10 F8 4 29 0 0 3 1C B 40 3 9F 4 2D 3 20 EE 8F 0 0 0 0 C 30 2 C4 2 D2 8 BF 1 8E 
Otpravil zapros 21 01
Recieve:   C 75 A0 0 1 2C 2 46 AD 8 1 30 9 AA 1 87 C 41 3 9F 0 2 AE FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D C7 1 87 D 82 0 0 2 B0 0 0 11 25 4 2C 0 0 3 23 B 31 3 A0 
Recieve:   0 1 2C 2 68 A9 8 1 30 9 AA 1 86 C 41 3 9F 0 2 7A 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D C7 1 88 D 82 0 0 2 B0 0 0 10 FC 4 2A 0 0 3 21 B 1B 3 9E 4 2C 3 20 ED 6D 0 0 0 0 C 30 2 D5 2 C9 8 BE 1 8F C 75 2C 
Otpravil zapros 21 01
Recieve:   2 76 AD 8 1 30 9 B0 1 86 C 41 3 9E 0 2 B0 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D C7 1 5D D 80 0 0 2 AF 0 0 10 ED 4 2D 0 0 3 1F B 3E 3 9F 4 2D 3 20 EE C 

140


Recieve:   0 FF FF 83 F1 11 C1 6B 8F 40 
Recieve:   FF FF 83 F1 11 C1 6B 8F 40 
     Initialization OK!!!!:  
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D D5 1 87 D 8F 0 0 2 AF 0 0 10 F8 4 2D 0 0 3 1D B 29 3 9E 4 2C 3 20 ED DB 0 0 0 0 C 2E 2 D2 2 B8 8 BE 
Otpravil zapros 21 01
Recieve:   1 8F C 75 A0 0 1 2C 2 69 AD 8 1 30 9 A3 1 86 C 47 3 9E 0 2 16 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D D3 1 88 D 8F 0 0 2 B0 0 0 10 E7 4 2E 0 0 3 22 B 1 
Recieve:   91 C 75 A0 0 1 2C 1 E6 A9 8 1 30 9 9C 1 86 C 47 3 9E 0 2 38 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D D5 1 88 D 8F 0 0 2 AE 0 0 11 50 4 2E 0 0 3 20 B 34 3 9F 4 2D 3 20 EE 30 0 0 0 0 C 32 2 86 2 A1 8 BC 
Otpravil zapros 21 01
Recieve:   1 90 C 75 A0 0 1 2C 2 7 A9 8 1 30 9 9A 1 86 C 47 3 9E 0 2 7 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D D5 1 85 D 8F 0 0 2 B1 0 0 11 1 4 2D 0 0 3 20 B 2 
Recieve:   A7 2 9E 8 BC 1 90 C 75 A0 0 1 2C 1 FE A9 8 1 30 9 99 1 86 C 47 3 9E 0 2 FC 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D D5 1 88 D 8F 0 0 2 AF 0 0 10 DD 4 2E 0 0 3 22 B 2B 3 9E 4 2C 3 20 ED C1 0 0 0 0 C 32 2 
Otpravil zapros 21 01
Recieve:   8E 2 AB 8 BD 1 91 C 75 A0 0 1 2C 2 10 A9 8 1 30 9 99 1 86 C 47 3 9E 0 2 37 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D D5 1 89 D 91 0 0 2 B1 0 0 11 20 4 2D 8F 
Recieve:   C 75 A0 0 1 2C 2 51 A9 8 1 30 9 97 1 86 C 47 3 9E 0 2 8F 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D D3 1 8E D 8F 0 0 2 AF 0 0 10 8F 4 29 0 0 3 21 B 26 3 9E 4 2C 3 20 ED 87 0 0 0 0 C 30 2 AB 2 A0 
Otpravil zapros 21 01
Recieve:   8 BB 1 90 C 75 A0 0 1 2C 2 4 A9 8 1 30 9 91 1 86 C 47 3 9F 0 2 A2 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D D5 1 8B D 91 0 0 2 B0 0 0 11 31 4 2D 0 0 3 2 
Recieve:   AB 8 BD 1 90 C 75 A0 0 1 2C 2 23 A9 8 1 30 9 95 1 86 C 47 3 9E 0 2 BC 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D D3 1 7F D 8F 0 0 2 B0 0 0 10 F7 4 30 0 0 3 22 B 29 3 9E 4 2C 3 20 ED D6 0 0 0 0 C 30 2 B5 2 AF 8 BD 1 91 C 75 
Otpravil zapros 21 01
Recieve:   A0 0 1 2C 2 31 A9 8 1 30 9 97 1 86 C 47 3 9E 0 2 A4 FF FF FF FF FF 83 F1 11 7F 3E 12 54 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D D5 1 86 D 91 0 0 2 AF 0 0 11 4F 4 30 0 0 3 22 B 18 3 9E 4 2C 3 20 ED 52 0 0 0 0 C 30 2 78 2 96 8 BB 1 8F C 
Otpravil zapros 21 01
Recieve:   75 A0 0 1 2C 1 E6 A9 8 1 30 9 95 1 86 C 47 3 9E 0 2 CA FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D D5 1 8A D 91 0 0 2 AE 0 0 10 FC 4 2C 0 0 3 1E B 2C 3 9E 2 

130

Recieve:   0 FF FF 83 F1 11 C1 6B 8F 40 
Recieve:   FF FF 83 F1 11 C1 6B 8F 40 
     Initialization OK!!!!:  
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D DF 1 86 D 99 0 0 2 B0 0 0 10 84 4 2D 0 0 3 22 B 1A 3 9E 4 2C 3 20 ED 62 0 0 0 0 C 32 
Otpravil zapros 21 01
Recieve:   2 C2 2 99 8 BC 1 90 C 75 A0 0 1 2C 2 7 AD 8 1 30 9 7F 1 86 C 44 3 9E 0 2 7E FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D DF 1 86 D 99 0 0 2 AE 0 0 10 84 4 C 
Recieve:   30 2 A8 2 9D 8 BC 1 91 C 75 A0 0 1 2C 1 FB AD 8 1 30 9 7E 1 86 C 44 3 9E 0 2 7D 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D E1 1 84 D 97 0 0 2 AF 0 0 10 D2 4 2D 0 0 3 21 B 1A 3 9E 4 2C 3 20 ED 62 0 0 0 0 C 30 2 9B 2 
Otpravil zapros 21 01
Recieve:   9E 8 BD 1 8F C 75 A0 0 1 2C 1 FE A9 8 1 30 9 7A 1 86 C 44 3 9E 0 2 91 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D DF 1 84 D 9A 0 0 2 AE 0 0 10 F7 4 2D 0 0 BA 
Recieve:   8 BE 1 8F C 75 A0 0 1 2C 2 4E A9 8 1 30 9 7B 1 86 C 44 3 9E 0 2 18 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D DF 1 83 D 99 0 0 2 B0 0 0 10 DD 4 2D 0 0 3 1F B 2D 3 9E 4 2C 3 20 ED FB 0 0 0 0 C 30 2 AB 2 B7 
Otpravil zapros 21 01
Recieve:   8 BE 1 8F C 75 A0 0 1 2C 2 47 A9 8 1 30 9 79 1 86 C 43 3 9E 0 2 B8 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D DF 1 84 D 99 0 0 2 AD 0 0 10 BE 4 2A 0 0 3 D1 
Recieve:   2 B0 8 BD 1 90 C 75 A0 0 1 2C 2 34 A9 8 1 30 9 7D 1 86 C 44 3 9E 0 2 81 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D DF 1 7D D 99 0 0 2 B0 0 0 11 12 4 2E 0 0 3 1E B 3E 3 9F 4 2D 3 20 EE 7A 0 0 0 0 C 32 2 BF 2 C9 
Otpravil zapros 21 01
Recieve:   8 BF 1 8D C 75 A0 0 1 2C 2 7A A9 8 1 30 9 80 1 87 C 44 3 9E 0 2 DE FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D E1 1 6D D 99 0 0 2 AD 0 0 11 27 4 2B 0 0 3 BD 
Recieve:   8 BE 1 8F C 75 A0 0 1 2C 2 4D A9 8 1 30 9 76 1 87 C 44 3 9F 0 2 4E 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D DF 1 8F D 99 0 0 2 AE 0 0 10 C8 4 2D 0 0 3 22 B 29 3 9E 4 2C 3 20 ED D6 0 0 0 0 C 30 2 A2 2 
Otpravil zapros 21 01
Recieve:   A7 8 BD 1 8F C 75 A0 0 1 2C 1 FB AD 8 1 30 9 76 1 86 C 44 3 9E 0 2 22 FF FF FF FF FF 83 F1 11 7F 3E 12 54 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D E1 1 93 D 99 0 0 2 AE 0 0 10 FD 4 29 0 0 3 1F B 23 3 9E 4 2C 3 20 ED AC 0 0 
Otpravil zapros 21 01
Recieve:   0 0 C 32 2 9C 2 A8 8 BD 1 8F C 75 A0 0 1 2C 2 17 A9 8 1 30 9 77 1 86 C 44 3 9E 0 2 3D FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D DF 1 81 D 9A 0 0 2 AE 0 32 
Recieve:   2 A5 2 AB 8 BC 1 90 C 75 A0 0 1 2C 2 13 A9 8 1 30 9 7B 1 86 C 45 3 9E 0 2 2 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D E1 1 86 D 99 0 0 2 AF 0 0 10 ED 4 29 0 0 3 20 B 2F 3 9E 4 2C 3 20 EE 6 0 0 0 0 C 30 
Otpravil zapros 21 01
Recieve:   2 A5 2 B2 8 BE 1 90 C 75 A0 0 1 2C 2 4A AD 8 1 30 9 7A 1 86 C 44 3 9E 0 2 D6 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D E1 1 84 D 99 0 0 2 AE 0 0 10 CD 4 C 

120

Recieve:   0 FF FF 83 F1 11 C1 6B 8F 40 
Recieve:   FF FF 83 F1 11 C1 6B 8F 40 
     Initialization OK!!!!:  
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D EC 1 89 D A3 0 0 2 AF 0 0 10 E8 4 2D 0 0 3 1D B 29 3 9F 4 2C 3 20 ED DB 0 0 0 0 C 
Otpravil zapros 21 01
Recieve:   2E 2 BF 2 B3 8 BF 1 8E C 77 A0 0 1 2C 2 39 AD 8 1 30 9 62 1 87 C 4A 3 9E 0 2 B1 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D EC 1 A5 D A3 0 0 2 AF 0 0 10 CD 0 
Recieve:   C 30 2 95 2 92 8 BB 1 90 C 77 A0 0 1 2C 1 DA A9 8 1 30 9 6A 1 86 C 48 3 9F 0 2 59 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D EC 1 92 D A3 0 0 2 AF 0 0 11 7 4 2A 0 0 3 1D B 2B 3 9F 4 2C 3 20 ED EB 0 0 0 0 
Otpravil zapros 21 01
Recieve:   C 32 2 D9 2 9E 8 BD 1 8F C 77 A0 0 1 2C 2 13 A9 8 1 30 9 60 1 87 C 4A 3 9E 0 2 C5 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D EC 1 88 D A3 0 0 2 AF 0 0 11 C 
Recieve:   30 2 9A 2 9B 8 BC 1 90 C 77 A0 0 1 2C 1 F5 A9 8 1 30 9 62 1 86 C 48 3 9F 0 2 B9 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D EE 1 87 D A3 0 0 2 B1 0 0 10 8A 4 2D 0 0 3 1F B 21 3 9F 4 2C 3 20 ED 9C 0 0 0 0 C 
Otpravil zapros 21 01
Recieve:   33 2 CD 2 A7 8 BD 1 8F C 77 A0 0 1 2C 2 4 A9 8 1 30 9 5C 1 86 C 47 3 9E 0 2 D3 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D EC 1 84 D A2 0 0 2 AE 0 0 10 E2 0 0 
Recieve:   C 30 2 BC 2 AC 8 BD 1 8F C 77 A0 0 1 2C 2 28 A9 8 1 30 9 68 1 87 C 47 3 9F 0 2 75 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D EC 1 7D D A5 0 0 2 AF 0 0 11 1C 4 2D 0 0 3 1D B 36 3 9F 4 2D 3 20 EE 40 0 0 0 0 
Otpravil zapros 21 01
Recieve:   C 30 2 EF 2 AF 8 BE 1 8F C 77 A0 0 1 2C 2 46 A9 8 1 30 9 5F 1 87 C 47 3 9E 0 2 81 FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D EE 1 86 D A3 0 0 2 AF 0 0 10 C 
Recieve:   32 2 9E 2 89 8 BB 1 93 C 77 A0 0 1 2C 1 BF AD 8 1 30 9 65 1 85 C 47 3 9E 0 2 F9 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D EC 1 88 D A2 0 0 2 AF 0 0 11 3B 4 2D 0 0 3 1F B 24 3 9E 4 2C 3 20 ED B1 0 0 0 0 C 
Otpravil zapros 21 01
Recieve:   30 2 CB 2 A4 8 BF 1 8F C 77 A0 0 1 2C 2 20 A9 8 1 30 9 61 1 86 C 47 3 9E 0 2 B3 FF FF FF FF FF 83 F1 11 7F 3E 12 54 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D EC 1 84 D A3 0 0 2 B0 0 0 11 2B 4 2A 0 0 3 20 B 1A 3 9E 4 2C 3 20 
Otpravil zapros 21 01
Recieve:   ED 62 0 0 0 0 C 2E 2 AB 2 99 8 BC 1 90 C 77 A0 0 1 2C 1 EF A9 8 1 30 9 66 1 86 C 47 3 9E 0 2 EA FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D EE 1 84 D A3 0 0 
Recieve:   0 0 0 C 30 2 EB 2 C7 8 C0 1 8E C 77 A0 0 1 2C 2 2B A9 8 1 30 9 62 1 86 C 45 3 9E 0 2 60 
Otpravil zapros 21 01
Recieve:   FF FF FF 80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D EE 1 81 D A5 0 0 2 B0 0 0 11 C 4 2D 0 0 3 21 B 26 3 9E 4 2C 3 20 ED C1 0 0 0 

110

жка

 

 

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

ну понятно, буфера не хватает в нашем скетче, всё коряво конечно сделано. Самое простое сейчас. Короче залезаешь в папку Arduino. она по умолчанию обычно в Programm Files. Ищешь файл SoftwareSerial.h   открываешь с помощью блокнота  и меняешь в строке  #define _SS_MAX_RX_BUFF 64      цифру 64 на 100 например. этого должно хватить. потом сохраняешь,  и вуаля. Задержку похоже придётся около 300 делать для стабильности 

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

Понял. Щас дома сделаю

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

viki13viki пишет:

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

ставь в формуле /100.0 вместо /100

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

Да MaksVV это сработало идеально, но я нашел еще один косяк, оказывается задержка которую я сегодня целый день мучал, соединяла в одном ответе два куска из разных ответов, закоментировал ее и как ты сказал вуаля!!!! завтра уже все четко проверю и отпишусь. с запятыми понял. если все пучком будет то, остается расход на 100 , в час и бак топлива ну и ошибки, чтение и стирание. Уже близок твой конец KWP2000  :)

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

не понял про какую ты задержку 

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

про ние  гадину.......

void receive () {
     if (mySerial.available()) {
     //delay(150);
     int k=0;
     byte inbyte=0;

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

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

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

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

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

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

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


    MAF =  ((MessageRx[29]*256)+MessageRx[30])/10;
    BoostPres =  ((MessageRx[31]*256)+MessageRx[32])/1000;
    RPM =  (MessageRx[35]*256)+MessageRx[36];
    EGRmg =  ((MessageRx[37]*256)+MessageRx[38])/10;
    BoostPresCom =  ((MessageRx[41]*256)+MessageRx[42])/1000;
    Speed =  (MessageRx[47]*256)+MessageRx[48];
    DesaInjQua =  ((MessageRx[53]*256)+MessageRx[54])/100.00;
    InjQua =  ((MessageRx[55]*256)+MessageRx[56])/100.00;
    StaDaliv =  ((MessageRx[57]*256)+MessageRx[58])/100;
    PumpRPM =  (MessageRx[59]*256)+MessageRx[60];
    EGRPul =  ((MessageRx[65]*256)+MessageRx[66])/100;
    SolenPul =  ((MessageRx[67]*256)+MessageRx[68])/100;
    SolenPre =  ((MessageRx[76]*256)+MessageRx[77])/100;
    DesInj =  ((MessageRx[75]*3)+(MessageRx[76])/100.00)+0.3;
    ActInj =  ((MessageRx[19]*3)+(MessageRx[20])/100.00)+0.3;

    int A = 0;
    if  (MessageRx[77]<=0x0A) A = 277;
    if  (MessageRx[77]==0x0B || MessageRx[77]==0x0C) A = 278;
    if  (MessageRx[77]>=0x0D) A = 279;
    double B = MessageRx[78]/10.0;
    double cel , drob ;
    drob = modf(B, &cel);
    if (drob>0.6) cel++;
    TempAir =  ((MessageRx[77]*26)-A)+cel;
    
    
    if  (MessageRx[17]<=0x0A) A = 277;
    if  (MessageRx[17]==0x0B || MessageRx[77]==0x0C) A = 278;
    if  (MessageRx[17]>=0x0D) A = 279;
    B = MessageRx[18]/10.0;
    drob = modf(B, &cel);
    if (drob>0.6) cel++;
    Temp =  ((MessageRx[17]*26)-A)+cel;

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


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

    
    

 

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

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

Recieve:   0 FF FF 83 F1 11 C1 6B 8F 40 
Recieve:   FF FF 83 F1 11 C1 6B 8F 40 
Recieve:   FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A0 1 90 D 65 0 0 2 AD 0 0 B 5A 4 3E 0 0 3 1D B 31 3 A7 4 2C 3 20 EE 1B 0 0 0 0 C 35 2 A9 2 BB 8 CF 1 8E C CF A0 0 B 65 2 4F A9 8 1 30 13 F7 1 8E C 39 3 A5 0 2 4D 
Recieve:   FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A0 1 8F D 65 0 0 2 AD 0 0 B 34 4 3C 0 0 3 1F B 25 3 A7 4 2C 3 20 ED C1 0 0 0 0 C 32 2 F7 2 AA 8 CF 1 8F C CF A0 0 B 66 2 29 A9 8 1 30 13 D3 1 8E C 39 3 A7 0 2 B3 
Recieve:   FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A0 1 8C D 63 0 0 2 AF 0 0 B 22 4 3E 0 0 3 20 B 1F 3 A7 4 2C 3 20 ED 8C 0 0 0 0 C 33 2 EB 2 A0 8 CE 1 90 C CF A0 0 B 62 2 4 AD 8 1 30 13 AA 1 8D C 38 3 A7 0 2 1 
Recieve:   FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A0 1 8B D 65 0 0 2 AE 0 0 B 14 4 3C 0 0 3 1F B 2A 3 A7 4 2C 3 20 ED E6 0 0 0 0 C 33 2 F6 2 B1 8 CF 1 8F C CF A0 0 B 64 1 FE A9 8 1 30 13 7D 1 8E C 38 3 A7 0 2 3C 
Recieve:   FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 9E 1 8D D 66 0 0 2 AC 0 0 A EE 4 3C 0 0 3 1E B 2D 3 A7 4 2C 3 20 ED FB 0 0 0 0 C 33 2 F2 2 AF 8 CF 1 8F C CF A0 0 B 60 2 41 A9 8 1 30 13 64 1 8E C 39 3 A7 0 2 4D 
Recieve:   FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A0 1 90 D 66 0 0 2 AD 0 0 A E7 4 3A 0 0 3 1D B 27 3 A5 4 2C 3 20 ED CC 0 0 0 0 C 35 2 A5 2 AC 8 D1 1 90 C CF A0 0 B 6C 2 43 AD 8 1 30 13 2F 1 8E C 39 3 A7 0 2 A4 
Recieve:   FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D 9E 1 D2 D 66 5 B6 2 AF 0 0 F CB 4 30 0 0 3 C F C9 3 A7 4 49 3 20 FA A7 0 0 0 0 C 32 3 43 5 8C 9 C7 1 F5 C CF A0 0 8 D9 A FB AC 8 1 30 19 64 1 F5 C 38 3 A5 0 2 BF 
Recieve:   FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A0 2 A D 67 7 1A 2 AF 0 0 F BF 4 2A 0 0 5 57 E F1 3 A7 4 7C 3 20 FC 52 0 0 0 0 C 35 4 22 5 71 A 28 2 9B C CF A0 0 9 76 A 3B A8 8 1 30 19 64 2 2A C 33 3 A7 0 2 81 
Recieve:   FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A0 2 3B D 66 0 0 2 B1 0 0 E 60 4 40 0 0 5 6F A 96 3 A7 4 41 3 20 E5 42 0 0 0 0 C 32 0 6 0 0 8 C4 2 C7 C CF A0 0 A AC 0 0 A9 8 1 30 19 64 1 89 C 33 3 A7 0 2 1D 
Recieve:   FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A0 1 6C D 65 0 0 2 AF 0 0 C 52 4 4E 0 0 3 AF A AB 3 A7 4 29 3 20 E8 60 0 0 0 0 C 30 1 97 1 99 8 AA 1 C7 C CF A0 0 B C2 0 0 AD 8 1 30 19 64 1 7C C 32 3 A7 0 2 C0 FF FF 
Recieve:   81 F1 11 7E 1 FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A0 1 8B D 66 0 0 2 AD 0 0 B 22 4 44 0 0 3 20 B 8 3 A7 4 2B 3 20 EC B9 0 0 0 0 C 32 2 71 2 74 8 D0 1 8D C CF A0 0 B CD 2 73 A9 8 1 30 19 64 1 8D C 32 3 A7 0 2 3 
Recieve:   FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A0 1 97 D 67 0 0 2 AF 0 0 A C1 4 3E 0 0 3 22 B 1C 3 A7 4 2C 3 20 ED 62 0 0 0 0 C 32 2 92 2 98 8 CB 1 90 C CC A0 0 B AB 1 EC A9 8 1 30 19 64 1 8C C 33 3 A7 0 2 1 
Recieve:   FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A1 1 8A D 67 0 0 2 AC 0 0 A F8 4 3E 0 0 3 20 B 1C 3 A7 4 2C 3 20 ED 7C 0 0 0 0 C 33 2 EF 2 AB 8 CE 1 8F C CC A0 0 B C 2 23 A9 8 1 30 18 1E 1 8D C 37 3 A7 0 2 B 
Recieve:   FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A0 1 91 D 69 0 0 2 AD 0 0 A E7 4 3E 0 0 3 20 B 22 3 A7 4 2C 3 20 ED A7 0 0 0 0 C 2E 2 9F 2 A5 8 CD 1 90 C CC A0 0 A F8 2 13 A9 8 1 30 17 FC 1 8D C 37 3 A7 0 2 91 
Recieve:   FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A0 1 92 D 69 0 0 2 AD 0 0 B 45 4 3F 0 0 3 20 B 26 3 A7 4 2C 3 20 ED 7C 0 0 0 0 C 2E 2 92 2 9B 8 CB 1 90 C CA A0 0 A FC 1 FB AD 8 1 30 17 D5 1 8D C 38 3 A7 0 2 79 
Recieve:   FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A1 1 8F D 69 0 0 2 AD 0 0 B 45 4 39 0 0 3 20 B 25 3 A7 4 2C 3 20 ED BC 0 0 0 0 C 33 2 F0 2 A9 8 CC 1 90 C CA A0 0 B 4 2 25 A9 8 1 30 17 A2 1 8E C 39 3 A7 0 2 21 
Recieve:   FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A1 1 8C D 6B 0 0 2 AF 0 0 B 14 4 3E 0 0 3 21 B 16 3 A7 4 2C 3 20 ED B1 0 0 0 0 C 33 2 EE 2 A7 8 CD 1 90 C CA A0 0 B B 2 17 A9 8 1 30 17 79 1 8C C 39 3 A7 0 2 A8 
Recieve:   FF FF FF FF FF 
Recieve:   83 F1 11 7F 3E 12 54 
Recieve:   FF FF FF 
Recieve:   80 
Recieve:   F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A1 1 8F D 6B 0 0 2 AE 0 0 B 80 4 3C 0 0 3 1E B 29 3 A7 4 2C 3 20 ED DB 0 0 0 0 C 33 2 F8 2 AF 8 CD 1 8F C CA A0 0 B 35 2 2C A9 8 1 30 16 8B 1 8E C 39 3 A7 0 2 B1 
Recieve:   FF FF FF 
Recieve:   80 
Recieve:   F1 
Recieve:   11 
Recieve:   4C 
Recieve:   61 
Recieve:   1 
Recieve:   0 
Recieve:   0 0 0 0 0 0 0 D A1 1 89 D 6B 0 0 2 AD 0 0 B D 4 3E 0 0 3 21 B 1D 3 A7 4 2C 3 20 ED 5D 0 0 0 0 B F2 2 DE 2 97 8 CA 1 91 C CA A0 0 B 3C 1 E9 A9 8 1 30 16 69 1 8C C 38 3 A7 0 2 DB FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A1 1 88 D 6B 0 0 2 AD 0 0 B 5A 4 3A 0 0 3 20 B 1E 3 A7 4 2C 3 20 ED 87 0 0 0 0 C 30 2 92 2 9F 8 CD 1 90 C CA A0 0 B 47 2 B A9 8 1 30 16 51 1 8C C 39 3 A5 0 2 5F 
Recieve:   FF FF FF 
Recieve:   80 
Recieve:   F1 
Recieve:   11 
Recieve:   4C 
Recieve:   61 1 0 0 0 0 0 0 0 0 D A1 1 8B D 6C 0 0 2 AC 0 0 B 56 4 3E 0 0 3 20 B 1E 3 A7 4 2C 3 20 ED A7 0 0 0 0 C 32 2 ED 2 A5 8 CC 1 90 C CA A0 0 B 52 2 13 A9 8 1 30 16 41 1 8C C 39 3 A7 0 2 E9 
Recieve:   FF FF FF 
Recieve:   80 
Recieve:   F1 
Recieve:   11 
Recieve:   4C 
Recieve:   61 
Recieve:   1 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 0 D A1 1 8F D 6C 0 0 2 AE 0 0 B 29 4 3A 0 0 3 1F B 26 3 A7 4 2C 3 20 ED C6 0 0 0 0 C 30 2 86 2 97 8 CC 1 90 C CA A0 0 B 55 1 E9 A9 8 1 30 16 21 1 8C C 39 3 A7 0 2 25 FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A1 1 90 D 6B 0 0 2 AE 0 0 B 42 4 3A 0 0 3 1E B 28 3 A5 4 2C 3 20 ED D6 0 0 0 0 C 33 2 FA 2 A6 8 CC 1 8F C CA A0 0 B 60 2 16 A9 8 1 30 16 9 1 8D C 39 3 A7 0 2 F4 
Recieve:   FF FF FF 
Recieve:   80 
Recieve:   F1 
Recieve:   11 
Recieve:   4C 
Recieve:   61 
Recieve:   1 0 0 0 0 0 0 0 0 D A1 1 8A D 6C 2 BF 2 AD 0 0 B 14 4 3E 0 0 3 24 F A 3 A7 4 43 3 20 F3 B1 0 0 0 0 C 32 3 37 6 5B 9 E3 1 95 C CA A0 0 8 FF 12 2B AC 8 1 30 16 46 2 6 C 38 3 A7 0 2 F9 
Recieve:   FF FF FF 
Recieve:   80 
Recieve:   F1 
Recieve:   11 
Recieve:   4C 
Recieve:   61 
Recieve:   1 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 0 D A1 1 E8 D 6B 6 B5 2 AF 0 0 F 90 4 30 0 0 4 14 11 29 3 A7 4 50 3 20 FD C0 0 0 0 0 C 32 4 51 5 F0 9 E5 2 22 C C7 A0 0 8 33 D 46 AC 8 1 30 16 BA 2 3 C 38 3 A7 0 2 F3 FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A1 2 10 D 6C 7 E0 2 AE 0 0 F AC 4 2A 0 0 5 4 10 A4 3 A5 4 79 3 20 FF B9 0 0 0 0 C 30 4 B5 6 17 A 1C 2 77 C C7 A0 0 7 FC C F3 A8 8 1 30 19 64 2 27 C 37 3 A7 0 2 42 
Recieve:   FF FF FF 
Recieve:   80 
Recieve:   F1 
Recieve:   11 
Recieve:   4C 
Recieve:   61 1 0 0 0 0 0 0 0 0 D A1 2 3B D 6C 7 F8 2 AF 0 0 F C4 4 27 0 0 6 B3 E A5 3 A7 4 CB 3 20 FE 16 0 0 0 0 C 32 5 11 5 2C A A7 3 4C C C7 A0 0 9 56 3 27 A9 8 1 30 19 64 2 57 C 34 3 A5 0 2 81 
Recieve:   FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A1 1 8C D 6C 0 0 2 AE 0 0 B 37 4 48 0 0 3 1C B 1F 3 A7 4 2C 3 20 ED 67 0 0 0 0 C 30 2 98 2 A8 8 CB 1 90 C C7 A0 0 C 9 2 99 A9 8 1 30 19 64 1 8D C 32 3 A7 0 2 9A 
Recieve:   FF FF FF 
Recieve:   80 
Recieve:   F1 
Recieve:   11 
Recieve:   4C 
Recieve:   61 
Recieve:   1 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 D A1 1 99 D 6C 0 0 2 AF 0 0 A C1 4 41 0 0 3 23 B 3B 3 A7 4 2D 3 20 EE 2B 0 0 0 0 C 33 2 E7 2 BE 8 CE 1 90 C C7 A0 0 B D6 2 5E AD 8 1 30 19 64 1 8D C 33 3 A7 0 2 14 FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A1 1 8E D 6E 0 0 2 AF 0 0 A 9B 4 3E 0 0 3 24 B 19 3 A7 4 2C 3 20 ED 58 0 0 0 0 C 32 2 C2 2 96 8 C9 1 93 C C7 A0 0 B C4 1 E6 A9 8 1 30 19 64 1 8B C 33 3 A5 0 2 9 
Recieve:   FF FF FF 
Recieve:   80 
Recieve:   F1 
Recieve:   11 
Recieve:   4C 
Recieve:   61 
Recieve:   1 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 0 0 0 D A3 1 8C D 6E 0 0 2 AD 0 0 A C1 4 40 0 0 3 24 B 1B 3 A7 4 2C 3 20 ED 62 0 0 0 0 C 32 2 C9 2 98 8 C9 1 92 C C7 A0 0 B A8 1 EC A9 8 1 30 19 64 1 8C C 34 3 A7 0 2 31 FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A1 1 8F D 6C 0 0 2 AE 0 0 A CF 4 3E 0 0 3 1E B 25 3 A7 4 2C 3 20 ED C6 0 0 0 0 C 32 2 E7 2 AB 8 CD 1 90 C C7 A0 0 B 8D 2 21 A9 8 1 30 19 33 1 8C C 34 3 A7 0 2 C2 
Recieve:   FF FF FF 
Recieve:   80 
Recieve:   F1 
Recieve:   11 
Recieve:   4C 
Recieve:   61 
Recieve:   1 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 0 0 D A1 1 94 D 6E 0 0 2 AF 0 0 A 89 4 3A 0 0 3 20 B 21 3 A7 4 2C 3 20 ED 97 0 0 0 0 C 32 2 7D 2 9C 8 CB 1 8F C C7 A0 0 B 5E 1 F8 A9 8 1 30 19 11 1 8D C 35 3 A7 0 2 5A FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A3 1 8F D 6E 0 0 2 AE 0 0 A 60 4 3E 0 0 3 20 B 23 3 A7 4 2C 3 20 ED A7 0 0 0 0 C 32 2 E9 2 A5 9 C5 1 8F C C7 A0 0 A F4 A 56 AD 8 1 30 19 17 1 8F C 35 3 A7 0 2 BB 
Recieve:   FF FF FF 
Recieve:   80 
Recieve:   F1 
Recieve:   11 
Recieve:   4C 
Recieve:   61 
Recieve:   1 
Recieve:   0 
Recieve:   0 0 0 0 0 0 0 D A3 1 CC D 6E 6 1B 2 AC 0 0 F FF 4 30 0 0 3 B1 10 AF 3 A7 4 49 3 20 F7 76 0 0 0 0 C 33 3 71 6 F 9 C3 1 E9 C C5 A0 0 9 1D E 4C A8 8 1 30 19 64 1 FA C 35 3 A7 0 2 E8 FF FF FF 
Recieve:   80 F1 11 4C 61 1 0 0 0 0 0 0 0 0 D A3 1 F2 D 6E 6 54 2 B0 0 0 F 93 4 2A 0 0 4 7F F EB 3 A7 4 5C 3 20 FD 9F 0 0 0 0 C 32 4 1D 5 9A 9 E8 2 2F C C5 A0 0 9 14 B 1F A8 8 1 30 19 64 2 A C 34 3 A7 0 2 9E 
Recieve:   FF FF FF 
Recieve:   80 
Recieve:   F1 
Recieve:   11 
Recieve:   4C 
Recieve:   61 
Recieve:   1 
Recieve:   0 
Recieve:   0 
Recieve:   0 0 0 0 0 0 D A3 2 18 D 6E 6 54 2 B1 0 0 F 98 4 2C 0 0 5 BF D A5 3 A7 4 82 3 20 FB B0 0 0 0 0 C 33 4 5D 4 C3 A 3B 2 D6 C C5 A0 0 9 EE 7 F8 A8 8 1 30 19 64 2 31 C 33 3 A7 0 2 34 FF FF FF 
Recieve:   FF FF FF 
Recieve:   80 
Recieve:   F1 
Recieve:   11 
Recieve:   4C 
Recieve:   61 
Recieve:   1 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 0 0 0 D A3 2 44 D 6E 6 4C 2 B0 0 0 D BD 4 3E 0 0 6 E3 C C9 3 A7 4 AD 3 20 F6 82 0 0 0 0 C 33 3 B2 3 F5 A B5 3 94 C C5 A0 0 A 20 6 3 A8 8 1 30 19 64 2 5B C 32 3 A7 0 2 F0 
Recieve:   FF FF FF 
Recieve:   80 
Recieve:   F1 
Recieve:   11 
Recieve:   4C 
Recieve:   61 
Recieve:   1 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 
Recieve:   0 0 D A3 2 5C D 6E 6 44 2 B0 0 0 C B8 4 46 0 0 7 F5 C 7 3 A7 4 D6 3 20 F3 4A 0 0 0 0 C 30 3 63 3 85 A EE 3 FD C C5 A0 0 A 41 3 E A8 8 1 30 19 64 2 75 C 2F 3 A7 0 2 61 FF FF FF FF FF 
Recieve:   83 F1 11 7F 3E 12 54 
Recieve:   FF FF FF 
Recieve:   80 
Recieve:   F1 
Recieve:   11 
Recieve:   4C 
Recieve:   61 

если да то, поставлю завтра минимальную. или подберу оптимальную. формулы завтра проверю.

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

надо чтоб без этих столбиков байт было

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

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

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

нашел из за чего идет подвис на секунду каждые 9 секунд. из за этого

if (curWatch - prevWatch > 10000)  { Watch_Temperature (); prevWatch = curWatch;}

ставлю на 1000 то идет каждую секунду подтормаживание всего на экране

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

Это скорее всего изза корявой библиотеки даллас

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

MaksVV результат уже приятныей, выставил

1. задержка между посвлками как в опкоме 120м/с      int PIDTime = 120;

2.  в void receive поставил задержку 60 м/с             delay(60);

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

4. прорисовку экрана сделал с 200м/с на 60м/с       (curData - prevData > 60)

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

В сериале отевты целые и не разбивает на байты. на экране все уже более мение приемелемо. данные обновляются достаточно быстро. что не так........  

1. Можно ли сделать обновление цифр на экране более сглажено, не скачками?

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

3. проставил во всех формулах 10.0   100.0  а на экране все равно отображается только целое число, 

Но скажу тебе что результат уже крутяк. вот скетч

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


  // массив байтов принимаемого сообщения
  byte MessageRx[110] = {0};  // массив байтов принимаемого сообщения
  //массивы сообщений (пидов)
  byte messageInit[5] = {0x81, 0x11, 0xF1, 0x81, 0x04};    // запрос инициализации
  byte messagePresent[5] = {0x81,0x11,0xF1,0x3E,0xC1};      // запрос присутствия 
  byte messagePids[6] = {0x82,0x11,0xF1,0x21,0x01,0xA6};    // запрос температуры 1
  
  unsigned long prevPID = 0;
  unsigned long prevpres = 0;


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

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

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

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

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

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

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

      
      if (PumpRPM>10) {myGLCD.print(" ", 212, 180); }; //затираем четвертую цифру
      myGLCD.printNumI(PumpRPM, 165, 180);
        
      if (RPM>100) {myGLCD.print(" ", 212, 215);};   //затираем четвертую цифру
      myGLCD.printNumI(RPM, 165, 215);
      
      //-------------------------------------------
      if (Temp<10) {myGLCD.print("  ", 426, 40); }; //затираем вторую цифру и третью
      if (Temp>10) {myGLCD.print(" ", 442, 40); }; //затирает третюю цифру
      myGLCD.printNumI(Temp, 410, 40);
      
      if (TempOil<10) {myGLCD.print("  ", 426, 75); }; //затираем вторую цифру и третью
      if (TempOil>10) {myGLCD.print(" ", 442, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(TempOil, 410, 75);
      
      if (TempFuel<10) {myGLCD.print("  ", 426, 110); }; //затираем вторую цифру и третью
      if (TempFuel>10) {myGLCD.print(" ", 442, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(TempFuel, 410, 110);
  
      myGLCD.printNumI(sensors.getTempCByIndex(0), 410, 145);
      
      myGLCD.printNumI(t, 410, 180);
      
      if (TempAir<10) {myGLCD.print("  ", 426, 215); }; //затираем вторую цифру и третью
      if (TempAir>10) {myGLCD.print(" ", 442, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(TempAir, 410, 215);
     
     prevData = curData;   
    }
   }
   //----------------------------------------------------------
      if (currentPage == '1') {if (curData - prevData > 60){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
      if (StaDaliv<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      if (StaDaliv>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumI(StaDaliv, 395, 40);
      
      if (DesInj<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (DesInj>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(DesInj, 395, 75);
      
      if (ActInj<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      if (ActInj>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(ActInj, 395, 110);
      
      if (DesaInjQua<10) {myGLCD.print("  ", 411, 145); }; //затираем вторую цифру и третью
      if (DesaInjQua>10) {myGLCD.print(" ", 427, 145); }; //затирает третюю цифру  
      myGLCD.printNumI(DesaInjQua, 395, 145);
      
      if (InjQua<10) {myGLCD.print("  ", 411, 180); }; //затираем вторую цифру и третью
      if (InjQua>10) {myGLCD.print(" ", 427, 180); }; //затирает третюю цифру  
      myGLCD.printNumI(InjQua, 395, 180);
      
      if (TempAir<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (TempAir>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(TempAir, 395, 215);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      if (currentPage == '2') {
        if (curData - prevData > 60){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
      if (BoostPres<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      if (BoostPres>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumI(BoostPres, 395, 40);
      
      if (BoostPresCom<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (BoostPresCom>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(BoostPresCom, 395, 75);
      
      //if (EGRmg<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      //if (EGRmg>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру 
      if (EGRmg>100) {myGLCD.print(" ", 443, 110); }; //затирает четвертую цифру 
      myGLCD.printNumI(EGRmg, 395, 110);
      
      if (EGRPul<10) {myGLCD.print("  ", 411, 145); }; //затираем вторую цифру и третью
      if (EGRPul>10) {myGLCD.print(" ", 427, 145); }; //затирает третюю цифру  
      myGLCD.printNumI(DesaInjQua, 395, 145);
      
      if (SolenPul<10) {myGLCD.print("  ", 411, 180); }; //затираем вторую цифру и третью
      if (SolenPul>10) {myGLCD.print(" ", 427, 180); }; //затирает третюю цифру  
      myGLCD.printNumI(SolenPul, 395, 180);
      
      if (SolenPre<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (SolenPre>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(SolenPre, 395, 215);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      if (currentPage == '3') {if (curData - prevData > 60){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
       myGLCD.setColor(255, 255, 255);
        
        prevData = curData;
      }
    }
  }
  ///////////////////////////////////////////////////////////////////////////
  
  //отправка запросов пидов
  void PIDs() {
    Serial.println ("Otpravil zapros 21 01");
    if (pid==1){
    for (int i = 0; i < length6; i++) {
    mySerial.write(messagePids[i]);
    delay (waitbyte); } 
   }
}
  void present() {
    for (int i = 0; i < length5; i++) {
    mySerial.write(messagePresent[i]);
    delay (waitbyte); }
   }


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

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

   if (MessageRx[3]==0x80 && MessageRx[4]==0xF1 && MessageRx[5]==0x11 && MessageRx[6]==0x4C && MessageRx[7]==0x61 && MessageRx[8]==0x01)    {
    
   MAF =  ((MessageRx[29]*256)+MessageRx[30])/10.0;
    BoostPres =  ((MessageRx[21]*256)+MessageRx[22])/1000.0;
    RPM =  (MessageRx[35]*256)+MessageRx[36];
    EGRmg =  ((MessageRx[37]*256)+MessageRx[38])/10.0;
    BoostPresCom =  ((MessageRx[41]*256)+MessageRx[42])/1000.0;
    Speed =  (MessageRx[47]*256)+MessageRx[48];
    DesaInjQua =  ((MessageRx[53]*256)+MessageRx[54])/100.00;
    InjQua =  ((MessageRx[55]*256)+MessageRx[56])/100.00;
    StaDaliv =  ((MessageRx[57]*256)+MessageRx[58])/100.0;
    PumpRPM =  (MessageRx[59]*256)+MessageRx[60];
    EGRPul =  ((MessageRx[65]*256)+MessageRx[66])/100.0;
    SolenPul =  ((MessageRx[67]*256)+MessageRx[68])/100.0;
    SolenPre =  ((MessageRx[73]*256)+MessageRx[74])/100.0;
    DesInj =  ((MessageRx[75]*3)+(MessageRx[76])/100.00)+0.3;
    ActInj =  ((MessageRx[19]*3)+(MessageRx[20])/100.00)+0.3;
    //TempAir =  ((MessageRx[77]*26)-278)+MessageRx[78]/10.0;
    //Temp =  ((MessageRx[17]*26)-278)+MessageRx[18]/10.0;
    //TempOil =  ((MessageRx[21]*26)-278)+MessageRx[22]/10.0;
    //TempFuel =  ((MessageRx[61]*26)-278)+MessageRx[62]/10.0;
    
    int A = 0;
    if  (MessageRx[77]<=0x0A) A = 277;
    if  (MessageRx[77]==0x0B || MessageRx[77]==0x0C) A = 278;
    if  (MessageRx[77]>=0x0D) A = 279;
    double B = MessageRx[78]/10.0;
    double cel , drob ;
    drob = modf(B, &cel);
    if (drob>0.6) cel++;
      TempAir =  ((MessageRx[77]*26)-A)+cel;
    
    if  (MessageRx[17]<=0x0A) A = 277;
    if  (MessageRx[17]==0x0B || MessageRx[77]==0x0C) A = 278;
    if  (MessageRx[17]>=0x0D) A = 279;
    B = MessageRx[18]/10.0;
    drob = modf(B, &cel);
    if (drob>0.6) cel++;
      Temp =  ((MessageRx[17]*26)-A)+cel;

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


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



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

  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //отправка запроса на диагностическое соединение
  void initialization() {
    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>=255) && (y<=310)) {
        drawFrame(10, 255, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();       
        Watch_Temperature ();
      } 
      
     // Button INF2
     if ((x>=180) && (x<=300) && (y>=255) && (y<=310)) {
        drawFrame(180, 255, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=255) && (y<=310)) {
        drawFrame(350, 255, 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>=255) && (y<=310)) {
        drawFrame(180, 255, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=255) && (y<=310)) {
        drawFrame(350, 255, 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>=255) && (y<=310)) {
        drawFrame(10, 255, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=255) && (y<=310)) {
        drawFrame(350, 255, 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 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 READ
    if ((x>=350) && (x<=470) && (y>=255) && (y<=310)) {
        drawFrame(350, 255, 470, 310); 
        currentPage = '3';        //потом заменить на дейсвие   
        myGLCD.clrScr();             
        drawscreen_three();       //потом заменить на дейсвие
        Watch_Temperature ();                                                                    
      }
	  
	  // Button ERASE
    if ((x>=10) && (x<=120) && (y>=255) && (y<=310)) {
        drawFrame(10, 255, 120, 310); 
        currentPage = '1';           //потом заменить на дейсвие
        myGLCD.clrScr();             
        drawscreen_one();         //потом заменить на дейсвие
        Watch_Temperature ();                                                                   
      }
     */
        
     }
    }
  }
  
  //--------------------------------------------------------
  //прописывает заголовки на всех страницах
   void drawHomeScreen() {
     line() ;
     vista();
     myGLCD.drawLine(239,35,239,248); // линия вертикальная
     myGLCD.print("Ltr/Hor :", 10, 40);
     myGLCD.print("Ltr/100 :", 10, 75);
     myGLCD.print("Fuel  L :", 10, 110);
     myGLCD.print("Humed  %:", 10, 145);
     myGLCD.print("PUMP RPM:", 10, 180);
     myGLCD.print("Engi RPM:", 10, 215);
     myGLCD.print("Motor *C:", 255, 40);
     myGLCD.print("Oil   *C:", 255, 75);
     myGLCD.print("Fuel  *C:", 255, 110);
     myGLCD.print("Inter *C:", 255, 145);
     myGLCD.print("Exter *C:", 255, 180);
     myGLCD.print("IntAir*C:", 255, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonINF2() ;
     buttonCHECK() ;
   }
  //-------------------------------------------------
    void drawscreen_one() {
     line() ;
     vista();
     myGLCD.print("Start of Delivery  *CA:", 10, 40);
     myGLCD.print("Desir inject Start *CA:", 10, 75);
     myGLCD.print("Actua Inject Start *CA:", 10, 110);
     myGLCD.print("Desir Inject Quan mg/s:", 10, 145);
     myGLCD.print("Actu Inject Quant mg/s:", 10, 180);
     myGLCD.print("Mass Air Flow     mg/s:", 10, 215);
 
  
     buttonHome() ;
     buttonINF2() ;
     buttonCHECK() ;
     }
  //-------------------------------------------------
   void drawscreen_two() {
     line() ;
     vista();
     myGLCD.print("Boost Press       Bar:", 10, 40);
     myGLCD.print("Boost Press Com   Bar:", 10, 75);
     myGLCD.print("EGR command      mg/s:", 10, 110);
     myGLCD.print("EGR Pulse Ratio     %:", 10, 145);
     myGLCD.print("Solenoide Pulse     %:", 10, 180);
     myGLCD.print("Solenoide Boost     %:", 10, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonCHECK() ;
   }
  //----------------------------------------------------------------------------
   void drawscreen_three() {
     vista();
     myGLCD.setColor(255, 0, 0); // цвет линии красный
     myGLCD.drawLine(1,35,479,35); // линия горизонтальная
     myGLCD.drawLine(1,248,479,248); // линия горизонтальная
     
     buttonHome();
     buttonERASE();
     buttonREAD();
   }

  ////////////////////////////////////////////////////////////////////////////////////////////////////////
  //координаты тача
  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, 80, 33);      // расположение кнопки прямоугольника
     myGLCD.setColor(0, 255, 0); // цвет текста зеленый
     myGLCD.drawRoundRect (1, 1, 65, 33);      // кнопка будет рамкой
     myGLCD.setFont(GroteskBold16x32);                      // размер шрифта
     myGLCD.setBackColor(0,0,0);            // цвет фона области где будет надпись и кнопки
     myGLCD.print("HOME", 1, 0); // центровка строки
    }
  void buttonINF1() {
    myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (10, 255, 120, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (10, 255, 120, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 1", 25, 265);
    }
  void buttonINF2() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (180, 255, 300, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (180, 255, 300, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 2", 200, 265);
    }
  void buttonCHECK() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (350, 255, 470, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (350, 255, 470, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("CHECK", 375, 265);
    }
    void buttonERASE() {
    myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (10, 255, 120, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (10, 255, 120, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("ERASE", 25, 265);
    }
    void buttonREAD() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (350, 255, 470, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (350, 255, 470, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("READ", 375, 265);
    }

  ////////////////////////////////////////////////////////////////////////////////////////
  //прорисовка линий
  void line() {
     myGLCD.setColor(255, 0, 0); // цвет линии красный
     myGLCD.drawLine(1,35,479,35); // линия горизонтальная
     myGLCD.drawLine(1,73,479,73); // линия горизонтальная
     myGLCD.drawLine(1,108,479,108); // линия горизонтальная
     myGLCD.drawLine(1,143,479,143); // линия горизонтальная
     myGLCD.drawLine(1,178,479,178); // линия горизонтальная
     myGLCD.drawLine(1,212,479,212); // линия горизонтальная
     myGLCD.drawLine(1,248,479,248); // линия горизонтальная
   }

  ////////////////////////////////////////////////////////////////////////////////////////////
  //отображение щрифта
  void vista(){
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setColor(0, 255, 0);
     myGLCD.setBackColor(0,0,0); 
  }

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

MaksVV специально для тебя видос выкинул. полюбуйся на наши труды :)

https://www.youtube.com/watch?v=GjffV8L0QKU

MaksVV
Offline
Зарегистрирован: 06.08.2015
Эта PIDtime задержка работает только в случае, если блок не отвечат на запрос 2101, если ответил - таймер сбрасываетсяна 0. Т.е. после того как блок ответил, сразу опять шлётся запрос 2101. Т.е. реально данные гораздо чаще посылаются. Надеюсь так и работает. А вот если блок не отвечает, чтоб не серить запросами 2101 я сделал эту задержку. Она не тормозит программу.  Тут все ништяк.
 
Чтоб данные обновлялись не скачками помоему тут только один выход - быстрее их обновлять. Причём как появления на экране так и сами данные. Появление на экране раз в 60мс помоему норм. А вот сами данные да и вообще вся программа немного тормозятся на реальной задержке delay ну раз ты её 60 сделал то это гуд.
 
На данный момент  думаю надо нафиг убрать запрос присутствия - он нужен вроде как  только  если другие запросы не посылаются (например выбираешь параметры в опкоме или пока не открыл страницу потока данных).   
 
И еще предлагаю откзаться от датчика DHT он глючный, температуру бывает криво показывает. Предлагаю пользовать датчики dallas DS18B20 без библиотек всяких на прерывании, так не будет задержек раз в 10 сек в цикле Watch_Temperature. Кстати попробуй закоментировть строки где d=...      h=...   и requestTemperatures и посмотри будут ли подтормаживания раз в 10 сек.  
 
с дробными числами может так проканает ?  myGLCD.printNumI((float)InjQua, 395, 180);
 
по мерцанию тему создай в разделе программитрование или аппартные вопросы -  как данные правильно на твоем экране отображать, может ответит кто по существу, хотя как показывает практика это врядли что будет по существу. 
 
Труды да, реально серьезные. Такая творческая исследовательская деятельность плюс прокачка опыта. 
viki13viki
Offline
Зарегистрирован: 14.11.2016

PIDtime c этим понял. на счет данных. задержку с 60 попробую уменьшить до предела чтобы не гнала косяки в сереале. обновление экрана тоже попробую с 60 уменьшить, я вроде пробовал 10 и было норм. запрос присутсвия согласен , нужно убрать.  с этим щас попробую d=...      h=...   и requestTemperatures. тоже щас попробую. а вото почему при скетче без затираний при переходе на другую страницу рвет соединение? и я щас начну рыть расходы топлива и DTC ошибки. уже прослушал опком на оошибки, спецом сделал ошибку Р0115, имею запрос, ответ ошибок нет, ответ ошибка есть, стирание. щас проверю все что ты сказал, потом потытаюсь прописать DTC.

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

обновление страниц сделал 0м/с, тормоз из за температуры сделал с 10 секунд до 1 минуты(не кретично, не бросается в глаза, так как реже происходит. убрал присутсвие. отсальное оставил так как есть. это не помогает myGLCD.printNumI((float)InjQua, 395, 180);

да и у нас они уже заявлены float DesInj = 0.00;    //72,73 байты     float ActInj = 0.00;    //16,17 байты. буду думать....

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

в скетче где опросы нажатия на кнопки убери везде Watch_Temperature (). при перелистывании скорее всего перестанет связь теряться. И че в итоге быстрее данные обновляются?

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

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

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

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

запрос ошибок 84 11 F1 18 00 FF 00 9D . добавил   

byte messageREAD[8] = {0x84,0x11,0xF1,0x18,0x00,0xFF,0x00,0x9D};   

добавил проверку ответ если нет ошибок, ответ 84 11 F1 58  00 DС (58 положительный ответ)  добавил

 if (MessageRx[0]==0x82 && MessageRx[1]==0xF1 && MessageRx[2]==0x11 && MessageRx[3]==0x58 && MessageRx[4]==0x00 && MessageRx[5]==0xDC){
     currentPage = '3';
     myGLCD.print("NO ERROR", 165, 145);
     Serial.println ("     NO ERROR  ");
     }

добавил проверку если есть ошибка, //ответ 85 F1 11 58 01 01 15 E1 D7 (58 положительный ответ), это ошибка Р0115.// как расшифровывать буду искать. добавил

if (MessageRx[0]==0x82 && MessageRx[1]==0xF1 && MessageRx[2]==0x11 && MessageRx[3]==0x58){
     // здесь пишем номер байта и формулу
     Serial.println ("     OSHIBKA ESTY ");
   }

запрос стирание ошибок 83 11 F1 14  FF 00 98 , добавил

byte messageERASE[7] = {0x83,0x11,0xF1,0x14,0xFF,0x00,0x98};

проверку ответа стерто 83 F1 11 54  FF 00 D8 (54 положительный ответ)

if (MessageRx[0]==0x83 && MessageRx[1]==0xF1 && MessageRx[2]==0x11 && MessageRx[3]==0x54 && MessageRx[4]==0xFF && MessageRx[5]==0x00 && MessageRx[6]==0xD8){
     currentPage = '3';
     myGLCD.print("BORRADO", 165, 145);
     Serial.println ("     BORRADOR  ");
    }

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

 void Read() {
    Serial.println ("Zapros error;  ");
    for (int i = 0; i < length8; i++) {
    mySerial.write(messageREAD[i]);
    delay (waitbyte); }
    }
    
    void Erase() {
    Serial.println ("Zapros borrar;  ");
    for (int i = 0; i < length7; i++) {
    mySerial.write(messageERASE[i]);
    delay (waitbyte); }
    }

добавил в тач координаты Erase(); и Read();

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

вот скетч

  #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 length8 = 8;
  int length7 = 7;

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

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


  // массив байтов принимаемого сообщения
  byte MessageRx[110] = {0};  // массив байтов принимаемого сообщения
  //массивы сообщений (пидов)
  byte messageInit[5] = {0x81, 0x11, 0xF1, 0x81, 0x04};    // запрос инициализации
  ///////////////byte messagePresent[5] = {0x81,0x11,0xF1,0x3E,0xC1};      // запрос присутствия 
  byte messagePids[6] = {0x82,0x11,0xF1,0x21,0x01,0xA6};    // запрос данных1
  byte messageREAD[8] = {0x84,0x11,0xF1,0x18,0x00,0xFF,0x00,0x9D};    // запрос ошибок
  byte messageERASE[7] = {0x83,0x11,0xF1,0x14,0xFF,0x00,0x98};    // стирание ошибок
  
  unsigned long prevPID = 0;
  ////////////unsigned long prevpres = 0;


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

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

  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  void setup() {
    Serial.begin(115200);
    mySerial.begin(10400);
    myGLCD.InitLCD();
    myGLCD.clrScr();
    myTouch.InitTouch();
    myTouch.setPrecision(PREC_MEDIUM);
 
    drawHomeScreen();  
    currentPage = '0'; 
    selectedUnit = '0'; 
  
    Wire.begin();
    rtc.begin();
    dht.begin();
    sensors.begin();
    // строка ниже используется для настройки даты и времени часов (год, месяц, день, часы, минуты, секунды)
    rtc.adjust(DateTime(2017, 7, 8, 19, 00, 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 > 60000)  { Watch_Temperature (); prevWatch = curWatch;}
    if (curDvoet - prevDvoet > 500)  { if (!Dvoet) {myGLCD.print(":", 285, 0);} else {myGLCD.print(" ", 285, 0);} prevDvoet = curDvoet; Dvoet=!Dvoet;}
   Menu();
   //---------------------------------------------------------
   //прописываем где и что мы хотим видеть (пиды)
     if (currentPage == '0') {if (curData - prevData > 0){
       
       myGLCD.setColor(0, 255, 0);
       
       if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
       if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
       myGLCD.printNumI(Speed, 350, 0);
      
      myGLCD.setColor(255, 255, 255); 
      
      //if (--<10) {myGLCD.print("  ", 166, 40); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 40); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 40);
      
      //if (--<10) {myGLCD.print("  ", 166, 75); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 75); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 75);
      
      //if (--<10) {myGLCD.print("  ", 166, 110); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 110); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 110);

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

      
      if (PumpRPM>10) {myGLCD.print(" ", 212, 180); }; //затираем четвертую цифру
      myGLCD.printNumI(PumpRPM, 165, 180);
        
      if (RPM>100) {myGLCD.print(" ", 212, 215);};   //затираем четвертую цифру
      myGLCD.printNumI(RPM, 165, 215);
      
      //-------------------------------------------
      if (Temp<10) {myGLCD.print("  ", 426, 40); }; //затираем вторую цифру и третью
      if (Temp>10) {myGLCD.print(" ", 442, 40); }; //затирает третюю цифру
      myGLCD.printNumI(Temp, 410, 40);
      
      if (TempOil<10) {myGLCD.print("  ", 426, 75); }; //затираем вторую цифру и третью
      if (TempOil>10) {myGLCD.print(" ", 442, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(TempOil, 410, 75);
      
      if (TempFuel<10) {myGLCD.print("  ", 426, 110); }; //затираем вторую цифру и третью
      if (TempFuel>10) {myGLCD.print(" ", 442, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(TempFuel, 410, 110);
  
      myGLCD.printNumI(sensors.getTempCByIndex(0), 410, 145);
      
      myGLCD.printNumI(t, 410, 180);
      
      if (TempAir<10) {myGLCD.print("  ", 426, 215); }; //затираем вторую цифру и третью
      if (TempAir>10) {myGLCD.print(" ", 442, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(TempAir, 410, 215);
     
     prevData = curData;   
    }
   }
   //----------------------------------------------------------
      if (currentPage == '1') {if (curData - prevData > 0){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
      if (StaDaliv<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      if (StaDaliv>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumI(StaDaliv, 395, 40);
      
      if (DesInj<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (DesInj>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(DesInj, 395, 75);
      
      if (ActInj<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      if (ActInj>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(ActInj, 395, 110);
      
      if (DesaInjQua<10) {myGLCD.print("  ", 411, 145); }; //затираем вторую цифру и третью
      if (DesaInjQua>10) {myGLCD.print(" ", 427, 145); }; //затирает третюю цифру  
      myGLCD.printNumI(DesaInjQua, 395, 145);
      
      if (InjQua<10) {myGLCD.print("  ", 411, 180); }; //затираем вторую цифру и третью
      if (InjQua>10) {myGLCD.print(" ", 427, 180); }; //затирает третюю цифру  
      myGLCD.printNumI(InjQua, 395, 180);
      
      if (TempAir<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (TempAir>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(TempAir, 395, 215);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      if (currentPage == '2') {
        if (curData - prevData > 0){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
      if (BoostPres<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      if (BoostPres>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumI(BoostPres, 395, 40);
      
      if (BoostPresCom<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      if (BoostPresCom>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(BoostPresCom, 395, 75);
      
      //if (EGRmg<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      //if (EGRmg>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру 
      if (EGRmg>100) {myGLCD.print(" ", 443, 110); }; //затирает четвертую цифру 
      myGLCD.printNumI(EGRmg, 395, 110);
      
      if (EGRPul<10) {myGLCD.print("  ", 411, 145); }; //затираем вторую цифру и третью
      if (EGRPul>10) {myGLCD.print(" ", 427, 145); }; //затирает третюю цифру  
      myGLCD.printNumI(DesaInjQua, 395, 145);
      
      if (SolenPul<10) {myGLCD.print("  ", 411, 180); }; //затираем вторую цифру и третью
      if (SolenPul>10) {myGLCD.print(" ", 427, 180); }; //затирает третюю цифру  
      myGLCD.printNumI(SolenPul, 395, 180);
      
      if (SolenPre<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      if (SolenPre>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(SolenPre, 395, 215);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      if (currentPage == '3') {if (curData - prevData > 0){
        myGLCD.setColor(0, 255, 0);
        
        if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
       myGLCD.setColor(255, 255, 255);
        
        prevData = curData;
      }
    }
  }
  ///////////////////////////////////////////////////////////////////////////
  
  //отправка запросов пидов
  void PIDs() {
    Serial.println ("Otpravil zapros 21 01");
    if (pid==1){
    for (int i = 0; i < length6; i++) {
    mySerial.write(messagePids[i]);
    delay (waitbyte); } 
   }
}
  /*void present() {
    for (int i = 0; i < length5; i++) {
    mySerial.write(messagePresent[i]);
    delay (waitbyte); }
   }
*/

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

   if (MessageRx[0]==0x83 && MessageRx[1]==0xF1 && MessageRx[2]==0x11 && MessageRx[3]==0xC1 && MessageRx[4]==0x6B && MessageRx[5]==0x8F && MessageRx[6]==0x40) {Init=1;
   timerenabledInit=0;  Serial.println ("     Initialization OK!!!!:  ");
   }
   //при получении этого сообщения выдавать на третий экран "NO ERROR"
   if (MessageRx[0]==0x82 && MessageRx[1]==0xF1 && MessageRx[2]==0x11 && MessageRx[3]==0x58 && MessageRx[4]==0x00 && MessageRx[5]==0xDC){
     currentPage = '3';
     myGLCD.print("NO ERROR", 165, 145);
     Serial.println ("     NO ERROR  ");
     }
    
    // при получении отличающего сообщения конвертировать байты и выдать номер ошибки
   if (MessageRx[0]==0x82 && MessageRx[1]==0xF1 && MessageRx[2]==0x11 && MessageRx[3]==0x58){
     // здесь пишем номер байта и конвертируем в номеро ошибок, если одна и больше
     Serial.println ("     OSHIBKA ESTY ");
   }
   
   // при получении этого сообщения выдавать на третий экран "BORRADO" стерто
   if (MessageRx[0]==0x83 && MessageRx[1]==0xF1 && MessageRx[2]==0x11 && MessageRx[3]==0x54 && MessageRx[4]==0xFF && MessageRx[5]==0x00 && MessageRx[6]==0xD8){
     currentPage = '3';
     myGLCD.print("BORRADO", 165, 145);
     Serial.println ("     BORRADOR  ");
    }
    
    if (MessageRx[3]==0x80 && MessageRx[4]==0xF1 && MessageRx[5]==0x11 && MessageRx[6]==0x4C && MessageRx[7]==0x61 && MessageRx[8]==0x01)    {
    
   MAF =  ((MessageRx[29]*256)+MessageRx[30])/10.0;
    BoostPres =  ((MessageRx[21]*256)+MessageRx[22])/1000.0;
    RPM =  (MessageRx[35]*256)+MessageRx[36];
    EGRmg =  ((MessageRx[37]*256)+MessageRx[38])/10.0;
    BoostPresCom =  ((MessageRx[41]*256)+MessageRx[42])/1000.0;
    Speed =  (MessageRx[47]*256)+MessageRx[48];
    DesaInjQua =  ((MessageRx[53]*256)+MessageRx[54])/100.00;
    InjQua =  ((MessageRx[55]*256)+MessageRx[56])/100.00;
    StaDaliv =  ((MessageRx[57]*256)+MessageRx[58])/100.0;
    PumpRPM =  (MessageRx[59]*256)+MessageRx[60];
    EGRPul =  ((MessageRx[65]*256)+MessageRx[66])/100.0;
    SolenPul =  ((MessageRx[67]*256)+MessageRx[68])/100.0;
    SolenPre =  ((MessageRx[73]*256)+MessageRx[74])/100.0;
    DesInj =  ((MessageRx[75]*3)+(MessageRx[76])/100.00)+0.3;
    ActInj =  ((MessageRx[19]*3)+(MessageRx[20])/100.00)+0.3;
    //TempAir =  ((MessageRx[77]*26)-278)+MessageRx[78]/10.0;
    //Temp =  ((MessageRx[17]*26)-278)+MessageRx[18]/10.0;
    //TempOil =  ((MessageRx[21]*26)-278)+MessageRx[22]/10.0;
    //TempFuel =  ((MessageRx[61]*26)-278)+MessageRx[62]/10.0;
    
    int A = 0;
    if  (MessageRx[77]<=0x0A) A = 277;
    if  (MessageRx[77]==0x0B || MessageRx[77]==0x0C) A = 278;
    if  (MessageRx[77]>=0x0D) A = 279;
    double B = MessageRx[78]/10.0;
    double cel , drob ;
    drob = modf(B, &cel);
    if (drob>0.6) cel++;
      TempAir =  ((MessageRx[77]*26)-A)+cel;
    
    if  (MessageRx[17]<=0x0A) A = 277;
    if  (MessageRx[17]==0x0B || MessageRx[77]==0x0C) A = 278;
    if  (MessageRx[17]>=0x0D) A = 279;
    B = MessageRx[18]/10.0;
    drob = modf(B, &cel);
    if (drob>0.6) cel++;
      Temp =  ((MessageRx[17]*26)-A)+cel;

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


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



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

  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //отправка запроса на диагностическое соединение
  void initialization() {
    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 Read() {
    Serial.println ("Zapros error;  ");
    for (int i = 0; i < length8; i++) {
    mySerial.write(messageREAD[i]);
    delay (waitbyte); } 
    }
    
  void Erase() {
    Serial.println ("Zapros erase;  ");
    for (int i = 0; i < length7; i++) {
    mySerial.write(messageERASE[i]);
    delay (waitbyte); } 
    }
  
  //прорисовка координат тач кнопок
  void Menu () {
      //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>=255) && (y<=310)) {
        drawFrame(10, 255, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();       
        Watch_Temperature ();
      } 
      
     // Button INF2
     if ((x>=180) && (x<=300) && (y>=255) && (y<=310)) {
        drawFrame(180, 255, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=255) && (y<=310)) {
        drawFrame(350, 255, 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>=255) && (y<=310)) {
        drawFrame(180, 255, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=255) && (y<=310)) {
        drawFrame(350, 255, 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>=255) && (y<=310)) {
        drawFrame(10, 255, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=255) && (y<=310)) {
        drawFrame(350, 255, 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 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 READ
    if ((x>=350) && (x<=470) && (y>=255) && (y<=310)) {
        drawFrame(350, 255, 470, 310); 
        Read();        //потом заменить на дейсвие   
        myGLCD.clrScr();             
        drawscreen_three();       //потом заменить на дейсвие
        Watch_Temperature ();                                                                    
      }
	  
	  // Button ERASE
    if ((x>=10) && (x<=120) && (y>=255) && (y<=310)) {
        drawFrame(10, 255, 120, 310); 
        Erase();           //потом заменить на дейсвие
        myGLCD.clrScr();             
        drawscreen_three();         //потом заменить на дейсвие
        Watch_Temperature ();                                                                   
      }
     
        
     }
    }
  }
  
  //--------------------------------------------------------
  //прописывает заголовки на всех страницах
   void drawHomeScreen() {
     line() ;
     vista();
     myGLCD.drawLine(239,35,239,248); // линия вертикальная
     myGLCD.print("Ltr/Hor :", 10, 40);
     myGLCD.print("Ltr/100 :", 10, 75);
     myGLCD.print("Fuel  L :", 10, 110);
     myGLCD.print("Humed  %:", 10, 145);
     myGLCD.print("PUMP RPM:", 10, 180);
     myGLCD.print("Engi RPM:", 10, 215);
     myGLCD.print("Motor *C:", 255, 40);
     myGLCD.print("Oil   *C:", 255, 75);
     myGLCD.print("Fuel  *C:", 255, 110);
     myGLCD.print("Inter *C:", 255, 145);
     myGLCD.print("Exter *C:", 255, 180);
     myGLCD.print("IntAir*C:", 255, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonINF2() ;
     buttonCHECK() ;
   }
  //-------------------------------------------------
    void drawscreen_one() {
     line() ;
     vista();
     myGLCD.print("Start of Delivery  *CA:", 10, 40);
     myGLCD.print("Desir inject Start *CA:", 10, 75);
     myGLCD.print("Actua Inject Start *CA:", 10, 110);
     myGLCD.print("Desir Inject Quan mg/s:", 10, 145);
     myGLCD.print("Actu Inject Quant mg/s:", 10, 180);
     myGLCD.print("Mass Air Flow     mg/s:", 10, 215);
 
  
     buttonHome() ;
     buttonINF2() ;
     buttonCHECK() ;
     }
  //-------------------------------------------------
   void drawscreen_two() {
     line() ;
     vista();
     myGLCD.print("Boost Press       Bar:", 10, 40);
     myGLCD.print("Boost Press Com   Bar:", 10, 75);
     myGLCD.print("EGR command      mg/s:", 10, 110);
     myGLCD.print("EGR Pulse Ratio     %:", 10, 145);
     myGLCD.print("Solenoide Pulse     %:", 10, 180);
     myGLCD.print("Solenoide Boost     %:", 10, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonCHECK() ;
   }
  //----------------------------------------------------------------------------
   void drawscreen_three() {
     vista();
     myGLCD.setColor(255, 0, 0); // цвет линии красный
     myGLCD.drawLine(1,35,479,35); // линия горизонтальная
     myGLCD.drawLine(1,248,479,248); // линия горизонтальная
     
     buttonHome();
     buttonERASE();
     buttonREAD();
   }

  ////////////////////////////////////////////////////////////////////////////////////////////////////////
  //координаты тача
  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, 80, 33);      // расположение кнопки прямоугольника
     myGLCD.setColor(0, 255, 0); // цвет текста зеленый
     myGLCD.drawRoundRect (1, 1, 65, 33);      // кнопка будет рамкой
     myGLCD.setFont(GroteskBold16x32);                      // размер шрифта
     myGLCD.setBackColor(0,0,0);            // цвет фона области где будет надпись и кнопки
     myGLCD.print("HOME", 1, 0); // центровка строки
    }
  void buttonINF1() {
    myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (10, 255, 120, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (10, 255, 120, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 1", 25, 265);
    }
  void buttonINF2() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (180, 255, 300, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (180, 255, 300, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 2", 200, 265);
    }
  void buttonCHECK() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (350, 255, 470, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (350, 255, 470, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("CHECK", 375, 265);
    }
    void buttonERASE() {
    myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (10, 255, 120, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (10, 255, 120, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("ERASE", 25, 265);
    }
    void buttonREAD() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (350, 255, 470, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (350, 255, 470, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("READ", 375, 265);
    }

  ////////////////////////////////////////////////////////////////////////////////////////
  //прорисовка линий
  void line() {
     myGLCD.setColor(255, 0, 0); // цвет линии красный
     myGLCD.drawLine(1,35,479,35); // линия горизонтальная
     myGLCD.drawLine(1,73,479,73); // линия горизонтальная
     myGLCD.drawLine(1,108,479,108); // линия горизонтальная
     myGLCD.drawLine(1,143,479,143); // линия горизонтальная
     myGLCD.drawLine(1,178,479,178); // линия горизонтальная
     myGLCD.drawLine(1,212,479,212); // линия горизонтальная
     myGLCD.drawLine(1,248,479,248); // линия горизонтальная
   }

  ////////////////////////////////////////////////////////////////////////////////////////////
  //отображение щрифта
  void vista(){
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setColor(0, 255, 0);
     myGLCD.setBackColor(0,0,0); 
  }

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

когда сможешь, глянешь.

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

не забывай, в KWP есть режим 1 - считывание текущих параметров, режим 2, 3 и другие. Дак вот помоему чтоб считать ошибки нужен 3 режим, стереть ещё какой то. режим вроде как меняется так

void initialization() {
  for (int i = 0; i < length5; i++) {
  mySerial.write(messageInit[i]);
  delay (5);
  }
  delay (55);

Не надо объявлять все переменные float, зачем? Понял как выводить на этот дисплей float 

myGLCD.printNumF(Temp,2,127,127);    было NumI   I значит int  а надо NumF   F - float,  цифра 2 это сколько нужно знаков после запятой. вот описание твоего LCD

https://geektimes.ru/post/258166/

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

только что утром читал про NumF щас собрался пробовать. на счет режимов надо почитать, но обком ничего не менят в посылках, просто посылает эти запросы. но если что то по ходу нужно при нажатии кнопки чек переходить в нужный режим. и уже потом кнопкой READ ERRASE делать их дело. щас я тут с пидами разбераюсь не точность, по ходу ошибся счетаом байт на один байт. закончу с этим и займусь ошибками. СЕНКС ЧТО НЕ БРОСАЕШЬ МЕНЯ ДО ПОСЛЕДНЕГО. 

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

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

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

    }

как ты это сниффом то увидишь? это ведь не байты, а замыкание линии на +12 на на 360мс и потом на 25мс, может и увидишь много FF хотя хз. Так что опком возможно и перводит блок в другой режим, просто мы этого не видим. Хотя если у тебя заработает, значит я не прав. 

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

спортивный интерес уже )

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

понял. еще не дошел. F помогло с запятыми :) , пок еще проверяю показания

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

подправил байты в формулах и формулы. убрал затирания пробелом без удаления Watch_Temperature (); из кнопок, вроде все норм. с запятиыми все норм добавл F. потом подумаю с затираниями последних цифр. берусь за DTC

вот обработаный и работающий корректно скетч

  #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 length8 = 8;
  int length7 = 7;

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

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


  // массив байтов принимаемого сообщения
  byte MessageRx[110] = {0};  // массив байтов принимаемого сообщения
  //массивы сообщений (пидов)
  byte messageInit[5] = {0x81, 0x11, 0xF1, 0x81, 0x04};    // запрос инициализации
  ///////////////byte messagePresent[5] = {0x81,0x11,0xF1,0x3E,0xC1};      // запрос присутствия 
  byte messagePids[6] = {0x82,0x11,0xF1,0x21,0x01,0xA6};    // запрос данных1
  byte messageREAD[8] = {0x84,0x11,0xF1,0x18,0x00,0xFF,0x00,0x9D};    // запрос ошибок
  byte messageERASE[7] = {0x83,0x11,0xF1,0x14,0xFF,0x00,0x98};    // стирание ошибок
  
  unsigned long prevPID = 0;
  ////////////unsigned long prevpres = 0;


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

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

  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  void setup() {
    Serial.begin(115200);
    mySerial.begin(10400);
    myGLCD.InitLCD();
    myGLCD.clrScr();
    myTouch.InitTouch();
    myTouch.setPrecision(PREC_MEDIUM);
 
    drawHomeScreen();  
    currentPage = '0'; 
    selectedUnit = '0'; 
  
    Wire.begin();
    rtc.begin();
    dht.begin();
    sensors.begin();
    // строка ниже используется для настройки даты и времени часов (год, месяц, день, часы, минуты, секунды)
    rtc.adjust(DateTime(2017, 7, 8, 19, 00, 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 > 60000)  { Watch_Temperature (); prevWatch = curWatch;}
    if (curDvoet - prevDvoet > 500)  { if (!Dvoet) {myGLCD.print(":", 285, 0);} else {myGLCD.print(" ", 285, 0);} prevDvoet = curDvoet; Dvoet=!Dvoet;}
   Menu();
   //---------------------------------------------------------
   //прописываем где и что мы хотим видеть (пиды)
     if (currentPage == '0') {if (curData - prevData > 0){
       
       myGLCD.setColor(0, 255, 0);
       
       //if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
       //if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
       myGLCD.printNumI(Speed, 350, 0);
      
      myGLCD.setColor(255, 255, 255); 
      
      //if (--<10) {myGLCD.print("  ", 166, 40); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 40); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 40);
      
      //if (--<10) {myGLCD.print("  ", 166, 75); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 75); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 75);
      
     // if (Speed<10) {myGLCD.print("  ", 166, 110); }; //затираем вторую цифру и третью
     // if (Speed>10) {myGLCD.print(" ", 182, 110); }; //затирает третюю цифру
     // myGLCD.printNumI(Speed, 165, 110);

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

      
      //if (PumpRPM>10) {myGLCD.print(" ", 212, 180); }; //затираем четвертую цифру
      myGLCD.printNumI(PumpRPM, 165, 180);
        
      //if (RPM>100) {myGLCD.print(" ", 212, 215);};   //затираем четвертую цифру
      myGLCD.printNumI(RPM, 165, 215);
      
      //-------------------------------------------
      //if (Temp<10) {myGLCD.print("  ", 426, 40); }; //затираем вторую цифру и третью
      //if (Temp>10) {myGLCD.print(" ", 442, 40); }; //затирает третюю цифру
      myGLCD.printNumI(Temp, 410, 40);
      
      //if (TempOil<10) {myGLCD.print("  ", 426, 75); }; //затираем вторую цифру и третью
      //if (TempOil>10) {myGLCD.print(" ", 442, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(TempOil, 410, 75);
      
      //if (TempFuel<10) {myGLCD.print("  ", 426, 110); }; //затираем вторую цифру и третью
      //if (TempFuel>10) {myGLCD.print(" ", 442, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(TempFuel, 410, 110);
  
      myGLCD.printNumI(sensors.getTempCByIndex(0), 410, 145);
      
      myGLCD.printNumI(t, 410, 180);
      
      //if (TempAir<10) {myGLCD.print("  ", 426, 215); }; //затираем вторую цифру и третью
      //if (TempAir>10) {myGLCD.print(" ", 442, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(TempAir, 410, 215);
     
     prevData = curData;   
    }
   }
   //----------------------------------------------------------
      if (currentPage == '1') {if (curData - prevData > 0){
        myGLCD.setColor(0, 255, 0);
        
        //if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        //if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
      //if (StaDaliv<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      //if (StaDaliv>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumF(StaDaliv,1, 395, 40);
      
      //if (DesInj<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      //if (DesInj>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumF(DesInj,1, 395, 75);
      
      //if (ActInj<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      //if (ActInj>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumF(ActInj,1, 395, 110);
      
      //if (DesaInjQua<10) {myGLCD.print("  ", 411, 145); }; //затираем вторую цифру и третью
      //if (DesaInjQua>10) {myGLCD.print(" ", 427, 145); }; //затирает третюю цифру  
      myGLCD.printNumF(DesaInjQua,1, 395, 145);
      
      //if (InjQua<10) {myGLCD.print("  ", 411, 180); }; //затираем вторую цифру и третью
      //if (InjQua>10) {myGLCD.print(" ", 427, 180); }; //затирает третюю цифру  
      myGLCD.printNumF(InjQua,1, 395, 180);
      
      //if (MAF<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      //if (MAF>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(MAF, 395, 215);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      if (currentPage == '2') {
        if (curData - prevData > 0){
        myGLCD.setColor(0, 255, 0);
        
        //if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        //if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
      //if (BoostPres<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      //if (BoostPres>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumF(BoostPres,1, 395, 40);
      
      //if (BoostPresCom<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      //if (BoostPresCom>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumF(BoostPresCom,1, 395, 75);
      
      //if (EGRmg<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      //if (EGRmg>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру 
      //if (EGRmg>100) {myGLCD.print(" ", 443, 110); }; //затирает четвертую цифру 
      myGLCD.printNumI(EGRmg, 395, 110);
      
      //if (EGRPul<10) {myGLCD.print("  ", 411, 145); }; //затираем вторую цифру и третью
      //if (EGRPul>10) {myGLCD.print(" ", 427, 145); }; //затирает третюю цифру  
      myGLCD.printNumF(DesaInjQua,1, 395, 145);
      
      //if (SolenPul<10) {myGLCD.print("  ", 411, 180); }; //затираем вторую цифру и третью
      //if (SolenPul>10) {myGLCD.print(" ", 427, 180); }; //затирает третюю цифру  
      myGLCD.printNumF(SolenPul, 1, 395, 180);
      
      //if (SolenPre<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      //if (SolenPre>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumF(SolenPre, 0, 395, 215);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      if (currentPage == '3') {if (curData - prevData > 0){
        myGLCD.setColor(0, 255, 0);
        
        //if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        //if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
       myGLCD.setColor(255, 255, 255);
        
        prevData = curData;
      }
    }
  }
  ///////////////////////////////////////////////////////////////////////////
  
  //отправка запросов пидов
  void PIDs() {
    Serial.println ("Otpravil zapros 21 01");
    if (pid==1){
    for (int i = 0; i < length6; i++) {
    mySerial.write(messagePids[i]);
    delay (waitbyte); } 
   }
}
  /*void present() {
    for (int i = 0; i < length5; i++) {
    mySerial.write(messagePresent[i]);
    delay (waitbyte); }
   }
*/

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

   if (MessageRx[0]==0x83 && MessageRx[1]==0xF1 && MessageRx[2]==0x11 && MessageRx[3]==0xC1 && MessageRx[4]==0x6B && MessageRx[5]==0x8F && MessageRx[6]==0x40) {Init=1;
   timerenabledInit=0;  
   Serial.println ("     Initialization OK!!!!:  ");
   }
   //при получении этого сообщения выдавать на третий экран "NO ERROR"
   if (MessageRx[3]==0x82 && MessageRx[4]==0xF1 && MessageRx[5]==0x11 && MessageRx[6]==0x58 && MessageRx[7]==0x00 && MessageRx[8]==0xDC){
     currentPage = '3';
     myGLCD.print("NO ERROR", 165, 145);
     Serial.println ("     NO ERROR  ");
     }
    
    // при получении отличающего сообщения конвертировать байты и выдать номер ошибки
   if (MessageRx[3]==0x82 && MessageRx[4]==0xF1 && MessageRx[5]==0x11 && MessageRx[6]==0x58){
     // здесь пишем номер байта и конвертируем в номеро ошибок, если одна и больше
     Serial.println ("     OSHIBKA ESTY ");
   }
   
   // при получении этого сообщения выдавать на третий экран "BORRADO" стерто
   if (MessageRx[3]==0x83 && MessageRx[4]==0xF1 && MessageRx[5]==0x11 && MessageRx[6]==0x54 && MessageRx[7]==0xFF && MessageRx[8]==0x00 && MessageRx[9]==0xD8){
     currentPage = '3';
     myGLCD.print("BORRADO", 165, 145);
     Serial.println ("     BORRADOR  ");
    }
    
    if (MessageRx[3]==0x80 && MessageRx[4]==0xF1 && MessageRx[5]==0x11 && MessageRx[6]==0x4C && MessageRx[7]==0x61 && MessageRx[8]==0x01)    {
    
   MAF =  ((MessageRx[29]*256)+MessageRx[30])/10;
    BoostPres =  ((MessageRx[31]*256)+MessageRx[32])/1000.0;
    RPM =  (MessageRx[35]*256)+MessageRx[36];
    EGRmg =  ((MessageRx[37]*256)+MessageRx[38])/10.0;
    BoostPresCom =  ((MessageRx[41]*256)+MessageRx[42])/1000.0;
    Speed =  ((MessageRx[47]*256)+MessageRx[48])/100;
    DesaInjQua =  ((MessageRx[53]*256)+MessageRx[54])/100.0;
    InjQua =  ((MessageRx[55]*256)+MessageRx[56])/100.0;
    StaDaliv =  ((MessageRx[57]*256)+MessageRx[58])/100.0;
    PumpRPM =  (MessageRx[59]*256)+MessageRx[60];
    EGRPul =  ((MessageRx[65]*256)+MessageRx[66])/100.0;
    SolenPul =  ((MessageRx[67]*256)+MessageRx[68])/100.0;
    SolenPre =  ((MessageRx[73]*256)+MessageRx[74])/100.0;
    DesInj =  ((MessageRx[75]*3)+(MessageRx[76])/100.0)+0.3;
    ActInj =  ((MessageRx[19]*3)+(MessageRx[20])/100.0)+0.3;
    //TempAir =  ((MessageRx[77]*26)-278)+MessageRx[78]/10.0;
    //Temp =  ((MessageRx[17]*26)-278)+MessageRx[18]/10.0;
    //TempOil =  ((MessageRx[21]*26)-278)+MessageRx[22]/10.0;
    //TempFuel =  ((MessageRx[61]*26)-278)+MessageRx[62]/10.0;
    
    int A = 0;
    if  (MessageRx[77]<=0x0A) A = 277;
    if  (MessageRx[77]==0x0B || MessageRx[77]==0x0C) A = 278;
    if  (MessageRx[77]>=0x0D) A = 279;
    double B = MessageRx[78]/10.0;
    double cel , drob ;
    drob = modf(B, &cel);
    if (drob>0.6) cel++;
      TempAir =  ((MessageRx[77]*26)-A)+cel;
    
    if  (MessageRx[17]<=0x0A) A = 277;
    if  (MessageRx[17]==0x0B || MessageRx[77]==0x0C) A = 278;
    if  (MessageRx[17]>=0x0D) A = 279;
    B = MessageRx[18]/10.0;
    drob = modf(B, &cel);
    if (drob>0.6) cel++;
      Temp =  ((MessageRx[17]*26)-A)+cel;

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


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



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

  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //отправка запроса на диагностическое соединение
  void initialization() {
    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 Read() {
    Serial.println ("Zapros error;  ");
    for (int i = 0; i < length8; i++) {
    mySerial.write(messageREAD[i]);
    delay (waitbyte); } 
    }
    
  void Erase() {
    Serial.println ("Zapros erase;  ");
    for (int i = 0; i < length7; i++) {
    mySerial.write(messageERASE[i]);
    delay (waitbyte); } 
    }
  
  //прорисовка координат тач кнопок
  void Menu () {
      //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>=255) && (y<=310)) {
        drawFrame(10, 255, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();       
        Watch_Temperature ();
      } 
      
     // Button INF2
     if ((x>=180) && (x<=300) && (y>=255) && (y<=310)) {
        drawFrame(180, 255, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=255) && (y<=310)) {
        drawFrame(350, 255, 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>=255) && (y<=310)) {
        drawFrame(180, 255, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=255) && (y<=310)) {
        drawFrame(350, 255, 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>=255) && (y<=310)) {
        drawFrame(10, 255, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=255) && (y<=310)) {
        drawFrame(350, 255, 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 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 READ
    if ((x>=350) && (x<=470) && (y>=255) && (y<=310)) {
        drawFrame(350, 255, 470, 310); 
        Read();        //потом заменить на дейсвие   
        myGLCD.clrScr();             
        drawscreen_three();       //потом заменить на дейсвие
        Watch_Temperature ();                                                                    
      }
	  
	  // Button ERASE
    if ((x>=10) && (x<=120) && (y>=255) && (y<=310)) {
        drawFrame(10, 255, 120, 310); 
        Erase();           //потом заменить на дейсвие
        myGLCD.clrScr();             
        drawscreen_three();         //потом заменить на дейсвие
        Watch_Temperature ();                                                                   
      }
     
        
     }
    }
  }
  
  //--------------------------------------------------------
  //прописывает заголовки на всех страницах
   void drawHomeScreen() {
     line() ;
     vista();
     myGLCD.drawLine(239,35,239,248); // линия вертикальная
     myGLCD.print("Ltr/Hor :", 10, 40);
     myGLCD.print("Ltr/100 :", 10, 75);
     myGLCD.print("Fuel  L :", 10, 110);
     myGLCD.print("Humed  %:", 10, 145);
     myGLCD.print("PUMP RPM:", 10, 180);
     myGLCD.print("Engi RPM:", 10, 215);
     myGLCD.print("Motor *C:", 255, 40);
     myGLCD.print("Oil   *C:", 255, 75);
     myGLCD.print("Fuel  *C:", 255, 110);
     myGLCD.print("Inter *C:", 255, 145);
     myGLCD.print("Exter *C:", 255, 180);
     myGLCD.print("IntAir*C:", 255, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonINF2() ;
     buttonCHECK() ;
   }
  //-------------------------------------------------
    void drawscreen_one() {
     line() ;
     vista();
     myGLCD.print("Start of Delivery  *CA:", 10, 40);
     myGLCD.print("Desir inject Start *CA:", 10, 75);
     myGLCD.print("Actua Inject Start *CA:", 10, 110);
     myGLCD.print("Desir Inject Quan mg/s:", 10, 145);
     myGLCD.print("Actu Inject Quant mg/s:", 10, 180);
     myGLCD.print("Mass Air Flow     mg/s:", 10, 215);
 
  
     buttonHome() ;
     buttonINF2() ;
     buttonCHECK() ;
     }
  //-------------------------------------------------
   void drawscreen_two() {
     line() ;
     vista();
     myGLCD.print("Boost Press       Bar:", 10, 40);
     myGLCD.print("Boost Press Com   Bar:", 10, 75);
     myGLCD.print("EGR command      mg/s:", 10, 110);
     myGLCD.print("EGR Pulse Ratio     %:", 10, 145);
     myGLCD.print("Solenoide Pulse     %:", 10, 180);
     myGLCD.print("Solenoide Boost     %:", 10, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonCHECK() ;
   }
  //----------------------------------------------------------------------------
   void drawscreen_three() {
     vista();
     myGLCD.setColor(255, 0, 0); // цвет линии красный
     myGLCD.drawLine(1,35,479,35); // линия горизонтальная
     myGLCD.drawLine(1,248,479,248); // линия горизонтальная
     
     buttonHome();
     buttonERASE();
     buttonREAD();
   }

  ////////////////////////////////////////////////////////////////////////////////////////////////////////
  //координаты тача
  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, 80, 33);      // расположение кнопки прямоугольника
     myGLCD.setColor(0, 255, 0); // цвет текста зеленый
     myGLCD.drawRoundRect (1, 1, 65, 33);      // кнопка будет рамкой
     myGLCD.setFont(GroteskBold16x32);                      // размер шрифта
     myGLCD.setBackColor(0,0,0);            // цвет фона области где будет надпись и кнопки
     myGLCD.print("HOME", 1, 0); // центровка строки
    }
  void buttonINF1() {
    myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (10, 255, 120, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (10, 255, 120, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 1", 25, 265);
    }
  void buttonINF2() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (180, 255, 300, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (180, 255, 300, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 2", 200, 265);
    }
  void buttonCHECK() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (350, 255, 470, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (350, 255, 470, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("CHECK", 375, 265);
    }
    void buttonERASE() {
    myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (10, 255, 120, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (10, 255, 120, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("ERASE", 25, 265);
    }
    void buttonREAD() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (350, 255, 470, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (350, 255, 470, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("READ", 375, 265);
    }

  ////////////////////////////////////////////////////////////////////////////////////////
  //прорисовка линий
  void line() {
     myGLCD.setColor(255, 0, 0); // цвет линии красный
     myGLCD.drawLine(1,35,479,35); // линия горизонтальная
     myGLCD.drawLine(1,73,479,73); // линия горизонтальная
     myGLCD.drawLine(1,108,479,108); // линия горизонтальная
     myGLCD.drawLine(1,143,479,143); // линия горизонтальная
     myGLCD.drawLine(1,178,479,178); // линия горизонтальная
     myGLCD.drawLine(1,212,479,212); // линия горизонтальная
     myGLCD.drawLine(1,248,479,248); // линия горизонтальная
   }

  ////////////////////////////////////////////////////////////////////////////////////////////
  //отображение щрифта
  void vista(){
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setColor(0, 255, 0);
     myGLCD.setBackColor(0,0,0); 
  }

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

 

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

взял старый скетч где только температура

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); //R,T
#define TX 11
int mode;
int timeout = 1000;
int timeold;

int messagelength2 = 5;
int messagelength3 = 8;
int k=0;
byte  inbyte=0;

int Temp = 0;    // температура 

int TempTime =150;    // задержка между посылками запросов температуры, мс
int PresTime = 9000;    // задержка между посылками запросов присутствия, мс 
int waitbyte = 1;       // задержка между отправкой байт в сообщении, мс



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

byte message1 = 0x81;
byte message2 = 0x11; 
byte message3 = 0xF1; 
byte message4 = 0x81; 
byte message5 = 0x04;
byte message6[8] = {0x84,0x11,0xF1,0x18,0x00,0xFF,0x00,0x9D};
byte message7[5] = {0x81,0x11,0xF1,0x3E,0xC1};

unsigned long prevtemp = 0;
unsigned long prevpres = 0;


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

void setup() {
    Serial.begin(115200);
  pinMode(TX, OUTPUT);
fastinit();
  Serial.print ("Transmit fast init:   ");
  mySerial.write (message1);
    Serial.print(message1,HEX);
  delay(5);
 
  mySerial.write(message2);
    Serial.print(message2,HEX);
  delay(5);
  
   mySerial.write(message3);
    Serial.print(message3,HEX);
  delay(5);
  
  mySerial.write(message4);
    Serial.print(message4,HEX);
  delay(5);
  
   mySerial.write(message5);
    Serial.print(message5,HEX);
  delay(5);
  
  delay(50);
  Serial.println("");
  Serial.println("FAST INIT OK");
  Serial.println("");
  
  
}

void loop() {
unsigned long curtemp = millis ();
unsigned long curpres = millis ();
TimewaitTemp = millis ();

if (curpres - prevpres > PresTime) {present(); prevpres = curpres;}

if (!timerenabledTemp){if (curtemp - prevtemp > TempTime) {temp(); timerwaitTemp=TimewaitTemp; timerenabledTemp=1; prevtemp = curtemp;}}

if (timerenabledTemp) {if (TIMEREXPIREDtemp) {timerenabledTemp=0;}}

receive ();
   
  
}



  

void temp() {
  Serial.print ("Zapros Temp:   ");
  for (int i = 0; ((i < messagelength3  ) & (mode == 1)); i++) {
    mySerial.write(message6[i]);
    Serial.print(message6[i],HEX); Serial.print ("  ");
    delay (waitbyte);
    
  } 
  Serial.print("       "); Serial.print(TempTime); Serial.println("ms");
  
}

void present() {
  Serial.print ("Zapros prisutstviya:   ");
  for (int i = 0; ((i < messagelength2) & (mode == 1)); i++) {
    mySerial.write(message7[i]);
    Serial.print(message7[i],HEX); Serial.print ("  ");
     delay (waitbyte);
      } 
  Serial.print("       "); Serial.print(PresTime); Serial.println("ms");
}
    void receive () {
     if (mySerial.available()) {
      delay(100);
      k=0;
      inbyte=0;
     
  while( mySerial.available() && k < 14) {
     inbyte = mySerial.read();
    k++;
    if (k==1 )MessageRx[0] = inbyte;
    if (k==2 ) MessageRx[1] = inbyte;
    if (k==3 ) MessageRx[2] = inbyte;
    if (k==4 ) MessageRx[3] = inbyte;
    if (k==5 ) MessageRx[4] = inbyte;
    if (k==6 ) MessageRx[5] = inbyte;
    if (k==7 ) MessageRx[6] = inbyte;
    if (k==8 ) MessageRx[7] = inbyte;
    if (k==9 ) MessageRx[8] = inbyte;
    if (k==10 ) MessageRx[9] = inbyte;
    if (k==11 ) MessageRx[10] = inbyte;
    if (k==12 ) MessageRx[11] = inbyte;
   }

    Serial.print ("                                                            Recieve:   ");
    Serial.print (MessageRx[0], HEX) ; 
    Serial.print (" ") ; 
    Serial.print (MessageRx[1], HEX) ; 
    Serial.print (" ") ;
    Serial.print (MessageRx[2], HEX) ; 
    Serial.print (" ") ; 
    Serial.print (MessageRx[3], HEX) ; 
    Serial.print (" ") ;
    Serial.print (MessageRx[4], HEX) ; 
    Serial.print (" ") ; 
    Serial.print (MessageRx[5], HEX) ; 
    Serial.print (" ") ;
    Serial.print (MessageRx[6], HEX) ; 
    Serial.print (" ") ; 
    Serial.print (MessageRx[7], HEX) ;
    Serial.print (" ") ; 
    Serial.print (MessageRx[8], HEX) ; 
    Serial.print (" ") ; 
    Serial.print (MessageRx[9], HEX) ; 
    Serial.print (" ") ;
    Serial.print (MessageRx[10], HEX) ; 
    Serial.print (" ") ; 
    Serial.println (MessageRx[11], HEX) ;
    
    if (MessageRx[5]==0x11 && MessageRx[7]==0x61 && MessageRx[8]==0x01) {Temp = MessageRx[14]-40;
    timerenabledTemp=0;
    Serial.print ("                                                            Temperature:  "); 
    Serial.print (Temp); 
    Serial.println ("*C");}

    MessageRx[0] =0; MessageRx[1] =0; MessageRx[2] =0; MessageRx[3] =0; 
    MessageRx[4] =0; MessageRx[5] =0; MessageRx[6] =0; MessageRx[7] =0; 
    MessageRx[8] =0; MessageRx[9] =0; MessageRx[10] =0; MessageRx[11] =0; 
    

    }
      
  
  }


void fastinit(){
  if (!mode) {
    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");
    mode++;
  }
}

заменил температуру на ошибки и вуаля!!! это просто запрос, щас выложу ответ из сериала

starting comunication (fastinit)
starting serial comunication
Transmit fast init:   8111F1814
FAST INIT OK

Zapros Temp:   84  11  F1  18  0  FF  0  9D         150ms
                                                            Recieve:   FF FF 83 F1 11 C1 6B 8F 40 FF FF FF
Zapros Temp:   84  11  F1  18  0  FF  0  9D         150ms
                                                            Recieve:   FF FF FF FF 82 F1 11 58 0 DC 0 0
Zapros Temp:   84  11  F1  18  0  FF  0  9D         150ms
                                                            Recieve:   FF FF FF FF 82 F1 11 58 0 DC 0 0
Zapros Temp:   84  11  F1  18  0  FF  0  9D         150ms
                                                            Recieve:   FF FF FF FF 82 F1 11 58 0 DC 0 0
Zapros Temp:   84  11  F1  18  0  FF  0  9D         150ms
                                                            Recieve:   FF FF FF FF 82 F1 11 58 0 DC 0 0
Zapros Temp:   84  11  F1  18  0  FF  0  9D         150ms
                                                            Recieve:   FF FF FF FF 82 F1 11 58 0 DC 0 0
Zapros Temp:   84  11  F1  18  0  FF  0  9D         150ms
                                                            Recieve:   FF FF FF FF 82 F1 11 58 0 DC 0 0
Zapros Temp:   84  11  F1  18  0  FF  0  9D         150ms
                                                            Recieve:   FF FF FF FF 82 F1 11 58 0 DC 0 0
Zapros Temp:   84  11  F1  18  0  FF  0  9D         150ms
                                                            Recieve:   FF FF FF FF 82 F1 11 58 0 DC 0 0
Zapros Temp:   84  11  F1  18  0  FF  0  9D         150ms
                                                            Recieve:   FF FF FF FF 82 F1 11 58 0 DC 0 0
Zapros Temp:   84  11  F1  18  0  FF  0  9D         150ms

щас есть перавая проблема, при нажатии на кнопку check и переходе на страницу 3, то рвется связь. ищу.......

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

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

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

я уже убирал. в сериале выдает

otpravil zapros 21 01

recieve: 000000000

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

 

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

а ты зачем pids() в receive () запихал? странно что у тебя вообще работает

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

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

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

Я тебя наверно удивлюсь, но если убрать Pids(): то получаю подряд только положительные сообщения о онициализации. поставил в начале лупа, не работает. поставил перед последней закрывающей скобкой и заработало но с миниальной задержко в 210м/с , если меньше то не с того ни сего пропадат связь. но зато выяснился косяк с третей страницей, переставил Pids():  в луп и третья страница заработала. и даже я уже отправляю кнопкой read запрос на ошибки и на экран получаю NO ERROR и при нажатии на кнопку ERASE получаю ответ на экран BORRADO. :). из за задерки в 210 м/с заметно медленне обновляются данные. думаю нужно искать куда коррекно вставить Pids():. если его убрать из ресиве и луп, то его не отправляет, где то есть косяк. вот скетч

  #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 length8 = 8;
  int length7 = 7;
  int pid = 1; // очередность пида
  bool Init = 0;
  int PIDTime = 120;    // задержка между посылками запросов пидов, мс
  int waitbyte = 1;       // задержка между отправкой байт в сообщении, мс
  
  //отображаемые параметры
  float L100 = 0;           //расход литров на 100км
  float LHor = 0;           //расход топлива литров в час
  int MAF = 0;              //26,27 байты   Sensor de flujo de aire en masa
  float BoostPres = 0;      //28,29 байты   Presión de refuerzo
  int RPM = 0;              //32,33 байты   Velocidad del motor
  int EGRmg = 0;            //34,35 байты   Comando EGR (Comando de recirculación de gases de escape)
  float BoostPresCom = 0;   //38,39 байты   Comando de presión de refuerzo
  int Speed = 0;            //44,45 байты   Velocidad del vehículo
  float DesaInjQua = 0;     //50,51 байты   Cantidad de inyección deseada
  float InjQua = 0;         //52,53 байты   Cantidad de la inyección
  float StaDaliv = 0;       //54,55 байты   Inicio de la entrega
  int PumpRPM = 0;          //56,57 байты   Velocidad de la bomba
  float EGRPul = 0;         //62,63 байты   Relación de impulsos EGR (recirculación de gases de escape
  float SolenPul = 0;       //64,65 байты   Velocidad de solenoide de control de nivel de remolino Relación de impulsos
  float SolenPre = 0;       //70,71 байты   Relación de impulsos Presión Electroválvula de presión
  float DesInj = 0;         //72,73 байты   Inyección deseada Inicio
  float ActInj = 0;         //16,17 байты   Inicio de la inyección real
  int TempAir = 0;          //74,75 байты   Temperatura del aire de admisión
  int Temp = 0;             //14,15 байты   Temperatura del refrigerante
  int TempOil = 0;          //18,19 байты   Temperatura del aceite del motor
  int TempFuel = 0;         //58,59 байты   Temperatura del combustible

  // массив байтов принимаемого сообщения
  byte MessageRx[110] = {0};  // массив байтов принимаемого сообщения
  
  //массивы сообщений
  byte messageInit[5] = {0x81, 0x11, 0xF1, 0x81, 0x04};    // запрос инициализации
  byte messagePids[6] = {0x82,0x11,0xF1,0x21,0x01,0xA6};    // запрос данных1
  byte messageREAD[8] = {0x84,0x11,0xF1,0x18,0x00,0xFF,0x00,0x9D};    // запрос ошибок
  byte messageERASE[7] = {0x83,0x11,0xF1,0x14,0xFF,0x00,0x98};    // стирание ошибок
  
  unsigned long prevPID = 0;
  unsigned long TimewaitPID, timerwaitPID = 0;
  bool timerenabledPID = 0;
  #define TIMEREXPIRED_PID (TimewaitPID - timerwaitPID)> 1000 // здесь задержка на ожидание правильного ответа пидов, мс
  unsigned long TimewaitInit, timerwaitInit = 0;
  bool timerenabledInit = 0;
  #define TIMEREXPIRED_Init (TimewaitInit - timerwaitInit)> 2000 // здесь задержка на ожидание ответа об удачной инициализации, мс

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

    if (!Init) {if (!timerenabledInit){ timerwaitInit=TimewaitInit; timerenabledInit=1; initialization(); }
    else {if (TIMEREXPIRED_Init) {timerenabledInit=0;}}}
    else {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 > 60000)  { Watch_Temperature (); prevWatch = curWatch;}
    if (curDvoet - prevDvoet > 500)  { if (!Dvoet) {myGLCD.print(":", 285, 0);} else {myGLCD.print(" ", 285, 0);} prevDvoet = curDvoet; Dvoet=!Dvoet;}
    Menu();
   
   //-----------------------------------------------------------------------------
   //прописываем где и какие данные мы хотим видеть 
   //-----------------------------------------------------------------------------
   //страница HOME
   //-------------------------------------------------------
     if (currentPage == '0') {if (curData - prevData > 0){
       
       myGLCD.setColor(0, 255, 0);
       myGLCD.printNumI(Speed, 350, 0);
      
      myGLCD.setColor(255, 255, 255); 
      
      myGLCD.printNumF(LHor, 1, 165, 40);
      myGLCD.printNumF(L100, 1, 165, 75);
     // myGLCD.printNumI(Speed, 165, 110);
      myGLCD.printNumI(h, 165, 145);
      myGLCD.printNumI(PumpRPM, 165, 180);
      myGLCD.printNumI(RPM, 165, 215);
      //-------------------------------------------
      myGLCD.printNumI(Temp, 410, 40); 
      myGLCD.printNumI(TempOil, 410, 75);  
      myGLCD.printNumI(TempFuel, 410, 110);
      myGLCD.printNumI(sensors.getTempCByIndex(0), 410, 145);
      myGLCD.printNumI(t, 410, 180); 
      myGLCD.printNumI(TempAir, 410, 215);
     
      prevData = curData;   
      }
      }
      //----------------------------------------------------------
      //страниц INF1
      //----------------------------------------------------------
      if (currentPage == '1') {if (curData - prevData > 0){
        
        myGLCD.setColor(0, 255, 0);
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
      
      myGLCD.printNumF(StaDaliv,1, 395, 40); 
      myGLCD.printNumF(DesInj,1, 395, 75); 
      myGLCD.printNumF(ActInj,1, 395, 110); 
      myGLCD.printNumF(DesaInjQua,1, 395, 145);  
      myGLCD.printNumF(InjQua,1, 395, 180); 
      myGLCD.printNumI(MAF, 395, 215);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      //страниц INF2
      //----------------------------------------------------------
      if (currentPage == '2') {if (curData - prevData > 0){
        
        myGLCD.setColor(0, 255, 0);
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
      myGLCD.printNumF(BoostPres,1, 395, 40);  
      myGLCD.printNumF(BoostPresCom,1, 395, 75); 
      myGLCD.printNumI(EGRmg, 395, 110);  
      myGLCD.printNumF(DesaInjQua,1, 395, 145);  
      myGLCD.printNumF(SolenPul, 1, 395, 180);  
      myGLCD.printNumF(SolenPre, 0, 395, 215);
        
        prevData = curData;
      }
      }
      //----------------------------------------------------------
      //страниц CHECK
      //----------------------------------------------------------
      if (currentPage == '3') {if (curData - prevData > 0){
        myGLCD.setColor(0, 255, 0);
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
        prevData = curData;
      }
    }
    PIDs();
    delay(210);
  }

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

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

   if (MessageRx[0]==0x83 && MessageRx[1]==0xF1 && MessageRx[2]==0x11 && MessageRx[3]==0xC1 && MessageRx[4]==0x6B && MessageRx[5]==0x8F && MessageRx[6]==0x40) {Init=1;
   timerenabledInit=0;  
   Serial.println ("     Initialization OK!!!!:  ");
   }
   //при получении этого сообщения выдавать на третий экран "NO ERROR"
   if (MessageRx[4]==0x82 && MessageRx[5]==0xF1 && MessageRx[6]==0x11 && MessageRx[7]==0x58 && MessageRx[8]==0x00 && MessageRx[9]==0xDC){
     currentPage = '3';
     myGLCD.print("NO ERROR", 165, 145);
     Serial.println ("     NO ERROR  ");
     }
    
    // при получении отличающего сообщения конвертировать байты и выдать номер ошибки
   if (MessageRx[3]==0x82 && MessageRx[4]==0xF1 && MessageRx[5]==0x11 && MessageRx[6]==0x58){
     // здесь пишем номер байта и конвертируем в номеро ошибок, если одна и больше
     Serial.println ("     OSHIBKA ESTY ");
   }
   
   // при получении этого сообщения выдавать на третий экран "BORRADO" стерто
   if (MessageRx[3]==0x83 && MessageRx[4]==0xF1 && MessageRx[5]==0x11 && MessageRx[6]==0x54 && MessageRx[7]==0xFF && MessageRx[8]==0x00 && MessageRx[9]==0xD8){
     currentPage = '3';
     myGLCD.print("BORRADO", 165, 145);
     Serial.println ("     BORRADOR  ");
    }
    
    if (MessageRx[3]==0x80 && MessageRx[4]==0xF1 && MessageRx[5]==0x11 && MessageRx[6]==0x4C && MessageRx[7]==0x61 && MessageRx[8]==0x01)    {
    L100 =  (14.6*6.8*4.54*Speed*0.621371)/(3600*MAF/100);
    LHor = ((InjQua*4)*3.6)/100.0;
    MAF =  ((MessageRx[29]*256)+MessageRx[30])/10;
    BoostPres =  ((MessageRx[31]*256)+MessageRx[32])/1000.0;
    RPM =  (MessageRx[35]*256)+MessageRx[36];
    EGRmg =  ((MessageRx[37]*256)+MessageRx[38])/10.0;
    BoostPresCom =  ((MessageRx[41]*256)+MessageRx[42])/1000.0;
    Speed =  ((MessageRx[47]*256)+MessageRx[48])/100;
    DesaInjQua =  ((MessageRx[53]*256)+MessageRx[54])/100.0;
    InjQua =  ((MessageRx[55]*256)+MessageRx[56])/100.0;
    StaDaliv =  ((MessageRx[57]*256)+MessageRx[58])/100.0;
    PumpRPM =  (MessageRx[59]*256)+MessageRx[60];
    EGRPul =  ((MessageRx[65]*256)+MessageRx[66])/100.0;
    SolenPul =  ((MessageRx[67]*256)+MessageRx[68])/100.0;
    SolenPre =  ((MessageRx[73]*256)+MessageRx[74])/100.0;
    DesInj =  ((MessageRx[75]*3)+(MessageRx[76])/100.0)+0.3;
    ActInj =  ((MessageRx[19]*3)+(MessageRx[20])/100.0)+0.3;
    //TempAir =  ((MessageRx[77]*26)-278)+MessageRx[78]/10.0;
    //Temp =  ((MessageRx[17]*26)-278)+MessageRx[18]/10.0;
    //TempOil =  ((MessageRx[21]*26)-278)+MessageRx[22]/10.0;
    //TempFuel =  ((MessageRx[61]*26)-278)+MessageRx[62]/10.0;
    
    int A = 0;
    if  (MessageRx[77]<=0x0A) A = 277;
    if  (MessageRx[77]==0x0B || MessageRx[77]==0x0C) A = 278;
    if  (MessageRx[77]>=0x0D) A = 279;
    double B = MessageRx[78]/10.0;
    double cel , drob ;
    drob = modf(B, &cel);
    if (drob>0.6) cel++;
      TempAir =  ((MessageRx[77]*26)-A)+cel;
    
    if  (MessageRx[17]<=0x0A) A = 277;
    if  (MessageRx[17]==0x0B || MessageRx[77]==0x0C) A = 278;
    if  (MessageRx[17]>=0x0D) A = 279;
    B = MessageRx[18]/10.0;
    drob = modf(B, &cel);
    if (drob>0.6) cel++;
      Temp =  ((MessageRx[17]*26)-A)+cel;

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


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



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

  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  //отправка запроса на диагностическое соединение
  void initialization() {
    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 Read() {
    Serial.println ("Zapros error;  ");
    for (int i = 0; i < length8; i++) {
    mySerial.write(messageREAD[i]);
    delay (waitbyte); } 
    }
    
  void Erase() {
    Serial.println ("Zapros erase;  ");
    for (int i = 0; i < length7; i++) {
    mySerial.write(messageERASE[i]);
    delay (waitbyte); } 
    }
  
  //прорисовка координат тач кнопок
  void Menu () {
      //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>=255) && (y<=310)) {
        drawFrame(10, 255, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();       
        Watch_Temperature ();
      } 
      
     // Button INF2
     if ((x>=180) && (x<=300) && (y>=255) && (y<=310)) {
        drawFrame(180, 255, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=255) && (y<=310)) {
        drawFrame(350, 255, 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>=255) && (y<=310)) {
        drawFrame(180, 255, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=255) && (y<=310)) {
        drawFrame(350, 255, 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>=255) && (y<=310)) {
        drawFrame(10, 255, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();   
        Watch_Temperature ();                                                                   
      } 
      
    // Button CHECK
    if ((x>=350) && (x<=470) && (y>=255) && (y<=310)) {
        drawFrame(350, 255, 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 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 READ
    if ((x>=350) && (x<=470) && (y>=255) && (y<=310)) {
        drawFrame(350, 255, 470, 310);
        currentPage = '3';
        Read();        //потом заменить на дейсвие   
        myGLCD.clrScr();             
        drawscreen_three();       //потом заменить на дейсвие
        Watch_Temperature ();                                                                    
      }
	  
	  // Button ERASE
    if ((x>=10) && (x<=120) && (y>=255) && (y<=310)) {
        drawFrame(10, 255, 120, 310);
       currentPage = '3'; 
        Erase();           //потом заменить на дейсвие
        myGLCD.clrScr();             
        drawscreen_three();         //потом заменить на дейсвие
        Watch_Temperature ();                                                                   
      }
        
     }
    }
  }
  
  //--------------------------------------------------------
  //прописывает заголовки на всех страницах
   void drawHomeScreen() {
     line() ;
     vista();
     myGLCD.drawLine(239,35,239,248); // линия вертикальная
     myGLCD.print("Ltr/Hor :", 10, 40);
     myGLCD.print("Ltr/100 :", 10, 75);
     myGLCD.print("Fuel  L :", 10, 110);
     myGLCD.print("Humed  %:", 10, 145);
     myGLCD.print("PUMP RPM:", 10, 180);
     myGLCD.print("Engi RPM:", 10, 215);
     myGLCD.print("Motor *C:", 255, 40);
     myGLCD.print("Oil   *C:", 255, 75);
     myGLCD.print("Fuel  *C:", 255, 110);
     myGLCD.print("Inter *C:", 255, 145);
     myGLCD.print("Exter *C:", 255, 180);
     myGLCD.print("IntAir*C:", 255, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonINF2() ;
     buttonCHECK() ;
   }
  //-------------------------------------------------
    void drawscreen_one() {
     line() ;
     vista();
     myGLCD.print("Start of Delivery  *CA:", 10, 40);
     myGLCD.print("Desir inject Start *CA:", 10, 75);
     myGLCD.print("Actua Inject Start *CA:", 10, 110);
     myGLCD.print("Desir Inject Quan mg/s:", 10, 145);
     myGLCD.print("Actu Inject Quant mg/s:", 10, 180);
     myGLCD.print("Mass Air Flow     mg/s:", 10, 215);
 
  
     buttonHome() ;
     buttonINF2() ;
     buttonCHECK() ;
     }
  //-------------------------------------------------
   void drawscreen_two() {
     line() ;
     vista();
     myGLCD.print("Boost Press       Bar:", 10, 40);
     myGLCD.print("Boost Press Com   Bar:", 10, 75);
     myGLCD.print("EGR command      mg/s:", 10, 110);
     myGLCD.print("EGR Pulse Ratio     %:", 10, 145);
     myGLCD.print("Solenoide Pulse     %:", 10, 180);
     myGLCD.print("Solenoide Boost     %:", 10, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonCHECK() ;
   }
  //----------------------------------------------------------------------------
   void drawscreen_three() {
     vista();
     myGLCD.setColor(255, 0, 0); // цвет линии красный
     myGLCD.drawLine(1,35,479,35); // линия горизонтальная
     myGLCD.drawLine(1,248,479,248); // линия горизонтальная
     myGLCD.print("Boost Press       Bar:", 10, 40);
     buttonHome();
     buttonERASE();
     buttonREAD();
   }

  ////////////////////////////////////////////////////////////////////////////////////////////////////////
  //координаты тача
  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, 80, 33);      // расположение кнопки прямоугольника
     myGLCD.setColor(0, 255, 0); // цвет текста зеленый
     myGLCD.drawRoundRect (1, 1, 65, 33);      // кнопка будет рамкой
     myGLCD.setFont(GroteskBold16x32);                      // размер шрифта
     myGLCD.setBackColor(0,0,0);            // цвет фона области где будет надпись и кнопки
     myGLCD.print("HOME", 1, 0); // центровка строки
    }
  void buttonINF1() {
    myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (10, 255, 120, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (10, 255, 120, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 1", 25, 265);
    }
  void buttonINF2() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (180, 255, 300, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (180, 255, 300, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 2", 200, 265);
    }
  void buttonCHECK() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (350, 255, 470, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (350, 255, 470, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("CHECK", 375, 265);
    }
    void buttonERASE() {
    myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (10, 255, 120, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (10, 255, 120, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("ERASE", 25, 265);
    }
    void buttonREAD() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (350, 255, 470, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (350, 255, 470, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("READ", 375, 265);
    }

  ////////////////////////////////////////////////////////////////////////////////////////
  //прорисовка линий
  void line() {
     myGLCD.setColor(255, 0, 0); // цвет линии красный
     myGLCD.drawLine(1,35,479,35); // линия горизонтальная
     myGLCD.drawLine(1,73,479,73); // линия горизонтальная
     myGLCD.drawLine(1,108,479,108); // линия горизонтальная
     myGLCD.drawLine(1,143,479,143); // линия горизонтальная
     myGLCD.drawLine(1,178,479,178); // линия горизонтальная
     myGLCD.drawLine(1,212,479,212); // линия горизонтальная
     myGLCD.drawLine(1,248,479,248); // линия горизонтальная
   }

  ////////////////////////////////////////////////////////////////////////////////////////////
  //отображение щрифта
  void vista(){
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setColor(0, 255, 0);
     myGLCD.setBackColor(0,0,0); 
  }

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

 

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

Intake Air Temperature это датчик поступающего в двигатель воздуха, обычно он совмещен с MAF. не знаю кто  туда PIDs запихал? но быть ему там явно не место.  Может так? подправил чуток код

  #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;

  float h;
  float t;

  
  bool Dvoet = 0;

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

  int length5 = 5;
  int length6 = 6;
  int length8 = 8;
  int length7 = 7;

  
  bool Init = 0;

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


  
  byte MessageRx[110] = {0};  // массив байтов принимаемого сообщения
 
  byte messageInit[5] = {0x81, 0x11, 0xF1, 0x81, 0x04};    // запрос инициализации
  byte messagePresent[5] = {0x81,0x11,0xF1,0x3E,0xC1};      // запрос присутствия 
  byte messagePids[6] = {0x82,0x11,0xF1,0x21,0x01,0xA6};    // запрос пид 2101
  byte messageREAD[8] = {0x84,0x11,0xF1,0x18,0x00,0xFF,0x00,0x9D};    // запрос ошибок
  byte messageERASE[7] = {0x83,0x11,0xF1,0x14,0xFF,0x00,0x98};    // стирание ошибок


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

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

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

  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  void loop() {
    
    unsigned long curPID = millis ();
    unsigned long curpres = millis ();
    unsigned long curWatch = millis();  
    unsigned long curDvoet = millis();  
    TimewaitPID = millis ();
    TimewaitInit = millis ();
    
    if (!Init) {if (!timerenabledInit){ timerwaitInit=TimewaitInit; timerenabledInit=1; initialization(); }
                else {if (TIMEREXPIRED_Init) {timerenabledInit=0;}}}
    else {
      if (currentPage != '3'){ // если открыта страница 0,1 или 2 шлем запрос пид2101, если страница 3 -  шлем запрос присутствия 
      if (!timerenabledPID){if (curPID - prevPID > PIDTime) {PIDs(); timerwaitPID=TimewaitPID; timerenabledPID=1; prevPID = curPID;}}
      if (timerenabledPID) {if (TIMEREXPIRED_PID) {timerenabledPID=0;}}
      }
      else if (curpres - prevpres > PresTime) {present(); prevpres = curpres;}}
    if (curWatch - prevWatch > 60000)  { Watch_Temperature (); prevWatch = curWatch;}
    if (curDvoet - prevDvoet > 500)  { if (!Dvoet) {myGLCD.print(":", 285, 0);} else {myGLCD.print(" ", 285, 0);} prevDvoet = curDvoet; Dvoet=!Dvoet;}
    receive ();
    Menu();
    LCDDataPrint();
    
              }
  
   
   void LCDDataPrint(){
    unsigned long curData = millis();  
      
      if (curData - prevData > Datadelay){  
        
        if (currentPage == '0') {
       
       myGLCD.setColor(0, 255, 0);
       
       //if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
       //if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
       myGLCD.printNumI(Speed, 350, 0);
      
      myGLCD.setColor(255, 255, 255); 
      
      //if (--<10) {myGLCD.print("  ", 166, 40); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 40); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 40);
      
      //if (--<10) {myGLCD.print("  ", 166, 75); }; //затираем вторую цифру и третью
      //if (-->10) {myGLCD.print(" ", 182, 75); }; //затирает третюю цифру
      //myGLCD.printNumI(--, 165, 75);
      
     // if (Speed<10) {myGLCD.print("  ", 166, 110); }; //затираем вторую цифру и третью
     // if (Speed>10) {myGLCD.print(" ", 182, 110); }; //затирает третюю цифру
     // myGLCD.printNumI(Speed, 165, 110);

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

      
      //if (PumpRPM>10) {myGLCD.print(" ", 212, 180); }; //затираем четвертую цифру
      myGLCD.printNumI(PumpRPM, 165, 180);
        
      //if (RPM>100) {myGLCD.print(" ", 212, 215);};   //затираем четвертую цифру
      myGLCD.printNumI(RPM, 165, 215);
      
      //-------------------------------------------
      //if (Temp<10) {myGLCD.print("  ", 426, 40); }; //затираем вторую цифру и третью
      //if (Temp>10) {myGLCD.print(" ", 442, 40); }; //затирает третюю цифру
      myGLCD.printNumI(Temp, 410, 40);
      
      //if (TempOil<10) {myGLCD.print("  ", 426, 75); }; //затираем вторую цифру и третью
      //if (TempOil>10) {myGLCD.print(" ", 442, 75); }; //затирает третюю цифру  
      myGLCD.printNumI(TempOil, 410, 75);
      
      //if (TempFuel<10) {myGLCD.print("  ", 426, 110); }; //затираем вторую цифру и третью
      //if (TempFuel>10) {myGLCD.print(" ", 442, 110); }; //затирает третюю цифру  
      myGLCD.printNumI(TempFuel, 410, 110);
  
  //    myGLCD.printNumI(sensors.getTempCByIndex(0), 410, 145);
      
      myGLCD.printNumI(t, 410, 180);
      
      //if (TempAir<10) {myGLCD.print("  ", 426, 215); }; //затираем вторую цифру и третью
      //if (TempAir>10) {myGLCD.print(" ", 442, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(TempAir, 410, 215);
     
      
    }
   
   //----------------------------------------------------------
      if (currentPage == '1') {
        myGLCD.setColor(0, 255, 0);
        
        //if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        //if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
      //if (StaDaliv<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      //if (StaDaliv>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumF(StaDaliv,1, 395, 40);
      
      //if (DesInj<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      //if (DesInj>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumF(DesInj,1, 395, 75);
      
      //if (ActInj<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      //if (ActInj>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру  
      myGLCD.printNumF(ActInj,1, 395, 110);
      
      //if (DesaInjQua<10) {myGLCD.print("  ", 411, 145); }; //затираем вторую цифру и третью
      //if (DesaInjQua>10) {myGLCD.print(" ", 427, 145); }; //затирает третюю цифру  
      myGLCD.printNumF(DesaInjQua,1, 395, 145);
      
      //if (InjQua<10) {myGLCD.print("  ", 411, 180); }; //затираем вторую цифру и третью
      //if (InjQua>10) {myGLCD.print(" ", 427, 180); }; //затирает третюю цифру  
      myGLCD.printNumF(InjQua,1, 395, 180);
      
      //if (MAF<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      //if (MAF>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumI(MAF, 395, 215); 
      }
      //----------------------------------------------------------
     
      if (currentPage == '2') {
        
        myGLCD.setColor(0, 255, 0);
        
        //if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        //if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
        myGLCD.setColor(255, 255, 255);
        
      //if (BoostPres<10) {myGLCD.print("  ", 411, 40); }; //затираем вторую цифру и третью
      //if (BoostPres>10) {myGLCD.print(" ", 427, 40); }; //затирает третюю цифру
      myGLCD.printNumF(BoostPres,1, 395, 40);
      
      //if (BoostPresCom<10) {myGLCD.print("  ", 411, 75); }; //затираем вторую цифру и третью
      //if (BoostPresCom>10) {myGLCD.print(" ", 427, 75); }; //затирает третюю цифру  
      myGLCD.printNumF(BoostPresCom,1, 395, 75);
      
      //if (EGRmg<10) {myGLCD.print("  ", 411, 110); }; //затираем вторую цифру и третью
      //if (EGRmg>10) {myGLCD.print(" ", 427, 110); }; //затирает третюю цифру 
      //if (EGRmg>100) {myGLCD.print(" ", 443, 110); }; //затирает четвертую цифру 
      myGLCD.printNumI(EGRmg, 395, 110);
      
      //if (EGRPul<10) {myGLCD.print("  ", 411, 145); }; //затираем вторую цифру и третью
      //if (EGRPul>10) {myGLCD.print(" ", 427, 145); }; //затирает третюю цифру  
      myGLCD.printNumF(DesaInjQua,1, 395, 145);
      
      //if (SolenPul<10) {myGLCD.print("  ", 411, 180); }; //затираем вторую цифру и третью
      //if (SolenPul>10) {myGLCD.print(" ", 427, 180); }; //затирает третюю цифру  
      myGLCD.printNumF(SolenPul, 1, 395, 180);
      
      //if (SolenPre<10) {myGLCD.print("  ", 411, 215); }; //затираем вторую цифру и третью
      //if (SolenPre>10) {myGLCD.print(" ", 427, 215); }; //затирает третюю цифру  
      myGLCD.printNumF(SolenPre, 0, 395, 215);
        
      }
      //----------------------------------------------------------
      
      if (currentPage == '3') {
        myGLCD.setColor(0, 255, 0);
        
        //if (Speed<10) {myGLCD.print("  ", 366, 0); }; //затираем вторую цифру
        //if (Speed>10) {myGLCD.print(" ", 382, 0); }; //затирает третюю цифру
        myGLCD.printNumI(Speed, 350, 0);
          
       myGLCD.setColor(255, 255, 255);
        
       
      } 
      prevData = curData;
    }
   }
  
  ///////////////////////////////////////////////////////////////////////////
  
  //отправка запроса пид 2101
  void PIDs() {
    Serial.println ("Otpravil zapros 21 01");
    for (int i = 0; i < length6; i++) {
    mySerial.write(messagePids[i]);
    delay (waitbyte); } 
   }
 
 //отправка запроса присутствия
 void present() {
  Serial.println ("Otpravil zapros Present");
    for (int i = 0; i < length5; i++) {
    mySerial.write(messagePresent[i]);
    delay (waitbyte); }
   }


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


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

   if (currentPage == '3'){
   //при получении этого сообщения выдавать на третий экран "NO ERROR"
   if (MessageRx[3]==0x82 && MessageRx[4]==0xF1 && MessageRx[5]==0x11 && MessageRx[6]==0x58 && MessageRx[7]==0x00 && MessageRx[8]==0xDC){
     
     myGLCD.print("NO ERROR", 165, 145);
     Serial.println ("     NO ERROR  ");
     }
    
    // при получении отличающего сообщения конвертировать байты и выдать номер ошибки
   if (MessageRx[3]==0x82 && MessageRx[4]==0xF1 && MessageRx[5]==0x11 && MessageRx[6]==0x58){
     // здесь пишем номер байта и конвертируем в номеро ошибок, если одна и больше
     Serial.println ("     OSHIBKA ESTY ");
   }
   
   // при получении этого сообщения выдавать на третий экран "BORRADO" стерто
   if (MessageRx[3]==0x83 && MessageRx[4]==0xF1 && MessageRx[5]==0x11 && MessageRx[6]==0x54 && MessageRx[7]==0xFF && MessageRx[8]==0x00 && MessageRx[9]==0xD8){
     
     myGLCD.print("BORRADO", 165, 145);
     Serial.println ("     BORRADOR  ");
    }}
   else if (MessageRx[3]==0x80 && MessageRx[4]==0xF1 && MessageRx[5]==0x11 && MessageRx[6]==0x4C && MessageRx[7]==0x61 && MessageRx[8]==0x01)    {
    
   MAF =  ((MessageRx[29]*256)+MessageRx[30])/10;
    BoostPres =  ((MessageRx[31]*256)+MessageRx[32])/1000.0;
    RPM =  (MessageRx[35]*256)+MessageRx[36];
    EGRmg =  ((MessageRx[37]*256)+MessageRx[38])/10.0;
    BoostPresCom =  ((MessageRx[41]*256)+MessageRx[42])/1000.0;
    Speed =  ((MessageRx[47]*256)+MessageRx[48])/100;
    DesaInjQua =  ((MessageRx[53]*256)+MessageRx[54])/100.0;
    InjQua =  ((MessageRx[55]*256)+MessageRx[56])/100.0;
    StaDaliv =  ((MessageRx[57]*256)+MessageRx[58])/100.0;
    PumpRPM =  (MessageRx[59]*256)+MessageRx[60];
    EGRPul =  ((MessageRx[65]*256)+MessageRx[66])/100.0;
    SolenPul =  ((MessageRx[67]*256)+MessageRx[68])/100.0;
    SolenPre =  ((MessageRx[73]*256)+MessageRx[74])/100.0;
    DesInj =  ((MessageRx[75]*3)+(MessageRx[76])/100.0)+0.3;
    ActInj =  ((MessageRx[19]*3)+(MessageRx[20])/100.0)+0.3;
    //TempAir =  ((MessageRx[77]*26)-278)+MessageRx[78]/10.0;
    //Temp =  ((MessageRx[17]*26)-278)+MessageRx[18]/10.0;
    //TempOil =  ((MessageRx[21]*26)-278)+MessageRx[22]/10.0;
    //TempFuel =  ((MessageRx[61]*26)-278)+MessageRx[62]/10.0;
    
    int A = 0;
    if  (MessageRx[77]<=0x0A) A = 277;
    if  (MessageRx[77]==0x0B || MessageRx[77]==0x0C) A = 278;
    if  (MessageRx[77]>=0x0D) A = 279;
    double B = MessageRx[78]/10.0;
    double cel , drob ;
    drob = modf(B, &cel);
    if (drob>0.6) cel++;
      TempAir =  ((MessageRx[77]*26)-A)+cel;
    
    if  (MessageRx[17]<=0x0A) A = 277;
    if  (MessageRx[17]==0x0B || MessageRx[77]==0x0C) A = 278;
    if  (MessageRx[17]>=0x0D) A = 279;
    B = MessageRx[18]/10.0;
    drob = modf(B, &cel);
    if (drob>0.6) cel++;
      Temp =  ((MessageRx[17]*26)-A)+cel;

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


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

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

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

  ///////////////////////////////////////////////////////////////////////////////////////////////////////
  
  void Read() {
    Serial.println ("Zapros error;  ");
    for (int i = 0; i < length8; i++) {
    mySerial.write(messageREAD[i]);
    delay (waitbyte); } 
    }
    
  void Erase() {
    Serial.println ("Zapros erase;  ");
    for (int i = 0; i < length7; i++) {
    mySerial.write(messageERASE[i]);
    delay (waitbyte); } 
    }
  
  //прорисовка экранов и работа тачскрина
  void Menu () {
      if (myTouch.dataAvailable()) {
         myTouch.read();
         x=myTouch.getX(); 
         y=myTouch.getY();
      if (currentPage == '0') {
      buttonHomeTouch();
      buttonINF1Touch();
      buttonINF2Touch();
      buttonCHECKTouch();     }
      if (currentPage == '1') { 
     buttonHomeTouch();
     buttonINF2Touch();
     buttonCHECKTouch();     }
      if (currentPage == '2') { 
     buttonHomeTouch();
     buttonINF1Touch();
     buttonCHECKTouch();      }
      if (currentPage == '3') { 
      buttonHomeTouch();
      buttonREADTouch();
      buttonERASETouch(); }}}
  
  //--------------------------------------------------------
  //прописывает заголовки на всех страницах
   void drawHomeScreen() {
     line() ;
     vista();
     myGLCD.drawLine(239,35,239,248); // линия вертикальная
     myGLCD.print("Ltr/Hor :", 10, 40);
     myGLCD.print("Ltr/100 :", 10, 75);
     myGLCD.print("Fuel  L :", 10, 110);
     myGLCD.print("Humed  %:", 10, 145);
     myGLCD.print("PUMP RPM:", 10, 180);
     myGLCD.print("Engi RPM:", 10, 215);
     myGLCD.print("Motor *C:", 255, 40);
     myGLCD.print("Oil   *C:", 255, 75);
     myGLCD.print("Fuel  *C:", 255, 110);
     myGLCD.print("Inter *C:", 255, 145);
     myGLCD.print("Exter *C:", 255, 180);
     myGLCD.print("IntAir*C:", 255, 215);
     buttonHome() ;
     buttonINF1() ;
     buttonINF2() ;
     buttonCHECK() ;
   }
  //-------------------------------------------------
    void drawscreen_one() {
     line() ;
     vista();
     myGLCD.print("Start of Delivery  *CA:", 10, 40);
     myGLCD.print("Desir inject Start *CA:", 10, 75);
     myGLCD.print("Actua Inject Start *CA:", 10, 110);
     myGLCD.print("Desir Inject Quan mg/s:", 10, 145);
     myGLCD.print("Actu Inject Quant mg/s:", 10, 180);
     myGLCD.print("Mass Air Flow     mg/s:", 10, 215);
     buttonHome() ;
     buttonINF2() ;
     buttonCHECK() ;
     }
  //-------------------------------------------------
   void drawscreen_two() {
     line() ;
     vista();
     myGLCD.print("Boost Press       Bar:", 10, 40);
     myGLCD.print("Boost Press Com   Bar:", 10, 75);
     myGLCD.print("EGR command      mg/s:", 10, 110);
     myGLCD.print("EGR Pulse Ratio     %:", 10, 145);
     myGLCD.print("Solenoide Pulse     %:", 10, 180);
     myGLCD.print("Solenoide Boost     %:", 10, 215);
  
     buttonHome() ;
     buttonINF1() ;
     buttonCHECK() ;
   }
  //----------------------------------------------------------------------------
   void drawscreen_three() {
     vista();
     myGLCD.setColor(255, 0, 0); // цвет линии красный
     myGLCD.drawLine(1,35,479,35); // линия горизонтальная
     myGLCD.drawLine(1,248,479,248); // линия горизонтальная
     
     buttonHome();
     buttonERASE();
     buttonREAD();
   }

  ////////////////////////////////////////////////////////////////////////////////////////////////////////
  //координаты тача
  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, 80, 33);      // расположение кнопки прямоугольника
     myGLCD.setColor(0, 255, 0); // цвет текста зеленый
     myGLCD.drawRoundRect (1, 1, 65, 33);      // кнопка будет рамкой
     myGLCD.setFont(GroteskBold16x32);                      // размер шрифта
     myGLCD.setBackColor(0,0,0);            // цвет фона области где будет надпись и кнопки
     myGLCD.print("HOME", 1, 0); // центровка строки
    }

    void buttonHomeTouch(){
      if ((x>=1) && (x<=65) &&(y>=1) && (y<=33)) {
        drawFrame(1, 1, 65, 33);
        currentPage = '0';
        myGLCD.clrScr();
        drawHomeScreen(); 
       
      }}

     
     
  void buttonINF1() {
    myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (10, 255, 120, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (10, 255, 120, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 1", 25, 265);
    }
   void buttonINF1Touch() {
    if ((x>=10) && (x<=120) && (y>=255) && (y<=310)) {
        drawFrame(10, 255, 120, 310); 
        currentPage = '1';           
        myGLCD.clrScr();             
        drawscreen_one();       
       
      } }

   
  void buttonINF2() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (180, 255, 300, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (180, 255, 300, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("INF 2", 200, 265);
    }
  void buttonINF2Touch() {
    if ((x>=180) && (x<=300) && (y>=255) && (y<=310)) {
        drawFrame(180, 255, 300, 310); 
        currentPage = '2';           
        myGLCD.clrScr();             
        drawscreen_two();   
                                                                      
      }}
  
  void buttonCHECK() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (350, 255, 470, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (350, 255, 470, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("CHECK", 375, 265);
    }
  void buttonCHECKTouch() {
    if ((x>=350) && (x<=470) && (y>=255) && (y<=310)) {
        drawFrame(350, 255, 470, 310); 
        currentPage = '3';           
        myGLCD.clrScr();             
        drawscreen_three();   
                                                                         
      } }

  
    void buttonERASE() {
    myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (10, 255, 120, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (10, 255, 120, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("ERASE", 25, 265);
    }
    
    void buttonERASETouch () {
    if ((x>=10) && (x<=120) && (y>=255) && (y<=310)) {
        drawFrame(10, 255, 120, 310); 
        Erase();           //потом заменить на дейсвие
        myGLCD.clrScr();             
        drawscreen_three();         //потом заменить на дейсвие
                                                                         
      }}
      
    void buttonREAD() {
     myGLCD.setColor(0,0,0);
     myGLCD.fillRoundRect (350, 255, 470, 310);
     myGLCD.setColor(0, 255, 0);
     myGLCD.drawRoundRect (350, 255, 470, 310);
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setBackColor(0,0,0);
     myGLCD.print("READ", 375, 265);
    }
    
    void buttonREADTouch() {
    if ((x>=350) && (x<=470) && (y>=255) && (y<=310)) {
        drawFrame(350, 255, 470, 310); 
        Read();        //потом заменить на дейсвие   
        myGLCD.clrScr();             
        drawscreen_three();       //потом заменить на дейсвие
                                                                           
      }}

  ////////////////////////////////////////////////////////////////////////////////////////
  //прорисовка линий
  void line() {
     myGLCD.setColor(255, 0, 0); // цвет линии красный
     myGLCD.drawLine(1,35,479,35); // линия горизонтальная
     myGLCD.drawLine(1,73,479,73); // линия горизонтальная
     myGLCD.drawLine(1,108,479,108); // линия горизонтальная
     myGLCD.drawLine(1,143,479,143); // линия горизонтальная
     myGLCD.drawLine(1,178,479,178); // линия горизонтальная
     myGLCD.drawLine(1,212,479,212); // линия горизонтальная
     myGLCD.drawLine(1,248,479,248); // линия горизонтальная
   }

  ////////////////////////////////////////////////////////////////////////////////////////////
  //отображение щрифта
  void vista(){
     myGLCD.setFont(GroteskBold16x32);
     myGLCD.setColor(0, 255, 0);
     myGLCD.setBackColor(0,0,0); 
  }

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

 

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

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