C++:
else if (buf[0] > 0x02 &&
buf[1] == 0x43 &&
buf[2] >= 0x01 <= 0x02)
{
else if (buf[0] > 0x02 &&
buf[1] == 0x43 &&
buf[2] >= 0x01 <= 0x02)
{
Давайте разберем. Не будем спорить пока про байт 3, пусть это число ошибок.Лучше вот так: 0х6 0х43 0х2 0х1 0х13 0х16 0х32 0х0 Дрегое сообщение
не, это не моя теория. Картинку-то в сообщении #43. я не сам нарисовал, это из описания протокола OBD-IIТогда отлично выходит теория
Это в данном случае не критичноВот это условие, кстати, не проверяет, что 2-й байт это 1 или 2. Оно проверяет, что второй байт <= 1, получает булево значение 0 или 1, и проверяет, что это значение <= 2. Итого: это условие всегда верно.C++:else if (buf[0] > 0x02 && buf[1] == 0x43 && buf[2] >= 0x01 <= 0x02) {
это неправильный ответ. Если вам показывают ошибку, надо не отмахиваться, а пытаться исправить. Иначе непонятно, зачем мы вообще здесь собрались.Это в данном случае не критично
не, это не моя теория. Картинку-то в сообщении #43. я не сам нарисовал, это из описания протокола OBD-II
тут дело в том, что у OBD-II куча вариантов и расширений. Кроме того, форматы запросов для разных ПИДов - разные. И форматы ответов на запросы - тоже. Когда вы, например, посылаете запрос, у вас может вообще не быть никаких данных в пакете...
Если пытаться грызть эту науку методом "тыка" - никакой жизни не хватит. Правильно читать теорию, благо описаний протокола в сети полно. Надо только понимать, что у каждого производитея авто могут быть свои вариации.
Ваш вопрос не имеет смысла. Задача решается не так.Мне надо выводить 0113 или 0235 или ещё другое с нулём спереди.
ФункцияМужчины. Я ж всё подробно изложил. Где,как и что. Я всё это изучил и проверил сотни раз. Вопрос только один. Мне надо выводить 0113 или 0235 или ещё другое с нулём спереди.
sprintf
в помощь, типа такого:unsigned char out[8];
sprintf(out, "%02x", buf[1]);
Serial.print(out);
дак вы уже умеете выводить так как надо2 вид это 1 или 2 ошибки. 3 вид это многострочные сообщения
Ля... На колу мочало начинай сначала. Изучи, может ты про это спросил
Вот тебе кусок кода
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);
Я об этом написал во втором сообщении этой темы.Спасибо. Я тож к этому пришёл
а я - в третьемЯ об этом написал во втором сообщении этой темы.
а он так ничего и не понял01
,1
,0x01
и0x1
это одно и то же число. Ведущие нули значения не имеют.
дак вы уже умеете выводить так как надо
0х6 0х43 0х2 0х1 0х13 0х16 0х32 0х0
Вы правда думаете, что есть какая-то разница - записать ошибку как
0х1 0х13
или как
0х01 0х13
??????
Делаю вывод - вы просто ничего не поняли про биты и потому делаете вид, что этого просто нет