Обработка данных по Bluetooth
Всем привет столкнулся с проблемой обработки данных на Android. Я отправляю строку данных, разделенную специальным символом", " от Arduino при проверке на ПК все в порядке, ПК получает отправленные данные, но когда я пытаюсь реализовать это в Android, это не работает.
Код Arduino:
polojeniye = serv1.CheckPosition();
Serial.print("drive1=");
Serial.print(polojeniye);
Serial.print(",");
polojeniye = serv2.CheckPosition();
Serial.print("drive2=");
Serial.print(polojeniye);
Serial.print(",");
polojeniye = serv3.CheckPosition();
Serial.print("drive3=");
Serial.print(polojeniye);
Serial.print(",");
polojeniye = serv4.CheckPosition();
Serial.print("drive4=");
Serial.print(polojeniye);
Serial.print(",");
polojeniye = serv5.CheckPosition();
Serial.print("drive5=");
Serial.print(polojeniye);
Serial.print(",");
Код для Android:
h = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case RECIEVE_MESSAGE: // если приняли сообщение в Handler
byte[] readBuf = (byte[]) msg.obj;
String strIncom = new String(readBuf, 0, msg.arg1);
sb.append(strIncom); // формируем строку
int endOfLineIndex = sb.indexOf("\r\n"); // определяем символы конца строки
if (endOfLineIndex > 0) { // если встречаем конец строки,
String sbprint = sb.substring(0, endOfLineIndex); // то извлекаем строку
sb.delete(0, sb.length()); // и очищаем sb
String[] result = sbprint.split("\\,");
for (int i=0; i<result.length; i++){
String[] command = result[i].split("=");
if(command[0].compareTo("drive1")==0) {
t1.setText(command[1]); // обновляем TextView
}
if(command[0].compareTo("drive2")==0) {
t2.setText(command[1]); // обновляем TextView
}
if(command[0].compareTo("drive3")==0) {
t3.setText(command[1]); // обновляем TextView
}
if(command[0].compareTo("drive4")==0) {
t4.setText(command[1]); // обновляем TextView
}
if(command[0].compareTo("drive5")==0) {
t5.setText(command[1]); // обновляем TextView
}
}
//Toast.makeText(getBaseContext(), "Ответ от Arduino: " + sbprint, Toast.LENGTH_SHORT).show();
set.setEnabled(true);
reset.setEnabled(true);
menu.setEnabled(true);
}
//Log.d(TAG, "...Строка:"+ sb.toString() + "Байт:" + msg.arg1 + "...");
break;
}
};
};
Ответы (1 шт):
Автор решения: Михаил Потемкин
→ Ссылка
Пробовал отправлять команду в микроконтроллер в логах ответа нет
h = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case RECIEVE_MESSAGE: // если приняли сообщение в Handler
byte[] readBuf = (byte[]) msg.obj;
String strIncom = new String(readBuf, 0, msg.arg1);
sb.append(strIncom); // формируем строку
int endOfLineIndex = sb.indexOf("\r\n"); // определяем символы конца строки
if (endOfLineIndex > 0) { // если встречаем конец строки,
String sbprint = sb.substring(0, endOfLineIndex); // то извлекаем строку
sb.delete(0, sb.length()); // и очищаем sb
Log.d(TAG, "...Строка:"+ sb.toString() + "Байт:" + msg.arg1 + "...");
String[] result = sbprint.split("\\,");
for (int i=0; i<result.length; i++){
String[] command = result[i].split("=");
if(command[0].compareTo("drive1")==0) {
t1.setText(command[1]); // обновляем TextView
}
if(command[0].compareTo("drive2")==0) {
t2.setText(command[1]); // обновляем TextView
}
if(command[0].compareTo("drive3")==0) {
t3.setText(command[1]); // обновляем TextView
}
if(command[0].compareTo("drive4")==0) {
t4.setText(command[1]); // обновляем TextView
}
if(command[0].compareTo("drive5")==0) {
t5.setText(command[1]); // обновляем TextView
}
}
Toast.makeText(getBaseContext(), "Ответ от Arduino: " + sbprint, Toast.LENGTH_SHORT).show();
set.setEnabled(true);
reset.setEnabled(true);
menu.setEnabled(true);
}
Log.d(TAG, "...Строка:"+ sb.toString() + "Байт:" + msg.arg1 + "...");
break;
}
};
};
reset.setOnClickListener(new View.OnClickListener() {
public void onClick(View v)
{
Log.d(TAG, "Кнопка нажата");
angle1.setText("");
angle2.setText("");
angle3.setText("");
angle4.setText("");
angle5.setText("");
mConnectedThread.write("ATR\r\n");
}
});
Вижу только уходящие логи