Разделенное ответное сообщение «BluetoothChat»-to-ELM327Android

Форум для тех, кто программирует под Android
Anonymous
Разделенное ответное сообщение «BluetoothChat»-to-ELM327

Сообщение Anonymous »

Я пытаюсь установить связь с Bluetooth-ключом ELM327 OBD-II, используя пример Android BluetoothChat. Я могу без проблем подключиться к устройству, и сообщения из BluetoothChat на устройство OBD-II, похоже, передаются и принимаются устройством правильно.
Однако ответные сообщения от устройства OBD-II часто разбиваются на несколько сообщений, зашифровываются или отсутствуют символы.
Например, для получения полного ожидаемого значения требуется три попытки команды ati ответ:

Код: Выделить всё

Me: ati OBDII: a OBDII: 327 OBDII: 327 OBDII: 327 v1.5 > Me: ati OBDII: 1 OBDII: 1 OBDII: 1.5 >v OBDII: 1.5 > Me: ati OBDII: ELM327 v1.5 >
Аналогично, отправка 010c должна вызвать однострочный ответ, содержащий три шестнадцатеричные пары. Вместо этого я обычно (но не всегда) получаю такие результаты:

Код: Выделить всё

Me: 010c OBDII: OBDII: 4 OBDII: 3C OBDII: 3 OBDII: 3C C OBDII: 3C OBDII: OBDII: OBDII: >
Я пробовал несколько разных скоростей передачи данных и разные протоколы OBD-II, но изменения настроек по умолчанию, похоже, только усугубляют ситуацию. Возникла ли проблема с обработкой моего ответного сообщения? Почему ответное сообщение разделяется? Bluetooth-ключ правильно работает с доступными приложениями, такими как Torque, поэтому я не думаю, что устройство неисправно.
Код, который я использую, почти идентичен проекту BluetoothChat (источник здесь). Я только изменил UUID для своего устройства Bluetooth и добавил возврат каретки к исходящему сообщению (согласно этому вопросу о переполнении стека).
Изменение 1 (в файле BluetoothChatService.java):

Код: Выделить всё

// Unique UUID for this application
private static final UUID MY_UUID_SECURE =

//UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66");
UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

private static final UUID MY_UUID_INSECURE =

//UUID.fromString("8ce255c0-200a-11e0-ac64-0800200c9a66");
UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
Изменение 2 (в файле BluetoothChat.java):

Код: Выделить всё

    // The action listener for the EditText widget, to listen for the return key
private TextView.OnEditorActionListener mWriteListener =
new TextView.OnEditorActionListener() {
public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
// If the action is a key-up event on the return key, send the message
if (actionId == EditorInfo.IME_NULL && event.getAction() == KeyEvent.ACTION_UP) {
String message = view.getText().toString();
//sendMessage(message);
sendMessage(message + "\r");
}
if(D)
Log.i(TAG, "END onEditorAction");
return true;
}
};
Справочное руководство по ELM327

Подробнее здесь: https://stackoverflow.com/questions/253 ... se-message

Вернуться в «Android»