Получение нескольких символов одновременно с Software Serial
У меня есть Arduino Uno R3 и Bluetooth Mate. При связывании Mate с Arduino Hardware Serial (контакт 0,1) я могу отправить сразу несколько символов со своего подключенного устройства, но когда я пытаюсь сделать то же самое с Software Serial (например, с контактом 4,2), я получаю только первый персонаж и остальные символы перепутаны.
Мой код:
#include <SoftwareSerial.h>
int bluetoothTx = 4;
int bluetoothRx = 2;
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
void setup()
{
Serial.begin(115200);
bluetooth.begin(115200);
}
void loop()
{
if(bluetooth.available())
{
Serial.print((char)bluetooth.read());
}
}
Например, если я отправляю это chars: abcd с моего устройства Android, я получаю это в последовательном мониторе: a ±, ö
Этот код, который использует Hardware Serial (я связываю свой Bluetooth с контактами 0 и 1), работает просто отлично:
void setup()
{
Serial.begin(115200);
}
void loop()
{
if(Serial.available())
{
Serial.print((char)Serial.read());
}
}
Я даже пытался изменить скорость передачи, но это не помогло
Если я отправляю символы один за другим, это работает нормально, но я бы хотел иметь возможность отправлять их в виде строки.
2 ответа
Как отметил @hyperflexed в комментариях, это проблема, связанная с скоростью передачи данных. Я должен был принять скорость передачи данных 9600, чтобы она заработала.
Это код, который работал:
#include "SoftwareSerial.h";
int bluetoothTx = 4;
int bluetoothRx = 2;
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
void setup()
{
Serial.begin(9600);
delay(500);
bluetooth.begin(115200);
delay(500);
bluetooth.print("$$$");
delay(500);
bluetooth.println("U,9600,N");
delay(500);
bluetooth.begin(9600);
}
void loop()
{
if(bluetooth.available()) {
char toSend = (char)bluetooth.read();
Serial.print(toSend);
}
if(Serial.available()) {
char toSend = (char)Serial.read();
bluetooth.print(toSend);
}
}
Для изменения скорости передачи данных мне пришлось установить несколько больших задержек, чтобы убедиться, что команды выполняются, иначе это не сработает.
Вы можете попытаться буферизовать строку перед печатью.
Посмотрите на следующий ответ: Преобразовать serial.read() в пригодную для использования строку, используя Arduino?