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

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
208
C++:
    else if (buf[0] > 0x02 &&
             buf[1] == 0x43 &&
             buf[2] >= 0x01 <= 0x02)
    {
Вот это условие, кстати, не проверяет, что 2-й байт это 1 или 2. Оно проверяет, что второй байт <= 1, получает булево значение 0 или 1, и проверяет, что это значение <= 2. Итого: это условие всегда верно.
 
  • Лойс +1
Реакции: bort707

Semmen74

✩✩✩✩✩✩✩
2 Ноя 2020
18
3
Лучше вот так: 0х6 0х43 0х2 0х1 0х13 0х16 0х32 0х0 Дрегое сообщение
 

bort707

★★★★★★✩
21 Сен 2020
3,067
916
Лучше вот так: 0х6 0х43 0х2 0х1 0х13 0х16 0х32 0х0 Дрегое сообщение
Давайте разберем. Не будем спорить пока про байт 3, пусть это число ошибок.
Тогда тут 2 ошибки.
Попробуйте их разобрать сами по примерам выше - какие это ошибки, "Р" "С" или какие еще?
 

bort707

★★★★★★✩
21 Сен 2020
3,067
916
Тогда отлично выходит теория
не, это не моя теория. Картинку-то в сообщении #43. я не сам нарисовал, это из описания протокола OBD-II

тут дело в том, что у OBD-II куча вариантов и расширений. Кроме того, форматы запросов для разных ПИДов - разные. И форматы ответов на запросы - тоже. Когда вы, например, посылаете запрос, у вас может вообще не быть никаких данных в пакете...

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

Semmen74

✩✩✩✩✩✩✩
2 Ноя 2020
18
3
C++:
    else if (buf[0] > 0x02 &&
             buf[1] == 0x43 &&
             buf[2] >= 0x01 <= 0x02)
    {
Вот это условие, кстати, не проверяет, что 2-й байт это 1 или 2. Оно проверяет, что второй байт <= 1, получает булево значение 0 или 1, и проверяет, что это значение <= 2. Итого: это условие всегда верно.
Это в данном случае не критично
 

Semmen74

✩✩✩✩✩✩✩
2 Ноя 2020
18
3
не, это не моя теория. Картинку-то в сообщении #43. я не сам нарисовал, это из описания протокола OBD-II

тут дело в том, что у OBD-II куча вариантов и расширений. Кроме того, форматы запросов для разных ПИДов - разные. И форматы ответов на запросы - тоже. Когда вы, например, посылаете запрос, у вас может вообще не быть никаких данных в пакете...

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

Мужчины. Я ж всё подробно изложил. Где,как и что. Я всё это изучил и проверил сотни раз. Вопрос только один. Мне надо выводить 0113 или 0235 или ещё другое с нулём спереди.
 

bort707

★★★★★★✩
21 Сен 2020
3,067
916
Мне надо выводить 0113 или 0235 или ещё другое с нулём спереди.
Ваш вопрос не имеет смысла. Задача решается не так.
Вам не надо выводить никакой ноль.
Если вы пока не понимаете битовые операции - это вовсе не значит, что они тут не нужны.

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

Старик Похабыч

★★★★★★★
14 Авг 2019
4,272
1,303
Москва
Ля... На колу мочало начинай сначала. Изучи, может ты про это спросил
Вот тебе кусок кода
C++:
a=1;
if (a<16) Serial.print("0");
Serial.println(A,HEX);
a=23;
if (a<16) Serial.print("0");
Serial.println(A,HEX);
 
  • Лойс +1
Реакции: bort707

Semmen74

✩✩✩✩✩✩✩
2 Ноя 2020
18
3
Мне не нужно топливо, обороты или скорость. Я делаю просто запрос ошибок DTC. Это mode 03,07,02ю Никаких PID здесь нет. Сообщения приходят трёх видов. 1 вид -это ноль ошибок. 2 вид это 1 или 2 ошибки. 3 вид это многострочные сообщения
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
208
Мужчины. Я ж всё подробно изложил. Где,как и что. Я всё это изучил и проверил сотни раз. Вопрос только один. Мне надо выводить 0113 или 0235 или ещё другое с нулём спереди.
Функция sprintf в помощь, типа такого:
C++:
unsigned char out[8];
sprintf(out, "%02x", buf[1]);
Serial.print(out);
 

bort707

★★★★★★✩
21 Сен 2020
3,067
916
2 вид это 1 или 2 ошибки. 3 вид это многострочные сообщения
дак вы уже умеете выводить так как надо
0х6 0х43 0х2 0х1 0х13 0х16 0х32 0х0


Вы правда думаете, что есть какая-то разница - записать ошибку как

0х1 0х13

или как

0х01 0х13
??????

Делаю вывод - вы просто ничего не поняли про биты и потому делаете вид, что этого просто нет
 

bort707

★★★★★★✩
21 Сен 2020
3,067
916
Я об этом написал во втором сообщении этой темы.
а я - в третьем :)

А еще в сообщении #5 ТС написали
01, 1, 0x01 и 0x1 это одно и то же число. Ведущие нули значения не имеют.
а он так ничего и не понял
 
Изменено:

Semmen74

✩✩✩✩✩✩✩
2 Ноя 2020
18
3
дак вы уже умеете выводить так как надо
0х6 0х43 0х2 0х1 0х13 0х16 0х32 0х0


Вы правда думаете, что есть какая-то разница - записать ошибку как
0х1 0х13
или как
0х01 0х13
??????

Делаю вывод - вы просто ничего не поняли про биты и потому делаете вид, что этого просто нет

Вы правы. Наверно надо с битами действовать.
 

Semmen74

✩✩✩✩✩✩✩
2 Ноя 2020
18
3
В общем, выводы просты. Чтобы корректно выводить данные, действительно требуется раскладывать все байты побитно
 
  • Лойс +1
Реакции: bort707