Проблемы с подключением Bluetooth OBD2 ELM327
Я сделал небольшой проект, используя Arduino UNO, 3,5-дюймовый дисплей, модуль bluetooth HC-05 и ELM327 (дешевый клон ebay). Мне удалось установить связь, прочитать данные, интерпретировать и отобразить их, но только остается одна проблема, которая продолжает беспокоить меня.
После некоторого обмена данными между Arduino и адаптером OBD2 связь просто обрывается. Я не знаю, это от HC-05 или ELM327. Насколько я смог отладить, данные от ELM327 приходят неполные. Обычно ответ от него, преобразованный в символы, выглядит как «0103141 03 02 00 >», и я использую символ «>» в программе, поскольку обмен данными завершен. Когда возникает проблема, я получаю меньше байтов от адаптера OBD и без символа «>», что-то вроде «0103141 03».
Я создал функцию, которая сбрасывает модуль HC-05 и повторно подключается, но это занимает несколько секунд, и я хочу, чтобы мои данные поступали непрерывным потоком.
Я испробовал несколько методов отладки, таких как изменение скорости передачи данных HC-05 и добавление некоторых задержек, но так и не нашел решения.
Я считаю, что проблема может заключаться в одном из этих трех:
- Дешевый клон ebay все портит.
- HC-05 не отправляет полные данные.
- Проблема с моим кодом.
Ниже я прикрепил часть кода, которая выполняет отправку команды и чтение ответа. Когда возникает проблема, она застревает в цикле while, потому что у меня нет завершающего символа ">", и я должен сломать его, вызвать другую функцию, которая восстанавливает связь, и так далее.
Итак, мой вопрос: кто-нибудь сталкивался с этой проблемой, когда ELM327 отправляет неполные данные, которые нельзя использовать?
BTSerial.println("010F1");
BTSerial.flush();
delay(10);
if (BTSerial.available()>0)
busy = true;
while(busy = true && inData != 62)
{
temp++;
if (temp>500000){
resetBT();
BTSerial.println("ATWS");
break;
}
if (BTSerial.available()>0){
inData=0;
inData = BTSerial.read();
if(inData != 32) {
buf[i] = inData;
Serial.print(char(buf[i]));
i++;
}
}
}
Serial.println();
busy=false;
inData = 0;
i = 0;
memset(buf, 0, sizeof(buf));
temp = 0;
@sundaysfantasy, 👍0
Обсуждение2 ответа
Мне удалось решить проблему. После еще нескольких тестов я обнаружил, что проблема заключалась в обмене данными через модуль Bluetooth HC-05. Я изменил его с библиотеки SoftwareSerial на основной последовательный COM-порт, и с тех пор у меня не было проблем. Я не знаю, как эта библиотека могла вызвать проблему, но это было так.
Вы можете гораздо проще связать Arduino с ELM327 в программном обеспечении с библиотекой ELMduino.h. Его можно загрузить через среду разработки Arduino IDE, и он содержит примеры.
- Bluetooth-модуль HC-05 неправильно считывает данные с моего телефона Android
- mySerial.available() возвращает 0
- Как отправлять и получать несколько целочисленных значений через последовательную связь для Arduino Micro и Bluetooth HC05?
- Как заставить Arduino печатать на Arduino IDE моего Mac через Bluetooth?
- Я получаю неправильное сообщение при отправке сообщения между двумя ардуино
- Подключение нескольких модулей HC-05 к одной компьютерной системе
- Проблемы с надежным подключением с использованием HC-05 в качестве ведущего устройства Bluetooth
- Мой модуль Bluetooth HC-05 не работает
сократите свой код до минимума ..... удалите весь цикл while и просто выгрузите полученные данные в окно терминала .... проанализируйте данные .... может быть что-то, что вы упускаете из виду ... .. опубликуйте данные в своем вопросе, если их не слишком много .... может быть, можно найти какой-то шаблон, @jsotola