Я установил соединение Bluetooth между Arduino (модуль Bluetooth HC-05) и моим приложением для Android.
Каждый раз, когда Arduino отправляет сигнал (это всего лишь число 72), мое приложение для Android читает этосигнал (как байты в InputStream
) и устанавливает переменную "counter" в counter = counter - 1 .
Я создал поток, который делает это.
Проблема в том, что :
Если, например, установить счетчик на 30 и запустить поток, первые 3-4 вычитания из 30 происходят за миллисекунды (они не синхронизируются с сигналами Arduino).Но начиная с 26 и далее все отлично синхронизируется и работает, как и ожидалось.
Я пробовал другой Thread.sleep()
раз.Большее время сна усугубляет проблему (в миллисекундах происходит больше вычитаний).Меньшее время сна лучше, но все равно не решайте мою проблему.
Почему поток не синхронизирован для первых 3-6 вычитаний и синхронизирован для всех остальных?
Некоторые (возможно) полезная информация:
Есть 4 кнопки.«Connect», «Disconnect», «Start» и «Stop».
- «Connect»: установите соединение через гнездо Bluetooth с HC-05.
- «Disconnect»: Закрывает это соединение.
- «Start»: запускает поток, который прослушивает
InputStream
данные из HC-05. - «Stop»: останавливает этот поток.
Мой код (Код темы).Если кому-то нужна какая-либо другая часть кода, пожалуйста, попросите ее:
//CONNECT
arduinoSocket?.connect()
Toast.makeText(this, "Επιχειρείται σύνδεση με τον Mετρητή...", Toast.LENGTH_LONG).show()
if (!arduinoSocket!!.isConnected) {
startbutton.isEnabled = false
stopbutton.isEnabled = false
Toast.makeText(this, "Σύνδεση απέτυχε.", Toast.LENGTH_SHORT).show()
}
else {
val t = Thread(Runnable {
while(t_control == 1) {
if (arduinoSocket.inputStream.read() == 72) {
counter -= 1
runOnUiThread {
ant_met.text = counter.toString()
}
}
}
Thread.sleep(50)
})