Почему блютуз модуль не работает как Serial на Ардуино mega

cyberman
Offline
Зарегистрирован: 30.10.2018

Друзья, подскажите плиз всю голову сломал:

Есть БТ модуль вот такой https://aliexpress.ru/item/32890543550.html?spm=2114.13010708.0.0.569733edQLWBlo

Подключаю его к плате Arduino - Mega как положено:

RXD модуля - к TX(1), TXD модуля - к RX(0), VCC- к 5 V, GND- к GND 

На ПК стоит программа-терминал https://sites.google.com/site/terminalbpp/ и БТ-адаптер

Хочу: Из программы-терминал посылать символы '1' и '0' для включения/выключения светодиода, а при нажатии кнопки, подключенной к ардуино, - выводить в терминал строку "I am Dima".

БТ-модуль с БТ-адаптером благополучно соединяется и в терминале коннектится как COM-порт № Х. Светодиодик на БТ-модуле горит. При нажатии кнопки строка Serial.println("I am Dima") в терминале появляется! А вот наоборот - ни фига! При отправке любого символа из терминала на ардуину (Терминал- COM-порт Х - БТ-адаптер - БТ-модуль - Serial - Ардуина) в Serial у ардуины ничего не появляется ,т.е. 

 if (Serial.available()) // проверяем, поступают ли какие-то команды
  {
    Serial.println("Serial available !");
 
не срабатывает! 
Почему? При этом на UNO это все работает! Подскажите плиз - что я не так делаю с Мегой?
cyberman
Offline
Зарегистрирован: 30.10.2018

Неужели ни у кого не возникало такой проблемы кроме меня... 

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

выложите код полностью. только сначала прочитайте в правилах, как это делается.

cyberman
Offline
Зарегистрирован: 30.10.2018

Да там код простейший, дело не в коде. Сейчас выложу...

cyberman
Offline
Зарегистрирован: 30.10.2018
01void setup()
02{
03  Serial.begin(9600);  // подключаем последовательный порт
04  pinMode(13, OUTPUT); // объявляем пин 13 как выход
05   
06 // UNO
07  //MsTimer2::set(INTERRUPT_PERIOD, timerInterupt);  // задаем период прерывания по таймеру в мс
08  //MsTimer2::start();                                // разрешаем прерывание по таймеру
09 
10  // MEGA
11  FlexiTimer2::set(2,1/1000, timerInterupt); // задаем период прерывания по таймеру 2 мс
12  FlexiTimer2::start();
13}
14 
15void loop()
16{
17  if (Serial.available()) // проверяем, поступают ли какие-то команды
18  {
19    Serial.println("Serial available !");
20    val = Serial.read(); // переменная val равна полученной команде
21 
22    if (val == '1') {digitalWrite(13, HIGH);} // при 1 включаем светодиод
23    if (val == '0') {digitalWrite(13, LOW);}  // при 0 выключаем светодиод
24 
25  }
26 
27   if(button1.getClick())  // нажали кнопку смены режимов
28    Serial.println("I am Dima");
29      digitalWrite(13, LOW);  // при 0 выключаем светодиод
30    }
31  }
32 
33 void  timerInterupt()
34 {
35  button1.scanState();
36 }

 

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

Надо включить мозг !

Задействовать другой порт, так как этот serial заведен на второй МК для связи по USB !

cyberman
Offline
Зарегистрирован: 30.10.2018

Вот код. Интересует кусок

