Невозможно получить данные при использовании нескольких SoftSerial на Arduino Nano.
Я пытаюсь использовать несколько (четыре) программных последовательных порта для связи с различным периферийным оборудованием. Однако я не могу получать данные через SoftSerial при использовании более одного последовательного порта программного обеспечения.
Я протестировал каждую пару контактов, определяя ее для первого порта. Все пары работают как положено. Кроме того, меня интересует только мостовое соединение/переключение последовательного порта программного обеспечения с последовательным портом оборудования (в целях отладки).
Мой код выглядит следующим образом:
#include <stdint.h>
#include <SoftwareSerial.h>
#define SOFT_SERIAL_A_RX 5
#define SOFT_SERIAL_A_TX 6
#define SOFT_SERIAL_B_RX 7
#define SOFT_SERIAL_B_TX 8
#define SOFT_SERIAL_C_RX 9
#define SOFT_SERIAL_C_TX 10
#define SOFT_SERIAL_D_RX 11
#define SOFT_SERIAL_D_TX 12
#define SERIAL_BAUD_RATE 9600
SoftwareSerial softwareSerials[] = {
SoftwareSerial(SOFT_SERIAL_A_RX, SOFT_SERIAL_A_TX),
// Unable to receive data on first software serial when un-commenting following lines.
// All pins are working when declaring each pair for first software serial (tested pins by doing this)
// SoftwareSerial(SOFT_SERIAL_B_RX, SOFT_SERIAL_B_TX),
// SoftwareSerial(SOFT_SERIAL_C_RX, SOFT_SERIAL_C_TX),
// SoftwareSerial(SOFT_SERIAL_D_RX, SOFT_SERIAL_D_TX)
};
const uint8_t numberSoftwareSerials = sizeof(softwareSerials)/sizeof(*softwareSerials);
void initHardwareSerial()
{
Serial.begin(SERIAL_BAUD_RATE);
}
void initSoftwareSerials()
{
for(uint8_t i=0; i<numberSoftwareSerials; i++) {
softwareSerials[i].begin(SERIAL_BAUD_RATE);
}
}
void setup()
{
initHardwareSerial();
initSoftwareSerials();
}
void loop()
{
// Only one software serial can be used (receive/transmit) at once.
// So just using a single software serial port (first element from array)
if (softwareSerials[0].available()) {
Serial.write(softwareSerials[0].read());
}
if (Serial.available()) {
softwareSerials[0].write(Serial.read());
}
}
Как я могу сузить проблему невозможности получения при определении нескольких последовательных портов? Если подходящего решения нет, я мог бы переключиться на Arduino Mega с четырьмя аппаратными портами (в этом случае потребуется только один дополнительный последовательный программный порт), но Arduino Nano настоятельно предпочтительнее из-за меньшего размера.
@albert, 👍0
1 ответ
Лучший ответ:
Вы не можете получать данные более чем через один порт SoftwareSerial. Печально, но это так.
Вы можете вручную выбрать, какой порт вы прослушиваете, в любое время с помощью функции softwareSerials[x].listen()
, но одновременно прослушивать может только один порт.
SoftwareSerial — это в лучшем случае выдумка, и его следует использовать только для одного порта, и то только в том случае, если вам действительно необходимо.
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Arduino считывает состояние подключения устройства hc-05
- Проблема последовательной связи с общей землей SIM800L
- Multiple Wire.write() не работает для Arduino Nano I2C
- Как связаться с GPS SIM900a без serial monitor
- Модули HC-12 перестали принимать, не могу понять почему
- Откуда берутся эти ненужные символы (из serial)?
- `time.sleep` в скрипте python чтение последовательного вывода вызывает неустойчивое поведение
Спасибо за эту подсказку. После некоторых поисков в Интернете я наконец нашел ссылку на документацию, где используется '.listen()': https://www.arduino.cc/en/Tutorial/TwoPortReceive, @albert