Я пытаюсь установить связь между Arduino UNO и моим Android-смартфоном, используя USB Host API для Android.Пока все хорошо.Я посылаю тестовую строку «Try data» из моего Arduino через функцию Serial.print () каждую секунду.Скорость передачи данных установлена на 9600 для обоих устройств.Android-смартфон выступает в роли хоста.
Некоторые учебные пособия, которые я использовал:
http://android.serverbox.ch/?p=549
http://android -er.blogspot.in / 2014/09 / send-data-from-android-to-arduino-uno.html
вместе с документацией по хосту android usb.Я пробовал physoid и другую библиотеку от mik3y, но они не работают.Устройство не открывается в обоих случаях.
Я использую поток, через который я получаю данные от Arduino (весь код ниже находится в onCreate ()
val reader = object : Thread(){
override fun run() {
var buf = ByteArray(endpointIn.maxPacketSize)
connection.bulkTransfer(endpointIn, buf, buf.size, 0)
tv.text = String(buf)//tv is the id of a textview
}
}
reader.start()
Проблема в том, чтоиз тестовой строки принимается только буква T. Если вместо этого я перемещаю объявление buf из класса потока, читаются только 4 символа. Я не могу понять, почему читаются только ограниченные символы. Если я вместопоследние 2 строки кода метода run в бесконечном цикле while, приложение вылетает (не в состоянии понять, почему). Я знаю, что потоки, кажется, работают одновременно, но на самом деле это основной поток, работающий в течение некоторого времени, а затемЧитатель, оба они не работают одновременно. Это очень быстрый переход, и поэтому они выглядят так, как будто они работают одновременно. Может ли это быть причиной того, что некоторая информация теряется?
Пожалуйста, помогите в написании кода для читательской ветки или есть ли лучший способ сделать это?
Спасибо, яn заранее