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

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

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

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

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

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

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 …

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

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

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

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

Есть эта плата для встройки в корпус с 3D принтера, другая не подойдет.

Вы проверяете available > 0 сразу после переключения и отправки 0x4a. Вам еще не успели ответить, и “по хорошему” available всегда должен быть равен 0, но может зависеть от реализации библиотеки.
Нарисуйте для себя временной график взаимодействия по serial, с учетом времен на обработку и ответ, и составьте новый алгоритм.

Я пробовал разными способами (с задержкой большей или вовсе без последней), но разве условие не предполагает, что следующий этап выполнения программы не будет выполнен пока данные поступают в порт?

while (portOne.available() > 0) {
    if (portOne.available()) { read_1[0] = (portOne.read()); }
    if (portOne.available()) { read_1[1] = (portOne.read()); }
  }

Замечательно.
Предлагаете нам потратить время на решение выдуманной проблемы, а потом окажется что найденный ответ не подходит к реальной задаче и все придется начинать с начала?

Я пас

А они успевают начать поступать?