SoftwareSerial работа с двумя портами

itehno
Offline
Зарегистрирован: 18.04.2015

Добрый день.

Подскажите, как переключиться между чтением двух виртуальных портов если данные поступают непрерывно?

#include <SoftwareSerial.h>
SoftwareSerial PortOne(12,13);
SoftwareSerial PortTwo(8,9);
uint32_t COM_One[3] = {};
uint32_t COM_Two[3] = {};
uint32_t PRINT_One = 0;    
uint32_t PRINT_Two = 0;                            


void setup() {
  Serial.begin(9600);
  PortOne.begin(9600);
  PortTwo.begin(9600);
}

void loop() {
  rs232_One();  
  rs232_Two();
}

void rs232_One(){
  PortOne.listen()
  PortOne.write(0x84);
  if (PortOne.available()) {COM_One[0] = (PortOne.read());}
  if (PortOne.available()) {COM_One[1] = (PortOne.read());}
  if (PortOne.available()) {COM_One[2] = (PortOne.read());}    
  PRINT_One = (COM_One[2])+(COM_One[1]+(COM_One[0]);           
  Serial.print("PRINT_One: "); Serial.println(PRINT_One);          
}

void rs232_Two(){
  PortTwo.listen()
  PortTwo.write(0x84);
  if (PortTwo.available()) {COM_Two[0] = (PortTwo.read());}
  if (PortTwo.available()) {COM_Two[1] = (PortTwo.read());}
  if (PortTwo.available()) {COM_Two[2] = (PortTwo.read());}    
  PRINT_Two = (COM_Two[2])+(COM_Two[1]+(COM_Two[0]);            
  Serial.print("PRINT_Two: "); Serial.println(PRINT_Two);          
}

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Одной жопой на двух стульях ?

itehno
Offline
Зарегистрирован: 18.04.2015

Да, как кратковременно прекратить прием? Если часть данных потеряется, то ничего страшного.

SergeiL
SergeiL аватар
Offline
Зарегистрирован: 05.11.2018

itehno пишет:

Добрый день.

Подскажите, как переключиться между чтением двух виртуальных портов если данные поступают непрерывно?

Взять плату с двумя аппаратными последовательными портами. 

nik182
Offline
Зарегистрирован: 04.05.2015

Отправлять можно. Принимать только на один одномоментно. Что бы принимать на второй надо переключить специальной командой. После переключения на второй первый перестаёт принимать. Ну или самому написать приём через прерывания. 

itehno
Offline
Зарегистрирован: 18.04.2015

nik182 пишет:

Отправлять можно. Принимать только на один одномоментно. Что бы принимать на второй надо переключить специальной командой. После переключения на второй первый перестаёт принимать. Ну или самому написать приём через прерывания. 

Вот в том-то и загвоздка, что не понимаю, как реализовать. В описании библиотеки ничего подобного не нашел.

b707
Offline
Зарегистрирован: 26.05.2017

itehno, какая плата? если Мега - на ней Софтсериал не нужен, если Уно-Нано, то использование 13 пина не очень хорошая идея

Ну и конечно, вся затея с двумя софтсериалами - это треш

itehno
Offline
Зарегистрирован: 18.04.2015

b707 пишет:

itehno, какая плата? если Мега - на ней Софтсериал не нужен, если Уно-Нано, то использование 13 пина не очень хорошая идея

Ну и конечно, вся затея с двумя софтсериалами - это треш

UNO

Все остальные порты заняты и переназначить не получится

b707
Offline
Зарегистрирован: 26.05.2017

itehno пишет:

UNO

Все остальные порты заняты и переназначить не получится

по всему  пора переходить на Мегу

itehno
Offline
Зарегистрирован: 18.04.2015

b707 пишет:

itehno пишет:

UNO

Все остальные порты заняты и переназначить не получится

по всему  пора переходить на Мегу

Согласен, но что имеем