Arduino: не получает полные данные по Bluetooth, когда включена последовательная печать - PullRequest
0 голосов
/ 13 июля 2020

Я написал приложение android, которое отправляет ИК-коды различных устройств на Arduino через Bluetooth (HC05). Ниже вы можете найти мой код android и данные, которые я пытаюсь отправить на arduino.

 String msg ="ir/11/550,450,500,1450,550,450,500,500,450,500,500,500,500,500,500,450,550,450,550,1400,550,450,550,400,550,1450,550,400,550,450,550,1400,550,1450,500,1450,500,1500,450,1500,500,500,500,450,550,450,550,450,500,450,550,450,550,400,550,450,550,450,550,400,550,450,550,450,550,400,550,450,500,500,500,500,450,500,550,450,550,450,500,450,550,450,550,450,500,450,550,450,550,450,500,450,550,450,550,400,550,450,550,450,/101\r";
        
        outStream.write(msg.getBytes());
        outStream.flush();
        msg="ir/-1/900,50,100,1000,850,50,50,850,50,100,1050,450,600,2850,1050,50,50,900,500,250,250,1000,250,250,250,200,100,900,250,250,450,950,100,200,700,50,100,850,250,250,450,1100,650,250,150,800,50,200,250,250,250,/52\r";      
        outStream.write(msg.getBytes());
        outStream.flush();

Я могу правильно получить данные от Arduino Если я прокомментирую печать Serail после обработки конца каждый вход из BLE. Но когда я включаю серийную печать, я получаю только частичные данные в Ardunio. Проблема в основном связана с Arduino. Ниже вы можете найти мой код Arduino

#include <SoftwareSerial.h>

#define arduino_rx_pin 6  //  arduino_rx_pin 10 ------->   Bluetooth_tx_pin
#define arduino_tx_pin 5  //  arduino_tx_pin 8 ------->   Bluetooth_rx_pin
SoftwareSerial mySerial(arduino_rx_pin, arduino_tx_pin); // RX, TX
char  B, buff[600]; // character and character string buffer
int  buffCount = 0; // how many characters in the buffer
int  buffCharLimit = 600; // maximum characters allowed

void setup() {
  // put your setup code here, to run once:
  mySerial.begin(9600);         //Sets the data rate in bits per second (baud) for mySerial data transmission
  Serial.begin(9600);

}

void loop() {
  // put your main code here, to run repeatedly:
  if ( mySerial.available() )
  {

     B = mySerial.read();
        Serial.print(B);
        if ((B == '\r') || (B == '\n'))  { // EOL detected
            end_line_and_print();
        }
        else { 
             buff[buffCount++] = B; // packing a byte into the MUMBO JUMBO buffer
           if (buffCount >= buffCharLimit) { // prevent buffer overflow
              end_line_and_print();
            }
    
        }
    
  }
 
}
 void end_line_and_print(void)  { // note that if you want to DO anything with your buffered input
  // this is the place where I print it out and say goodbye data
  buff[buffCount++] = 0; // C strings end with a terminating zero.
  Serial.println();
  Serial.println(buff);// If i enable this line I am only gettign partial data from BLE. 
  buffCount = 0; // start the next line
  memset(buff, 0, sizeof(buff));
 
}

Я не уверен, как исправить эту проблему с помощью моего кода. Подозреваемый - Serial.println (buff) в функции end_line_and_print (void). если я прокомментирую эту строку, она работает должным образом. Но мне нужно понять, почему это происходит и почему мой Arduino не обрабатывает весь вывод. Результат программы с Serial.println (buff) без комментариев

ir/11/550,450,500,1450,550,450,500,500,450,500,500,500,500,500,500,450,550,450,550,1400,550,450,550,400,550,1450,550,400,550,450,550,1400,550,1450,500,1450,500,1500,450,1500,500,500,500,450,550,450,550,450,500,450,550,450,550,400,550,450,550,450,550,400,550,450,550,450,550,400,550,450,500,500,500,500,450,500,550,450,550,450,500,450,550,450,550,450,500,450,550,450,550,450,500,450,550,450,550,400,550,450,550,450,/101
ir/11/550,450,500,1450,550,450,500,500,450,500,500,500,500,500,500,450,550,450,550,1400,550,450,550,400,550,1450,550,400,550,450,550,1400,550,1450,500,1450,500,1500,450,1500,500,500,500,450,550,450,550,450,500,450,550,450,550,400,550,450,550,450,550,400,550,450,550,450,550,400,550,450,500,500,500,500,450,500,550,450,550,450,500,450,550,450,550,450,500,450,550,450,550,450,500,450,550,450,550,400,550,450,550,450,/101
ir/-1/900,50,100,1000,850,50,50,850,50,100,1050,450,600,2850,10

Вы можете ясно видеть, что второй ввод получен только частично. Я не уверен, что приводит к этой проблеме. Я проверил свободную память, она была доступна.

Вывод программы с Serial.println (buff) прокомментирован

ir/11/550,450,500,1450,550,450,500,500,450,500,500,500,500,500,500,450,550,450,550,1400,550,450,550,400,550,1450,550,400,550,450,550,1400,550,1450,500,1450,500,1500,450,1500,500,500,500,450,550,450,550,450,500,450,550,450,550,400,550,450,550,450,550,400,550,450,550,450,550,400,550,450,500,500,500,500,450,500,550,450,550,450,500,450,550,450,550,450,500,450,550,450,550,450,500,450,550,450,550,400,550,450,550,450,/101
ir/-1/900,50,100,1000,850,50,50,850,50,100,1050,450,600,2850,1050,50,50,900,500,250,250,1000,250,250,250,200,100,900,250,250,450,950,100,200,700,50,100,850,250,250,450,1100,650,250,150,800,50,200,250,250,250,/52
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...