// Подключаем библиотеку программного UART
#include <SoftwareSerial.h>
int num=1;
// Определяем вывод RX1
#define RX1 8
// Определяем вывод TX1
#define TX1 9

// Определяем вывод RX2
#define RX2 6
// Определяем вывод TX2
#define TX2 7

// Определяем вывод RX3
#define RX3 3
// Определяем вывод TX3
#define TX3 4


// Создаём объект программного UART
SoftwareSerial mySerial(RX1, TX1);

// Создаём объект программного UART
SoftwareSerial mySerial1(RX2, TX2);

// Создаём объект программного UART
SoftwareSerial mySerial2(RX3, TX3);

void setup(){
  Serial.begin(9600); // открываем последовательный порт 
  //для мониторинга действий в программе
   // ждём, пока не откроется монитор последовательного порта
  // для того, чтобы отследить все события в программе
  while (!Serial) {
  }
   // открываем Serial-соединение cо вторым компьютером
  mySerial.begin(9600);
  // открываем Serial-соединение cо тертьим компьютером
  mySerial1.begin(9600);
  // открываем Serial-соединение cо четвертым компьютером
  mySerial2.begin(9600);
}

void loop(){
  // считываем данные с компьютера и осылаем их всем компьютерам
  serialPC1read();
  // считываем данные с компьютера отправителя и осылаем их компьютеру
  serialPC2read();
  
}

void serialPC1read(){
  if (Serial.available() > 0) {
    // если приходят данные на отправку
    while (Serial.available() > 0) {
      // отправляем данные всем компьютерам
      mySerial.write("num" ,Serial.read());
      mySerial1.write("num" ,Serial.read());
      mySerial2.write("нормер,",Serial.read());
    }
  }
}

void serialPC2read(){
    if ((mySerial.available() > 0)||(mySerial1.available() > 0)||(mySerial2.available() > 0)) {
      // если приходят данные c какогото компьютера
      while ((mySerial.available() > 0)||(mySerial1.available() > 0)||(mySerial2.available() > 0)) {
        // отправляем их компьютеру
        Serial.write(mySerial.read());
        Serial.write(mySerial1.read());
        Serial.write(mySerial2.read());
    }
  }
}
