Я написал приложение 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