2017-01-05 7 views
0

Я отправляю строки с arduino на Android по bluetooth, когда строки поступают в приложение, я подставляю подстроки, чтобы получить нужные мне данные. Тем не менее, строки идут неполными, они разрезаются, и поэтому я не могу получить подстроки, которые мне нужны. Например: С Arduino Я посылаю строки этого стиля:Почему я не могу получить полную строку от Arduino до Android с помощью Bluetooth?

#ecg{21304(2.41~

При отправке нескольких строк на Arduino последовательный вид монитора, как это:

#ecg{0(137~ 
#ecg{1(136~ 
#ecg{3(162~ 
#ecg{5(221~ 
#ecg{6(282~ 
#ecg{8(296~ 
#ecg{10(259~ 
#ecg{12(208~ 
#ecg{13(166~ 
#ecg{15(141~ 
#ecg{17(132~ 
#ecg{19(144~ 
#ecg{20(194~ 
#ecg{22(262~ 
#ecg{24(296~ 
#ecg{26(267~ 
#ecg{27(217~ 
#ecg{29(173~ 
#ecg{31(143~ 

Но когда они прибывают в Android это прибудет вырезать, что-то вроде этого:

I/System.out: ReadMessage: #ecg{6147 end string 
I/System.out: ReadMessage: 0(335~ 
I/System.out: #ecg{61472(335~ 
I/System.out: #ecg{61474(273~ 
I/System.out: #ecg{61476(230~ 
I/System.out: #ecg{61478(252~ 
I/System.out: #ecg{61480(307~ 
I/System.out: #ecg{61483(307~ 
I/System.out: #ecg{61485(279~ 
I/System.out: #ecg{61487(306~ 
I/System.out: #ecg{61488(347~ 
I/System.out: #ecg{61490(313~ 
I/System.out: #ecg{61492(249~ 
I/System.out: #ecg{61494(231~ 
I/System.out: #ecg{61496(277~ 
I/System.out: #ecg{61498(320~ 
I/System.out: #ecg{61500 end string 
I/System.out: ReadMessage: (290~ 
I/System.out: #ecg{61502(284~ 
I/System.out: #ecg{61504(328~ 
I/System.out: #ecg{61506(343~ 
I/System.out: #ecg{61507(283~ 
I/System.out: #ecg{61509(237~ 
I/System.out: #ecg{61511(246~ 
I/System.out: #ecg{61513(303~ 
I/System.out: #ecg{61515(311~ 
I/System.out: #ecg{61517(280~ 
I/System.out: #ecg{61519(301~ 
I/System.out: #ecg{61521(346~ 
I/System.out: #ecg{61523(321~ 
I/System.out: #ecg{61524(258~ 
I/System.out: #ecg{61527(230~ 
I/System.out: #ecg{61529(end string 
I/System.out: ReadMessage: 269~ 
I/System.out: #ecg{61531(318~ 

Обратите внимание, что с самого начала они не поступающими в полных м ost случаев.

Я хочу, чтобы получить строки, подобные этим:

I/System.out: ReadMessage: #ecg{61502(284~ end string 
I/System.out: ReadMessage: #ecg{61502(284~ end string 
I/System.out: ReadMessage: #ecg{61504(328~ end string 
I/System.out: ReadMessage: #ecg{61506(343~ end string 
I/System.out: ReadMessage: #ecg{61507(283~ end string 

И поэтому я не могу создать подстроки, что мне нужно. Знаете ли вы, почему струны вырезаны и не полны, когда я отправляю их от ардуино? Есть ли способ решить эту проблему?

Может быть, что получение неполных строк для передачи скорости, которое я использовал в коде Arduino (115200)? Я проверил загрузки программы на другой Arduino, который отправляет данные через Bluetooth в то же приложение, и они поступают хорошо, разница в том, что оно посылает данные на 9600

Это код Arduino, который я посылаю:

#include <eHealth.h> 

    String CadenaUno=""; 
    String CadenaDos=""; 
    String CadenaTres=""; 
    String CadenaFinal=""; 

// The setup routine runs once when you press reset: 
void setup() { 
    Serial.flush(); 
    Serial.begin(115200); 
// Serial.begin(9600); //No muestra nada en android studio a esta velocidad 
} 
// The loop routine runs over and over again forever: 
void loop() { 
     long currentMillis = millis(); 
     float floatecgValue = eHealth.getECG(); 
     int valueECG = floatecgValue*100; 
        CadenaUno="#ecg{"; 
        CadenaDos="("; 
        CadenaTres="~"; 
        CadenaFinal=CadenaUno+currentMillis+CadenaDos+valueECG+CadenaTres;      
        Serial.println(CadenaFinal);  
        delay(1); 
} 

Это та часть, где я проверить данные, прибывающие из Arduino по Bluetooth

 while (mState == STATE_CONNECTED) { 
      try { 
       StringBuilder recDataString = new StringBuilder(); 
       String paquete = ""; 

       String outputText=""; 
       byte[] buffer = new byte[256]; 
       bytes = mmInStream.read(buffer); 
       mDataParse.Add(buffer, bytes); 
       String readMessage = new String(buffer, 0, bytes); 
       System.out.println("ReadMessage: "+readMessage+" end string"); 

Пожалуйста Guide.

ответ

0

попробовать это:

String prev = null; 
while (mState == STATE_CONNECTED) { 
    try { 
     StringBuilder recDataString = new StringBuilder(); 
     String paquete = ""; 

     String outputText = ""; 
     byte[] buffer = new byte[256]; 
     bytes = mmInStream.read(buffer); 
     mDataParse.Add(buffer, bytes); 
     String readMessage = new String(buffer, 0, bytes); 
     //Split by new line symbol 
     String[] msgs = readMesage.split("\n"); 
     int msgsCount = msgs.length; 
     //Check is we have a prev not completed message? 
     if (msgsCount > 0) { 
      if (prev != null) 
       msgs[0] = prev + msgs[0]; //add it to first message 

      //Check is last message completed? 
      if (readMessage.endsWith("\n")) 
       prev = null; 
      else { 
       prev = msgs[msgsCount - 1]; //Set last message to prev and remove it from output 
       msgsCount--; 
      } 

      for (int i = 0; i < msgsCount; i++) { 
       System.out.println("ReadMessage: " + msgs[i] + " end string"); 
      } 
     } 
    } 
Смежные вопросы