я бы не стал заполнять экран 3 сразу, пока не нажата кнопка реад или эразе. Оставить черным. Логика такая:
- если ошибок нет стираем сначала экран, прорисовываем заново, печатаем "NO DTC" так принято сокращать ошибки (diagnostic trouble codes)
- если ошибок 5 или меньше стираем сначала экран, прорисовываем заново, устанавливаем такой то размер шрифта, на первой строке печатаем ошибку 1 (байт 0х05 и 0х06)
во второй строке печатаем вторую ошибку (байт 0х05+0х03 и 0х06+0х03) и т.д.
- если ошибок больше 5 стираем сначала экран, прорисовываем заново, устанавливаем меньший размер шрифта и т.д.
хотя перед но эррорс и боррадо как ты говоришь, нужно экран очистить и заново нарисовать, а то если что то до этого было на экране (например до этого считали коды, они есть и распечатались на экране) всё это останется помимо ноэррорс или боррадо
просто при очередном нажатии любой из кнопок просто очищать экран. я так думаю. блин со вчера думаю как расписать расшифровку и выводить, думал плясать от 7го байта (плюс три фф) по этому седьмой , типа если 01 читать байты 8 и 9, если 02 то читать байты 8, 9 и 11,12 и так далее, ноих же на до в бинарий, потом сказать что первых два бита это буква и прописать расшифровку, вторы два бита это первый символ, и расшифровку и т.д. блин не хватает мозгов. не шарю я еще во многом.
а точно там уже стоит очистка. В бинарник я считаю не надо. Если ты с ДВС считываешь явно ошибка будет с "P" начинаться, а остальное по байтам вроде как совпадает
я щас еду в отпуск домой, ты где живешь? може по пути в гости с пивком заскочу...
я бы не стал заполнять экран 3 сразу, пока не нажата кнопка реад или эразе. Оставить черным. Логика такая:
- если ошибок нет стираем сначала экран, прорисовываем заново, печатаем "NO DTC" так принято сокращать ошибки (diagnostic trouble codes)
- если ошибок 5 или меньше стираем сначала экран, прорисовываем заново, устанавливаем такой то размер шрифта, на первой строке печатаем ошибку 1 (байт 0х05 и 0х06)
во второй строке печатаем вторую ошибку (байт 0х05+0х03 и 0х06+0х03) и т.д.
- если ошибок больше 5 стираем сначала экран, прорисовываем заново, устанавливаем меньший размер шрифта и т.д.
Екатеринбург
я в исании живу уже 13 лет.
фигасе
угу... жаль далековато к тебе. завез бы тебе пивка испанского. с третьего экрана щас все уберу и перезалью скетч в последнем посте
убрал все с тертего экрана перезаливаю скетч
впринципе цас у меня так и работает. жму рид и мне посередине экрана выдает но эррос и с ерасе тоже самое борадо.
ну вот, осталось толькот если есть DTC запрограммировать
хотя перед но эррорс и боррадо как ты говоришь, нужно экран очистить и заново нарисовать, а то если что то до этого было на экране (например до этого считали коды, они есть и распечатались на экране) всё это останется помимо ноэррорс или боррадо
просто при очередном нажатии любой из кнопок просто очищать экран. я так думаю. блин со вчера думаю как расписать расшифровку и выводить, думал плясать от 7го байта (плюс три фф) по этому седьмой , типа если 01 читать байты 8 и 9, если 02 то читать байты 8, 9 и 11,12 и так далее, ноих же на до в бинарий, потом сказать что первых два бита это буква и прописать расшифровку, вторы два бита это первый символ, и расшифровку и т.д. блин не хватает мозгов. не шарю я еще во многом.
а точно там уже стоит очистка. В бинарник я считаю не надо. Если ты с ДВС считываешь явно ошибка будет с "P" начинаться, а остальное по байтам вроде как совпадает
так правильно будет?
if (MessageRx[3]==0x82 && MessageRx[4]==0xF1 && MessageRx[5]==0x11 && MessageRx[6]==0x58){
error = (MessageRx[7]==0x01){
error1 = MessageRx[8]+MessageRx[9];
myGLCD.print(error1, 165, 145);
}
error = (MessageRx[7]==0x02){
error1 = MessageRx[8]+MessageRx[9];
error2 = MessageRx[11]+MessageRx[12];
myGLCD.print(error1, 165, 145);
myGLCD.print(error2, 190, 145);
}
error = (MessageRx[7]==0x03){
error1 = MessageRx[8]+MessageRx[9];
error2 = MessageRx[11]+MessageRx[12];
error3 = MessageRx[14]+MessageRx[15];
myGLCD.print(error1, 165, 145);
myGLCD.print(error2, 190, 145);
myGLCD.print(error3, 210, 145);
}
или так
if (MessageRx[3]==0x82 && MessageRx[4]==0xF1 && MessageRx[5]==0x11 && MessageRx[6]==0x58){
error1 = MessageRx[8]+MessageRx[9];
error2 = MessageRx[11]+MessageRx[12];
error3 = MessageRx[14]+MessageRx[15];
error = (MessageRx[7]==0x01){
myGLCD.print(error1, 165, 145);
}
error = (MessageRx[7]==0x02){
myGLCD.print(error1, 165, 145);
myGLCD.print(error2, 190, 145);
}
error = (MessageRx[7]==0x03){
myGLCD.print(error1, 165, 145);
myGLCD.print(error2, 190, 145);
myGLCD.print(error3, 210, 145);
}
так попробуй, хз не на чем проверить . PS исправил ко че
блин с координатами напутал щас исправлю. Всё исправил
да но буква прописана в первых двух битах. зачем прописывать Р. а если ошибка будет иметь другую букву?
myGLCD.print(
": P"
, (50+(i*35)), 100);
вот тут я и не могу расчехлится как ему задать вот эти значения
пока так попробуй там переделаем, когда я научусь с битами работать
ты связывешься с ДВС, ошибка будет либо P либо U
понял. щас испытаем. сделаю одну ошибку.
на экран ничего не выводит. подожди там четыре фф. щас подправлю
вот с битами попробовал
вот ответ FF FF FF FF 85 F1 11 58 1 1 15 A1 9
вот прописано. щет байтов подправил
тоже ничего не выводит, счет байт подправил
выделяет эту строчку myGLCD.print("Zikl FOR s i+", 150, (145+(i*35));
не компилится пишет
скобку справа третью добавь ("Zikl FOR s i+", 150, (145+(i*35)));
не выводит ничего на экран
значит проверка по байтам сообщения не проходит почему , выводи что в сериал
нажал на chek
Вот что в сериале будет если проверка по байтам проходит OSHIBKA ESTY
байт 4 85 ???!!!
эх эта проверка по байтам тебя постоянно подводит )))
точно 85. щас попробую прежние методы. это меня всегда подводит
говорю тебе вывод всего в сериал выручает. его в самом конце надо убирать, а лучше закоментировать
ноут ссел, щас подзаряжу и попорбую все методы что ты давал. успел посмотреть только этот
if (MessageRx[4]==0x82 && MessageRx[5]==0xF1 && MessageRx[6]==0x11 && MessageRx[7]==0x58 && MessageRx[8]>0){
for (int i=0; i<MessageRx[8]; i++ ) {
myGLCD.print("ERROR ", 50, 75+(i*35));
myGLCD.printNumI((i+1), 130, 75+(i*35));
myGLCD.print(": P", 140, 75+(i*35));
myGLCD.printNumI(MessageRx[9+(i*3)],HEX, 180, 75+(i*35));
myGLCD.printNumI(MessageRx[10+(i*3)],HEX, 200, 75+(i*35));}
так как видишь с еденицей выдало на экран
1
ERROR: P
и все. но через сеунду он вылетает на хоме и рвется связь. заряжу ноут и попробую остальные
ок. через минут 20 попробую
получил на экран. подправил малость координаты прорисовки, так как цифры лягли одна на другую. получил
ERROR: 1 : P 121
ставил датчик обратно . стирал , сново скидывал датчик , читал ошибку , читает. но Р121 вмеесто Р0115
да потому что я убрал HEX, может из-за него не печатало. попробуй так
ты две ошибки сделай, а лучше три, и посмотрим как он в новые строки пишет ))
потсавил HEX и стало как в 635 посте
так как видишь с еденицей выдало на экран
1
ERROR: P
щас сделаю 2 ошибки и глаяну но без HEX, для начала
надо смотреть как на твоем экране HEX выводится
сделал две ошибки. не выводит ничего на экран, без HEX само собой. одну выводит, как постом выше
щас скажу как выводит
две выводит так FF FF FF FF 88 F1 11 58 02 01 15 A1 11 10 E4 A0 это из сериала
три думаю так FF FF FF FF 91 F1 11 58 03 01 15 A1 11 10 E4 11 11 E6 AА третюю ошибку на шару тыкну и C/S
в 4 байт добавляет три байта, меняет 8 байт на количество ошибок и три ошибки по три байта
Убери из проверки байт который меняется
Убери из проверки байт который меняется
убрал иду проверю
все равно р 121
спецом сделал одну ошибку потом две потом три. вот результат
интересно что вместо 91 что я ожидал дало 8B
Все правильно в нех 88 +3 будет 8B