Как улучшить связь Bluetooth между Arduino Uno с помощью HC-05 и Android?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как улучшить связь Bluetooth между Arduino Uno с помощью HC-05 и Android?

Сообщение Anonymous »

У меня есть arduino uno (atmega328p) и этот эскиз, который отправляет данные каждые 100 мс < /p>

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

#include 

const int BT_RX_PIN = 15;  // SoftwareSerial RX
const int BT_TX_PIN = 17;  // SoftwareSerial TX
SoftwareSerial BTserial(BT_RX_PIN, BT_TX_PIN);

const unsigned long btSendIntervalMs = 100;

unsigned long lastBtSendTime = 0;

void setup() {

BTserial.begin(9600);
}

void loop() {

unsigned long currentTime = millis();

if (currentTime - lastBtSendTime >= btSendIntervalMs) {

sendBluetoothData();
lastBtSendTime = currentTime;
}
}

void sendBluetoothData() {

int Rand1 = random(10000);
int Rand2 = random(10000);

BTserial.print('$');
BTserial.print(String(Rand1));
BTserial.print('#');
BTserial.print(String(Rand2));
BTserial.print('&');
BTserial.println(); // Newline at the end
}
< /code>
Отправка двух случайных чисел, а не много данных, верно? Я намеренно разбиваю их для каждого вызова печати вместо того, чтобы помещать все в одну строку. < /P>
На моем компьюте />[youtube]hgb8pcww7iq[/youtube]
выглядит так, как будто он отправляет довольно небольшое количество байтов [b] без [/b] loce Latency (100 мс в этом случае, как определено пользователем) 

Однако я. BufferedReader 
, Line By Line и войдите их в окно отладки. По сути, замазка - это эмуляция для Android здесь, и на замазке она работает так же, как и ожидалось.private static BluetoothAdapter btAdapter;
private static BluetoothDevice btDevice;
private static BluetoothSocket btSocket;

private static InputStream mmInputStream;
private static BufferedReader bufferedReader;

static boolean connect(BluetoothDevice device) {

try{

if(btAdapter == null) {

Toast.makeText(CurrentContext.get(), "Bluetooth Adapter not found...", Toast.LENGTH_LONG).show();
return false;
}
else if(!btAdapter.isEnabled()) {

Toast.makeText(CurrentContext.get(), "Bluetooth Adapter is not enabled...", Toast.LENGTH_LONG).show();
return false;
}

if(btSocket != null && btSocket.isConnected()) {

if(btDevice == null) {

Toast.makeText(CurrentContext.get(), "Bluetooth Device could not be found...", Toast.LENGTH_LONG).show();
return false;
}
else {

Toast.makeText(CurrentContext.get(), "Already connected to: " + btDevice.getName(), Toast.LENGTH_LONG).show();
return false;
}
}

Toast.makeText(CurrentContext.get(), "Connecting. Please wait...", Toast.LENGTH_LONG);

btDevice = device;

if(btDevice == null) {

Toast.makeText(CurrentContext.get(), "Bluetooth Device could not be found...", Toast.LENGTH_LONG).show();
return false;
}

btSocket = btDevice.createRfcommSocketToServiceRecord(CONNECTION_UUID);
if(btSocket == null) {

Toast.makeText(CurrentContext.get(), "Bluetooth Socket could not be found...", Toast.LENGTH_LONG).show();
return false;
}

btAdapter.cancelDiscovery();
btSocket.connect();

mmInputStream = new DataInputStream(btSocket.getInputStream());

bufferedReader = new BufferedReader(new InputStreamReader(mmInputStream, StandardCharsets.UTF_8)); // Ignore error
beginInputStreamListener(); // Start the thread for reading data
}catch(Exception e){

e.printStackTrace();
Toast.makeText(CurrentContext.get(), "Could not connect to: " + device.getName(), Toast.LENGTH_LONG).show();
return false;
}

Toast.makeText(CurrentContext.get(), "Connected to: " + btDevice.getName(), Toast.LENGTH_LONG).show();

return true;
}
< /code>
А вот отдельный поток, который я вызываю через begininptristerlistener < /code>, чтобы непрерывно считывать данные.
Я хочу избежать использования его в потоке пользовательского интерфейса по всем затратам. < /p>
private static void beginInputStreamListener(){

dataListenerThread = new Thread(new Runnable() {
@Override
public void run() {

dataListenerThreadActive = true; // Just a boolean I can switch to terminate the loop below

while(!Thread.currentThread().isInterrupted() && dataListenerThreadActive) {

try {

if(bufferedReader.ready()) {

String line = bufferedReader.readLine();
if(line != null) {

Log.d("RECEIVED_DATA", line);
}
}
Thread.sleep(10); // Some small delay
} catch (IOException | InterruptedException e) {

Handler mainHandler = new Handler(Looper.getMainLooper());
mainHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(CurrentContext.get(), "An unresolved problem occured...", Toast.LENGTH_LONG).show();
}
});

e.printStackTrace();
dataListenerThreadActive = false;
reset();
}
}
}
});
dataListenerThread.start();
}
< /code>
Я пробовал разные подходы с чтением байто-байтового с .READ (), .aiLable () и т. Д. И они должны работать мгновенно в любом случае, но в конце концов, так как я отправляю строку за линию, что это может решить проблему. Но это не так!
По какой-то причине, когда я подключаю приложение к своему HC-05 (устройство Arduino), оно начинает печатать довольно быстро, как в замазке (как я хочу, чтобы оно работало!), Но через 5 секунд, четко работая правильно, у него есть какая-то задержка, затем напечатает 10 строк за один ход, затем задерживается второй или два, затем напечатает 10 или n, а не в непрерывном целом, просто в целом). Это чрезвычайно разочаровывает, так как я не транслирую видео 4K через это, но посылаю абсолютно мелкие данные, которые хорошо работают на Putty. /> Arduino должен постоянно отправлять данные каждые 100 мс и не должен ждать какой-либо команды.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... -and-andro
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как улучшить связь Bluetooth между Arduino Uno с помощью HC-05 и Android?
    Anonymous » » в форуме Android
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как улучшить связь Bluetooth между Arduino Uno с помощью HC-05 и Android?
    Anonymous » » в форуме Android
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Как улучшить связь Bluetooth между Arduino Uno с помощью HC-05 и Android?
    Anonymous » » в форуме Android
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Как улучшить связь Bluetooth между Arduino Uno с помощью HC-05 и Android?
    Anonymous » » в форуме Android
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Связь Bluetooth между Arduino и PyBluez
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous

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