Проблема с bluetooth управлением
- Войдите на сайт для отправки комментариев
Сб, 10/02/2018 - 22:07
Всем привет! Сегодня написал программку для arduino mega, котороя должна выполнять соответствующие действия при получинии 0 или 1 по bluetooth:
#include <SoftwareSerial.h> int val; SoftwareSerial bluetooth(15, 14); void setup() { pinMode(15, INPUT); pinMode(14, OUTPUT); Serial.begin(115200); bluetooth.begin(9600); } void loop() { if (bluetooth.available()) { val = (bluetooth.read()); if (val == '1') { Serial.print("ON"); } if ( val == '0') { Serial.print("OFF"); } } }
Проблема такая: в com порт на компе не пишется on или off - пусто. Отправляю данные с телефона с помощью bluetooth terminal. Сам модуль, HC-06, отлично шлёт данные на телефон, так что проблема не в подключении, а скорее всего в коде. Я знаю, что программа маленькая, но я новичок. Помогите решить пж!!!
Ну, Вы выведите что пришло-то! И пришло ли хоть что-нибудь. Поставьте посте строки 14
Serial
.print(
val
);
и посмотрите, что приходит. Чего вслепую-то работаете?Вообще ничего не выводит. Если использовать без bluetooth.available() выводит -1
Значит, ни хрена не приходит. Разбирайтесь как посылаете, куда посылаете, как подключено - просто ни хрена не приходит.
Возможно "ни хрена не приходит". Посылаю через bluetooth terminal, пытался и через собственное приложение для андроид. Посылаю на arduino mega с модулем hc-06. Подключено нормально. Заливал скетч, где hc-06 должен посылать данные на телефон, работает отлично! Раньше эта программа у меня работала как часы, только на uno и nano.
Возможно, но сейчас у Вас ничего не приходит, т.к. available() не срабатывает. А потому, у Вас два варианта: 1) доказывать мне и самому себе, что всё там правильно или 2) искать причину, почему не приходит.
Зачем на меге использовать софтсериал? Все 4ре аппаратных заняты? И 15 14 ноги это как раз ноги аппаратного RX3 TX2. Подключите нормально модуль к аппаратному сериалу и все заработает, если скорости правильно настроены.
О, спасибо вам большое! Подключил модуль к RX0 и TX0, убрал SoftwareSerial и дописал Serial.begin()
Я так понял SoftwareSerial используют, если аппаратных RX и TX портов нехватает, да? И ещё: RX0 и TX0 задействуются с помощью Serial.begin(), а как, допустим, задействовать RX3 и TX3 (имеется ввиду какая команда)?
Здесь всё есть:
http://arduino.ru/Serial/Begin
То, что использовать софтверный сериал при наличии кучи аппаратных, нелогично - это понятно. Но всё-таки, что мешало ему работать - наличие аппаратного на этих же ногах, даже если ты его сам не инициализируешь? Или нам как всегда чего-то не досказали? Формально это вроде не запрещено.
Спрашиваю чисто из любопытства, в познавательных целях.
То, что использовать софтверный сериал при наличии кучи аппаратных, нелогично - это понятно. Но всё-таки, что мешало ему работать - наличие аппаратного на этих же ногах, даже если ты его сам не инициализируешь? Или нам как всегда чего-то не досказали? Формально это вроде не запрещено.
Спрашиваю чисто из любопытства, в познавательных целях.
Вы путаете юридический принцип "разрешено все, что не запрещено" с принципом техническим: "работает только то, что предусмотрено разработчиком".
Вот скажите, какие на Меге есть предпосылки для работы SoftSerial?
PS. Как бы не примере: юридически не запрещено двигаться быстрее скорости света (разумеется, вне дорог общего пользования), а теперь попробуйте добиться осуществления на практике этого "не запрещено".
То, что использовать софтверный сериал при наличии кучи аппаратных, нелогично - это понятно. Но всё-таки, что мешало ему работать - наличие аппаратного на этих же ногах, даже если ты его сам не инициализируешь? Или нам как всегда чего-то не досказали? Формально это вроде не запрещено.
тут возникает вопрос - а работает ли вообще СофтСериал на Меге? - например для STM32F103 c ее 3-мя аппаратными сериалами СофтСериал просто не поддерживается...
И еще - у меня что-то возникают сомнения, что ТС решил свою проблему :) Последнее его сообщеение было о том, что он подключил блютуз и диагностический сериал для вывода на ПК к одним и тем же ногам (0 и 1)
То, что использовать софтверный сериал при наличии кучи аппаратных, нелогично - это понятно. Но всё-таки, что мешало ему работать - наличие аппаратного на этих же ногах, даже если ты его сам не инициализируешь? Или нам как всегда чего-то не досказали? Формально это вроде не запрещено.
Спрашиваю чисто из любопытства, в познавательных целях.
Вы путаете юридический принцип "разрешено все, что не запрещено" с принципом техническим: "работает только то, что предусмотрено разработчиком".
SLKH, принципы - именно такие. Но в обоих случаях, естественно, по тем или иным причинам существуют отклонения. На сами принципы эти отклонения никак не влияют, только на соответствие окружающей реальности этим принципам.
То, что использовать софтверный сериал при наличии кучи аппаратных, нелогично - это понятно. Но всё-таки, что мешало ему работать - наличие аппаратного на этих же ногах, даже если ты его сам не инициализируешь? Или нам как всегда чего-то не досказали? Формально это вроде не запрещено.
тут возникает вопрос - а работает ли вообще СофтСериал на Меге? - например для STM32F103 c ее 3-мя аппаратными сериалами СофтСериал просто не поддерживается...
И еще - у меня что-то возникают сомнения, что ТС решил свою проблему :) Последнее его сообщеение было о том, что он подключил блютуз и диагностический сериал для вывода на ПК к одним и тем же ногам (0 и 1)
Я переделал код, теперь данные выводятся на lcd дисплей. А так я узнал, как задействовать TX3 и RX3 с помощью Serial3.begin(), так что проблем с этим больше не должно быть.
что мешало ему работать - наличие аппаратного на этих же ногах, даже если ты его сам не инициализируешь?
А разве у ТС в коде нет
Serial
.print
? Вот это и мешало, наверное.