1if (Serial.available()) // проверяем, поступают ли какие-то команды
2  {
3    Serial.println("Serial available !");

Событие Serial.available() почему то не наступает никогда! Вопрос - почему?

cyberman
Offline
Зарегистрирован: 30.10.2018

Можно чуть подробнее? Что значит " на второй МК для связи по USB" ? От USB я арудину естественно отключил. И потом - как же это работает на UNO ?...

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

На UNO нет второго МК на плате ! То что вы отключили USB, никак не отключило второй МК от главное МК. У вас сейчас Tx от платы BT посажен на Tx от второго МК !!!

WavGat
Offline
Зарегистрирован: 14.04.2020

cyberman пишет:

Вот код. Интересует кусок

1if (Serial.available()) // проверяем, поступают ли какие-то команды
2  {
3    Serial.println("Serial available !");

Событие Serial.available() почему то не наступает никогда! Вопрос - почему?

Попробуйте здесь почитать: http://arduino.ru/Reference/Serial/Available

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

Схему меги посмотрите - там видно что PE0 и PE1 соединены со вторым МК, который выступает как USB-serial и он ВСЕГДА занимает сериал, если только не перерезать дорожки или перепрограммировать второй МК - оба способа убьют заливку скетчей по USB !

cyberman
Offline
Зарегистрирован: 30.10.2018

Вы хотите сказать, что Serial1 yа меге нельзя использовать не для чего другого как  только для загрузки программы? А для обмена по UART его использовать никак нельзя?  Я просто все свои проекты делал на UNO и с мегой как-то совсем плохо знаком... 

А как  задействовать другой порт? просто соединить с пинами 14 и 15 ? В программе что-то нужно менять?

cyberman
Offline
Зарегистрирован: 30.10.2018

Перерезать дорожки... это я вряд ли рискну

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

Через этот serial удобно обмениваться с компом через USB.

У меги несколько serial. Надо выбрать Serial1 Serial2 Serial3 и соответствующие ножки.

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

Komandir, давайте поспокойнее.  Обьясните, чем может помешать какой-то второй МК на меге, если USB отключен? - второй МК - это Atmega32U ? - так он и на Уно есть и ничем в данном случае не мешает.

Насчет того, что на Меге блютус лучше подключить к к другому Сериал - согласен, но главный вопрос ТС это никак не проясняет.

WavGat
Offline
Зарегистрирован: 14.04.2020

cyberman попробуй tx и rx со стороны ардуино закоротить. В терминал ответ вернётся?

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

cyberman пишет:

Да там код простейший, дело не в коде. Сейчас выложу...

вы так и не выложили ВЕСЬ код. Почему описание переменных и библиотеки обрезали? Чего вы боитесь. что кто-то стырит вашу "интеллектуальную собственнсть"?

cyberman
Offline
Зарегистрирован: 30.10.2018

Заработало! Спасибо большое!  Присоединил к пинам 18 и 19  и использовал Serial1. 

Можно еще вопросик? Когда соединил RXD модуля - TX1(19) и  TXD модуля - RX1 (18) ничего не получилось, а когда наоборот (RXD модуля - RX1 (18) и  TXD модуля - TX1(19)  ) - то все заработало в  обе стороны. Разве их не крест-накрест нужно соединять...? 

cyberman
Offline
Зарегистрирован: 30.10.2018

WavGat пишет:

cyberman попробуй tx и rx со стороны ардуино закоротить. В терминал ответ вернётся?

Да, ответ возвращается

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

cyberman пишет:

Заработало! Спасибо большое!  Присоединил к пинам 18 и 19  и использовал Serial1. 

Можно еще вопросик? Когда соединил RXD модуля - TX1(19) и  TXD модуля - RX1 (18) ничего не получилось, а когда наоборот (RXD модуля - RX1 (18) и  TXD модуля - TX1(19)  ) - то все заработало в  обе стороны. Разве их не крест-накрест нужно соединять...? 

а проверьте - если теперь обратно к пинам 0 и 1 соединить, но наоборот тому. как раньше соединяли - не заработает?

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

b707 видимо прошивки вторых МК отличаются на UNO и MEGA - на MEGA этот "эффект" тут уже многократно всплывал !

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

На мегах с алиэкспрессе встречаются неправильно подписанные пины для SerialN. Присмотритесь к их последовательности в соотношении к Serial0, например.

cyberman
Offline
Зарегистрирован: 30.10.2018

b707 пишет:

cyberman пишет:

Да там код простейший, дело не в коде. Сейчас выложу...

вы так и не выложили ВЕСЬ код. Почему описание переменных и библиотеки обрезали? Чего вы боитесь. что кто-то стырит вашу "интеллектуальную собственнсть"?

Да при чем тут собсвенность... Просто код не имеет отношения к делу. А библиотека там приличного размера, не хотел отнимать у людей время не имеющими к делу деталями. 

cyberman
Offline
Зарегистрирован: 30.10.2018

b707 пишет:

cyberman пишет:

Заработало! Спасибо большое!  Присоединил к пинам 18 и 19  и использовал Serial1. 

Можно еще вопросик? Когда соединил RXD модуля - TX1(19) и  TXD модуля - RX1 (18) ничего не получилось, а когда наоборот (RXD модуля - RX1 (18) и  TXD модуля - TX1(19)  ) - то все заработало в  обе стороны. Разве их не крест-накрест нужно соединять...? 

а проверьте - если теперь обратно к пинам 0 и 1 соединить, но наоборот тому. как раньше соединяли - не заработает?

1 мин. Сейчас попробую

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

ltk

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

b707 пишет:

а проверьте - если теперь обратно к пинам 0 и 1 соединить, но наоборот тому. как раньше соединяли - не заработает?

В обратную сторону данные передавались ...

cyberman
Offline
Зарегистрирован: 30.10.2018

b707 пишет:

cyberman пишет:

Заработало! Спасибо большое!  Присоединил к пинам 18 и 19  и использовал Serial1. 

Можно еще вопросик? Когда соединил RXD модуля - TX1(19) и  TXD модуля - RX1 (18) ничего не получилось, а когда наоборот (RXD модуля - RX1 (18) и  TXD модуля - TX1(19)  ) - то все заработало в  обе стороны. Разве их не крест-накрест нужно соединять...? 

а проверьте - если теперь обратно к пинам 0 и 1 соединить, но наоборот тому. как раньше соединяли - не заработает?

Если соединить RXD-TX0 и TXD-RX0 то с ардуины в терминал текст проходит, а из терминала в ардуину  - не проходит

Если соединить наоборот (крест-накрест) то вообще ничего никуда не проходит

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

ЧТД ...

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

Komandir пишет:

ЧТД ...

фигня какая-то

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

фича :-) на зеленой плате с 328PB и CH340 та же история ...

cyberman
Offline
Зарегистрирован: 30.10.2018

cyberman пишет:

b707 пишет:

cyberman пишет:

Заработало! Спасибо большое!  Присоединил к пинам 18 и 19  и использовал Serial1. 

Можно еще вопросик? Когда соединил RXD модуля - TX1(19) и  TXD модуля - RX1 (18) ничего не получилось, а когда наоборот (RXD модуля - RX1 (18) и  TXD модуля - TX1(19)  ) - то все заработало в  обе стороны. Разве их не крест-накрест нужно соединять...? 

а проверьте - если теперь обратно к пинам 0 и 1 соединить, но наоборот тому. как раньше соединяли - не заработает?

Если соединить RXD-TX0 и TXD-RX0 то с ардуины в терминал текст проходит, а из терминала в ардуину  - не проходит

Если соединить наоборот (крест-накрест) то вообще ничего никуда не проходит

Ой, наоборот - прямо если соединить то вообще ничего никуда не проходит. USB отключен

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

cyberman пишет:

Ой, наоборот

уже неважно - главное общий результат

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

Причем передача с двумя платами может и заработать, а вот BT ... GPS (UBLOX например)... девайсы в отказе ... 

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

ой...

cyberman
Offline
Зарегистрирован: 30.10.2018

Друзья, всем, особенно Komandir - большое спасибо!

Итого - соединил RXD-RX1(18), TXD-TX1(19), в программе использую Serial1, USB можно даже оставить подключенным или отключить - без разницы - все работает в обе стороны! 

 

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

Век живи - Век учись ... приходите ещё

cyberman
Offline
Зарегистрирован: 30.10.2018

sadman41 пишет:
На мегах с алиэкспрессе встречаются неправильно подписанные пины для SerialN. Присмотритесь к их последовательности в соотношении к Serial0, например.

Присмотрелся. Точно! На плате у 18 и 19 пинов неправильные подписи. Вот блин... Ну ладно, на ходовые качества не влияет.