Проблема с bluetooth управлением

CoolBoy
Offline
Зарегистрирован: 11.01.2018

Всем привет! Сегодня написал программку для 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, отлично шлёт данные на телефон, так что проблема не в подключении, а скорее всего в коде. Я знаю, что программа маленькая, но я новичок. Помогите решить пж!!!

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

Ну, Вы выведите что пришло-то! И пришло ли хоть что-нибудь. Поставьте посте строки 14 Serial.print(val); и посмотрите, что приходит. Чего вслепую-то работаете?

CoolBoy
Offline
Зарегистрирован: 11.01.2018

Вообще ничего не выводит. Если использовать без bluetooth.available() выводит -1

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

Значит, ни хрена не приходит. Разбирайтесь как посылаете, куда посылаете, как подключено - просто ни хрена не приходит.

CoolBoy
Offline
Зарегистрирован: 11.01.2018

Возможно "ни хрена не приходит". Посылаю через bluetooth terminal, пытался и через собственное приложение для андроид. Посылаю на arduino mega с модулем hc-06. Подключено нормально. Заливал скетч, где hc-06 должен посылать данные на телефон, работает отлично! Раньше эта программа у меня работала как часы, только на uno и nano.

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

Возможно, но сейчас у Вас ничего не приходит, т.к. available() не срабатывает. А потому, у Вас два варианта: 1) доказывать мне и самому себе, что всё там правильно или 2) искать причину, почему не приходит.

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Зачем на меге использовать софтсериал? Все 4ре аппаратных заняты? И 15 14 ноги это как раз ноги аппаратного RX3 TX2. Подключите нормально модуль к аппаратному сериалу и все заработает, если скорости правильно настроены.

CoolBoy
Offline
Зарегистрирован: 11.01.2018

О, спасибо вам большое! Подключил модуль к RX0 и TX0, убрал SoftwareSerial и дописал Serial.begin()

Я так понял SoftwareSerial используют, если аппаратных RX и TX портов нехватает, да? И ещё: RX0 и TX0 задействуются с помощью Serial.begin(), а как, допустим, задействовать RX3 и TX3 (имеется ввиду какая команда)?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Здесь всё есть:
http://arduino.ru/Serial/Begin

kalapanga
Offline
Зарегистрирован: 23.10.2016

Penni пишет:
Зачем на меге использовать софтсериал? Все 4ре аппаратных заняты? И 15 14 ноги это как раз ноги аппаратного RX3 TX2. Подключите нормально модуль к аппаратному сериалу и все заработает, если скорости правильно настроены.

То, что использовать софтверный сериал при наличии кучи аппаратных, нелогично - это понятно. Но всё-таки, что мешало ему работать - наличие аппаратного на этих же ногах, даже если ты его сам не инициализируешь? Или нам как всегда чего-то не досказали? Формально это вроде не запрещено.

Спрашиваю чисто из любопытства, в познавательных целях.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

kalapanga пишет:

То, что использовать софтверный сериал при наличии кучи аппаратных, нелогично - это понятно. Но всё-таки, что мешало ему работать - наличие аппаратного на этих же ногах, даже если ты его сам не инициализируешь? Или нам как всегда чего-то не досказали? Формально это вроде не запрещено.

Спрашиваю чисто из любопытства, в познавательных целях.

Вы путаете юридический принцип "разрешено все, что не запрещено" с принципом техническим: "работает только то, что предусмотрено разработчиком".

Вот скажите, какие на Меге есть предпосылки для работы SoftSerial?

 

PS. Как бы не примере: юридически не запрещено двигаться быстрее скорости света (разумеется, вне дорог общего пользования), а теперь попробуйте добиться осуществления на практике этого "не запрещено".

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

kalapanga пишет:

То, что использовать софтверный сериал при наличии кучи аппаратных, нелогично - это понятно. Но всё-таки, что мешало ему работать - наличие аппаратного на этих же ногах, даже если ты его сам не инициализируешь? Или нам как всегда чего-то не досказали? Формально это вроде не запрещено.

тут возникает вопрос - а работает ли вообще СофтСериал на Меге? - например для STM32F103 c ее 3-мя аппаратными сериалами СофтСериал просто не поддерживается...

И еще - у меня что-то возникают сомнения, что ТС решил свою проблему :) Последнее его сообщеение было о том, что он подключил блютуз и диагностический сериал для вывода на ПК к одним и тем же ногам (0 и 1)

SLKH
Offline
Зарегистрирован: 17.08.2015

andriano пишет:

kalapanga пишет:

То, что использовать софтверный сериал при наличии кучи аппаратных, нелогично - это понятно. Но всё-таки, что мешало ему работать - наличие аппаратного на этих же ногах, даже если ты его сам не инициализируешь? Или нам как всегда чего-то не досказали? Формально это вроде не запрещено.

Спрашиваю чисто из любопытства, в познавательных целях.

Вы путаете юридический принцип "разрешено все, что не запрещено" с принципом техническим: "работает только то, что предусмотрено разработчиком".

далеко не всегда...    :-(

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

SLKH, принципы - именно такие. Но в обоих случаях, естественно, по тем или иным причинам существуют отклонения. На сами принципы эти отклонения никак не влияют, только на соответствие окружающей реальности этим принципам.

CoolBoy
Offline
Зарегистрирован: 11.01.2018

b707 пишет:

kalapanga пишет:

То, что использовать софтверный сериал при наличии кучи аппаратных, нелогично - это понятно. Но всё-таки, что мешало ему работать - наличие аппаратного на этих же ногах, даже если ты его сам не инициализируешь? Или нам как всегда чего-то не досказали? Формально это вроде не запрещено.

тут возникает вопрос - а работает ли вообще СофтСериал на Меге? - например для STM32F103 c ее 3-мя аппаратными сериалами СофтСериал просто не поддерживается...

И еще - у меня что-то возникают сомнения, что ТС решил свою проблему :) Последнее его сообщеение было о том, что он подключил блютуз и диагностический сериал для вывода на ПК к одним и тем же ногам (0 и 1)

Я переделал код, теперь данные выводятся на lcd дисплей. А так я узнал, как задействовать TX3 и RX3 с помощью Serial3.begin(), так что проблем с этим больше не должно быть.

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

kalapanga пишет:

что мешало ему работать - наличие аппаратного на этих же ногах, даже если ты его сам не инициализируешь?

А разве у ТС в коде нет Serial.print? Вот это и мешало, наверное.