Проблема с SoftwareSerial

linnenemy
Offline
Зарегистрирован: 11.04.2018

Доброго дня коллеги!

Копаясь в своем неработающем коде с датчиком отпечатка пальца локализовал проблему в неработающей библиотеке SoftwareSerial. Загрузил в Arduino Nano вот такой простой код.

 
#include <SoftwareSerial.h>
 
SoftwareSerial mySerial(2, 3);
 
void setup()  
{
  Serial.begin(57600);
 }
 
 
  Serial.println("Test string1");
 
  mySerial.begin(4800);
  mySerial.println("Test string2");
}
 
void loop()
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}

В монитор порта выводится только Test string1. Пробовал меня скорость, уменьшать до 2400, поднимать до 115200, выравнивал скорости обмена. Ничего не происходит. Уже размышлял по поводу снести библиотеку (не получилось), переустанавливал Arduino IDE, искал замену этой библиотеке (кроме NewSoftSerial ничего толком и не нашел), менял платы - ESP01, NodeMCU, Wemos пробовал. Подскажите куда еще глянуть/копнуть?

 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Пины 2 и 3 к чему подключены и где вы хотите строку увидеть?

linnenemy
Offline
Зарегистрирован: 11.04.2018

2 и 3 на Arduino Nano. Строку я хочу увидеть в том же самом мониторе хардверного последовательного порта.

sadman41
Offline
Зарегистрирован: 19.10.2016

Надеюсь, что на другую Arduino Nano, а не на ту же самую...

linnenemy
Offline
Зарегистрирован: 11.04.2018

На туже самую. Вроде как код именно это и предполагает: вывод строки в аппаратный порт, программный порт читает, что послано в аппаратный, пишет свое, аппаратный читает что в программном и так далее. Я именно так сей код понял.

MaksVV
Offline
Зарегистрирован: 06.08.2015

linnenemy пишет:

На туже самую. Вроде как код именно это и предполагает: вывод строки в аппаратный порт, программный порт читает, что послано в аппаратный, пишет свое, аппаратный читает что в программном и так далее. Я именно так сей код понял.

неправильно поняли. Этот код предполагает посмотреть в мониторе порта (отладка), что творится на софтсериале. Также можно послать чтонибудь на софт сериал через отладку (монитор порта). При этом естественно Serial (пины 0 и 1) ни с чем НЕ должен быть соединён (он ведь уже соединён по юсб с компом). А софт сериал подключаете к нужному вам устройству, обмен с которым вы и хотите посмотреть в мониторе порта. 

linnenemy
Offline
Зарегистрирован: 11.04.2018

По сути если 2 и 3 пин закорочу, я получу все то. что отправляю, верно? Ничего не приходит.

renoshnik
Offline
Зарегистрирован: 11.04.2013

linnenemy пишет:

По сути если 2 и 3 пин закорочу, я получу все то. что отправляю, верно? Ничего не приходит.

куда и как собираетесь отправлять ???

sadman41
Offline
Зарегистрирован: 19.10.2016

linnenemy пишет:

По сути если 2 и 3 пин закорочу, я получу все то. что отправляю, верно? Ничего не приходит.

Ничего не получите. Возьмите две ардуины, соедините софтсериалом, тогда всё должно работать.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Для нормальной проверки softserial вам нужна или вторая ардуина или USB->Serial конвертер.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

linnenemy пишет:

По сути если 2 и 3 пин закорочу, я получу все то. что отправляю, верно?

Нет, не верно. Софт сериал, в отличии от хард, не умеет одновременно принимать и отправлять. Прием происходит по прерыванию "изменение состояния входного пина", и обрабатывается процессором, как и передача. Процессор, как легко догадаться, - ОДИН! ;)))

Нужна другая ардуина или USB-UART, даже дешманский USB-COM из соседнего компутерного магазина, хоть и дорого обойдется, но подойдет - он на том же CH341 чипе сделан.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Я вообще в крайних случаях в uart пихаю Bluetooth адаптер и на мобильнике смотрю что там шлется.

Подключите к 2 и 3 пину и наблюдайте свои данные.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А что, никто не заметил 8-ую строку? Или это я что-то туплю под вечер? По мне так этот код не может не то что что-то выводить, но даже в принципе компилироваться.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Мило! А я в код даже не посмотрел.

Logik
Offline
Зарегистрирован: 05.08.2014

//Уже размышлял по поводу снести библиотеку

Сносите без размышлений. Это дерьмо негодное. Не умеет принимать данные в любой момент и блокирует прерывания на все время приема или передачи. 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

А мне нравится software uart
Баланс железки щас запросил
b37.51 .u38d1h21m
Uptime больше месяца.

linnenemy
Offline
Зарегистрирован: 11.04.2018

Спасибо за верный посыл. Соединил, как Вы и написали, через переходник USB-UART. Работает, отправляет данные и принимает. Вернулся к началу, что называется. Все работает по отдельности, а вот вместе - никак. Буду копаться дальше.