Leonardo и количество доступных юартов

Всем добра.
Имеется arduino leonardo, к которой через аппаратный юарт подсоединен датчик. Для него сделан экзепляр класса Serial1. Есть обычный софтовый юарт, который через юсб гонит данные на комп. Вопрос в том, что нужен еще один софтварный юарт, который будет дублировать юсб-ний юарт. Уже запутался в библиотеках, подлкючал и AltSoftSerial и SoftSerial библиотеки, но что-то пока туплю. Причем и AltSoftSerial и SoftSerial в сишных файлах корректировал ноги для подключения. Подскажите, как правильно организовать эти три юарта? Заранее спасибо за любую информацию по этому вопросу!

TX можно расщепить и аппаратно, а два софтовых сериала не работают

Понял, спасибо. Только как это сделать? Тх, который идет на юсб, сделан аппаратно.

не знаю, может на компьютере это сделать, драйвер от eterlogic справится, но для 64-х битных систем он платный

Не очень понятно, что это значит. Но если нужны три порта, то проще взять вместо Леонардо Мегу с её двумя аппаратными портами (плюс один софтовый как сейчас).

простите, но Вы пишете ерунду. Тот порт, который подключается к USB - это аппаратный Serial, а вовсе никакой не “обычный софтовый юарт”.

Не вижу, в чем у вас проблема. У Леонардо 2 аппаратных порта. Один у вас задействован под датчик, второй подключен к USB. Если Вам нужен еще один - используйте SoftwareSerial.
Если нужно еще больше - лучше сменить плату на ту, у которых больше аппаратных портов.

1 лайк

а я бы датчик попробовал запустить на софтовом, а в хардовые гнал одинаковую информацию

1 лайк

в меге четыре аппаратных UART, про леонардо b707 все уже сказал.

1 лайк

К сожалению только один. Те ноги, которые идут к USB и вызываются как Serial - только USB. Зато Serial1 на ногах 0,1 не занят и софт сериал можно строить на любых ногах и несколько. Вот только приём можно слушать на одном софт сериале единовременно. Что бы слушать другой надо преключить на него внимание софт сериала.

1 лайк

Мне для датчика нужен хардовый, т.к. работает на 115к бод, а софтовые ниже. Тогда вопрос к уважаемому b707 - как это описать? У меня изначально так:

#include <SoftwareSerial.h>
#include <HardwareSerial.h>
....
Serial1 mydata; // это хардовый сериал
void(){
Serial1.begin(115200);
Serial.begin(9600);  // это сериал, который через юсб плюется данными в терминал

}

А вот когда пробую создать еще один сериал, ничего не происходит. Скорее всего, виноваты мои кривые ручки, поэтому и прошу совета, как это сделать? И, как я понял, чтобы с сериала, который аппаратно подключен к юсб, можно было дублировать это на новый софтварный, опустошать буфер в одном и делать проверку на нем. В-общем, туплю, помогите

Что за своенравный датчик такой?

заказчик дал, кастомный датчик, который невозможно перевести на другую скорость((( Наподобие тензодатчика

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

Тот что работает через USB работает на прерываниях USB и переключать на него прослушивание не надо !!!

1 лайк

можно попробовать на 328PB реализовать, там два UART и можно один софтовый поднять

1 лайк

Не вижу в коде, чтоб вы пробовали. Покажите, как Вы это делаете

1 лайк
#include <SoftwareSerial.h>
#include <Serial1.h>

SoftwareSerial softSerial(10, 11); // RX, TX
Serial1 mySerial(2, 3); // RX, TX

void setup() {  
 Serial.begin(9600); 
  Serial1.begin(115200); 
  softSerial.begin(9600);
}

void loop() {
  // данные от сенсора
  String data = Serial1.readString();

  // здесь добавляю в данные от сенсора свои данные (для упрощения не расписывал)
  data = data.substring(0, 10) + ", add sensor_data, " + data.substring(11);

  // передача этих данных через  hardware UART.
  Serial1.print(data);

  // то же, только на  software UART.
  softSerial.print(data);
Serial.println(data); // это для контроля в консоль
}

т.е. общая структура такая

Serial и Serial1 не надо трогать/объявлять !!!

1 лайк

Не совсем это понял… Вы имеете в виду строки 8 и 9? Если да, то как мне тогда задавать скорость. Или я не так вас понял? Имеется в виду строка 5?

Я про 2 и 5

1 лайк