Почему блютуз модуль не работает как Serial на Ардуино mega
- Войдите на сайт для отправки комментариев
Друзья, подскажите плиз всю голову сломал:
Есть БТ модуль вот такой 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 у ардуины ничего не появляется ,т.е.
Неужели ни у кого не возникало такой проблемы кроме меня...
выложите код полностью. только сначала прочитайте в правилах, как это делается.
Да там код простейший, дело не в коде. Сейчас выложу...
01
void
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
15
void
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
}
Надо включить мозг !
Задействовать другой порт, так как этот serial заведен на второй МК для связи по USB !
Вот код. Интересует кусок
1
if
(
Serial
.available())
// проверяем, поступают ли какие-то команды
2
{
3
Serial
.println(
"Serial available !"
);
Событие Serial.available() почему то не наступает никогда! Вопрос - почему?
Можно чуть подробнее? Что значит " на второй МК для связи по USB" ? От USB я арудину естественно отключил. И потом - как же это работает на UNO ?...
На UNO нет второго МК на плате ! То что вы отключили USB, никак не отключило второй МК от главное МК. У вас сейчас Tx от платы BT посажен на Tx от второго МК !!!
Вот код. Интересует кусок
1
if
(
Serial
.available())
// проверяем, поступают ли какие-то команды
2
{
3
Serial
.println(
"Serial available !"
);
Событие Serial.available() почему то не наступает никогда! Вопрос - почему?
Попробуйте здесь почитать: http://arduino.ru/Reference/Serial/Available
Схему меги посмотрите - там видно что PE0 и PE1 соединены со вторым МК, который выступает как USB-serial и он ВСЕГДА занимает сериал, если только не перерезать дорожки или перепрограммировать второй МК - оба способа убьют заливку скетчей по USB !
Вы хотите сказать, что Serial1 yа меге нельзя использовать не для чего другого как только для загрузки программы? А для обмена по UART его использовать никак нельзя? Я просто все свои проекты делал на UNO и с мегой как-то совсем плохо знаком...
А как задействовать другой порт? просто соединить с пинами 14 и 15 ? В программе что-то нужно менять?
Перерезать дорожки... это я вряд ли рискну
1
Плата Arduino Mega имеет три дополнительных последовательных порта: Serial1 на портах 19 (RX) и 18 (TX), Serial2 на портах на портах 17 (RX) и 16 (TX), Serial3 на портах на портах 15 (RX) и 14 (TX). Чтобы использовать эти порты для связи с компьютером понадобится дополнительные адаптеры USB-to-serial, т.к. они не подключены к встроенному адаптеру платы Mega. Для связи с внешним устройством через последовательный интерфейс соедините TX порт вашего устройства с RX портом внешнего устройства и RX порт вашего устройства с портом TX внешнего и соедините
"землю"
на устройствах. (Важно! Не подключайте эти порты напрямую к RS232 порту, это может повредить плату).
Через этот serial удобно обмениваться с компом через USB.
У меги несколько serial. Надо выбрать Serial1 Serial2 Serial3 и соответствующие ножки.
Komandir, давайте поспокойнее. Обьясните, чем может помешать какой-то второй МК на меге, если USB отключен? - второй МК - это Atmega32U ? - так он и на Уно есть и ничем в данном случае не мешает.
Насчет того, что на Меге блютус лучше подключить к к другому Сериал - согласен, но главный вопрос ТС это никак не проясняет.
cyberman попробуй tx и rx со стороны ардуино закоротить. В терминал ответ вернётся?
Да там код простейший, дело не в коде. Сейчас выложу...
вы так и не выложили ВЕСЬ код. Почему описание переменных и библиотеки обрезали? Чего вы боитесь. что кто-то стырит вашу "интеллектуальную собственнсть"?
Заработало! Спасибо большое! Присоединил к пинам 18 и 19 и использовал Serial1.
Можно еще вопросик? Когда соединил RXD модуля - TX1(19) и TXD модуля - RX1 (18) ничего не получилось, а когда наоборот (RXD модуля - RX1 (18) и TXD модуля - TX1(19) ) - то все заработало в обе стороны. Разве их не крест-накрест нужно соединять...?
cyberman попробуй tx и rx со стороны ардуино закоротить. В терминал ответ вернётся?
Да, ответ возвращается
Заработало! Спасибо большое! Присоединил к пинам 18 и 19 и использовал Serial1.
Можно еще вопросик? Когда соединил RXD модуля - TX1(19) и TXD модуля - RX1 (18) ничего не получилось, а когда наоборот (RXD модуля - RX1 (18) и TXD модуля - TX1(19) ) - то все заработало в обе стороны. Разве их не крест-накрест нужно соединять...?
а проверьте - если теперь обратно к пинам 0 и 1 соединить, но наоборот тому. как раньше соединяли - не заработает?
b707 видимо прошивки вторых МК отличаются на UNO и MEGA - на MEGA этот "эффект" тут уже многократно всплывал !
На мегах с алиэкспрессе встречаются неправильно подписанные пины для SerialN. Присмотритесь к их последовательности в соотношении к Serial0, например.
Да там код простейший, дело не в коде. Сейчас выложу...
вы так и не выложили ВЕСЬ код. Почему описание переменных и библиотеки обрезали? Чего вы боитесь. что кто-то стырит вашу "интеллектуальную собственнсть"?
Да при чем тут собсвенность... Просто код не имеет отношения к делу. А библиотека там приличного размера, не хотел отнимать у людей время не имеющими к делу деталями.
Заработало! Спасибо большое! Присоединил к пинам 18 и 19 и использовал Serial1.
Можно еще вопросик? Когда соединил RXD модуля - TX1(19) и TXD модуля - RX1 (18) ничего не получилось, а когда наоборот (RXD модуля - RX1 (18) и TXD модуля - TX1(19) ) - то все заработало в обе стороны. Разве их не крест-накрест нужно соединять...?
а проверьте - если теперь обратно к пинам 0 и 1 соединить, но наоборот тому. как раньше соединяли - не заработает?
1 мин. Сейчас попробую
ltk
а проверьте - если теперь обратно к пинам 0 и 1 соединить, но наоборот тому. как раньше соединяли - не заработает?
В обратную сторону данные передавались ...
Заработало! Спасибо большое! Присоединил к пинам 18 и 19 и использовал Serial1.
Можно еще вопросик? Когда соединил RXD модуля - TX1(19) и TXD модуля - RX1 (18) ничего не получилось, а когда наоборот (RXD модуля - RX1 (18) и TXD модуля - TX1(19) ) - то все заработало в обе стороны. Разве их не крест-накрест нужно соединять...?
а проверьте - если теперь обратно к пинам 0 и 1 соединить, но наоборот тому. как раньше соединяли - не заработает?
Если соединить RXD-TX0 и TXD-RX0 то с ардуины в терминал текст проходит, а из терминала в ардуину - не проходит
Если соединить наоборот (крест-накрест) то вообще ничего никуда не проходит
ЧТД ...
ЧТД ...
фигня какая-то
фича :-) на зеленой плате с 328PB и CH340 та же история ...
Заработало! Спасибо большое! Присоединил к пинам 18 и 19 и использовал Serial1.
Можно еще вопросик? Когда соединил RXD модуля - TX1(19) и TXD модуля - RX1 (18) ничего не получилось, а когда наоборот (RXD модуля - RX1 (18) и TXD модуля - TX1(19) ) - то все заработало в обе стороны. Разве их не крест-накрест нужно соединять...?
а проверьте - если теперь обратно к пинам 0 и 1 соединить, но наоборот тому. как раньше соединяли - не заработает?
Если соединить RXD-TX0 и TXD-RX0 то с ардуины в терминал текст проходит, а из терминала в ардуину - не проходит
Если соединить наоборот (крест-накрест) то вообще ничего никуда не проходит
Ой, наоборот - прямо если соединить то вообще ничего никуда не проходит. USB отключен
Ой, наоборот
уже неважно - главное общий результат
Причем передача с двумя платами может и заработать, а вот BT ... GPS (UBLOX например)... девайсы в отказе ...
ой...
Друзья, всем, особенно Komandir - большое спасибо!
Итого - соединил RXD-RX1(18), TXD-TX1(19), в программе использую Serial1, USB можно даже оставить подключенным или отключить - без разницы - все работает в обе стороны!
Век живи - Век учись ... приходите ещё
Присмотрелся. Точно! На плате у 18 и 19 пинов неправильные подписи. Вот блин... Ну ладно, на ходовые качества не влияет.