Не корректно работает SoftwareSerial

Добрый день.
Библиотека SoftwareSerial позволяет подключить два устройства и работать с ними по очереди при помощи listen.
Каждое устройство на своих пинах корректно передает данные, но когда я пытаюсь принять их по очереди, данные не принимаются.

Вот пример кода:

#include <SoftwareSerial.h>
SoftwareSerial portOne(4, 7);
uint32_t byte_1 = 0;
uint32_t read_1[2] = {};

SoftwareSerial portTwo(2, 8);
uint32_t byte_2 = 0;
uint32_t read_2[2] = {};

void setup() {
  Serial.begin(9600);
  portOne.begin(9600);
  portTwo.begin(9600);
}

void loop() {
  one();
  delay(100);
  two();
  delay(100);
}

void one(){
  portOne.listen();
  portOne.write(0x4a);
  while (portOne.available() > 0) {
    if (portOne.available()) { read_1[0] = (portOne.read()); }
    if (portOne.available()) { read_1[1] = (portOne.read()); }
  }

  Serial.print("read_1[0]: "); Serial.println(read_1[0]);
  Serial.print("read_1[1]: "); Serial.println(read_1[1]);
}

void two(){
  portTwo.listen();
  portTwo.write(0x4c);
  while (portTwo.available() > 0) {
    if (portTwo.available()) {read_2[0] = (portTwo.read());}
    if (portTwo.available()) {read_2[1] = (portTwo.read());}
  }

  Serial.print("read_2[0]: "); Serial.println(read_2[0]);
  Serial.print("read_2[1]: "); Serial.println(read_2[1]);;
}

Читать научитесь !!!

Передача и приём - это разные виды деятельности и зоны ответственности. Таймлайн передачи зависит от МК, а приёма - зачастую нет.

Так у него чтение не работает - он же так и написал. Только писать может.

Я про текст в окне ввода сообщения на форуме !!!

С тобой не пошутишь.

Тег вставки куска кода в форме ввода сообщений не нашёл - можете ткнуть “новичка”.
Я понимаю, что тему для шуток при желании можно найти по любому поводу, но давайте все же по существу.

Нажмите кнопку “Ответить”, сделайте скриншот и вставьте его сюда - покажем куда смотреть.

Теги на шестеренке !

Это сознательно или ошибка ?

https://forum.arduino.ru/t/pravilno-prinyat-invertirovannye-dannye-v-port/
Там нашёл, куда вставить, тут не нашёл…

Это я ошибся при максимальном сжатии кода для примера

Коллеги, тему поправил, есть у кого-нибудь соображения?
Код я максимально упростил и протестировал. Каждое устройство корректно работает на своих пинах, но как только я добавляю portTwo.listen();, то данные с первого порта равны 0.

А вы уверены что пока вы слушаете/принимаете с порт2, данные не улетают в никуда на порт1 - их же никто не принимает и они пропадают …

Да, данные “приходят” только при выполнении portOne.write(0x4a); или portTwo.write(0x4c);

Проблема в том, что я даже делал так:

void loop() {
  one();
  delay(100);
  two();
  delay(100);
}

void one(){
  portOne.listen();
  portOne.write(0x4a);
  while (portOne.available() > 0) {
    if (portOne.available()) { read_1[0] = (portOne.read()); }
    if (portOne.available()) { read_1[1] = (portOne.read()); }
  }

  Serial.print("read_1[0]: "); Serial.println(read_1[0]);
  Serial.print("read_1[1]: "); Serial.println(read_1[1]);
}

void two(){
  portTwo.listen();
}

… и данные с первого устройства переставали приходить

Возьмите чип по задаче - в данном случае MEGA …

К сожалению это не возможно

вот этот код мне нравится, как вы думаете что он напечатает?

почему? Есть и маленькие платы с большим количеством УАРТ портов.
То время, которое вы потратите на отладку глючного СофтСериала, однозначно дороже смены платы.

Это минимальный пример для обсуждения, все работает по другому.