Блютус работает в одну сторону.

gloriaDeo
Offline
Зарегистрирован: 26.02.2013

Добрый день. 

Помогите пожалуйста, со следующей проблемой:

 

Подключаю Bluetooth HC-05 к ардуине следующим образом:

GND - GND

RX - TX

TX - RX

3.3v - 3.3v

Так же просто подключаю обычный диод к 12 пину.

Потом прописываю такой код:

char incomingByte;  // входящие данные
int  LED = 12;      // LED подключен к 12 пину
 
void setup() {
  Serial.begin(9600); // инициализация порта
  pinMode(LED, OUTPUT);
  Serial.println("Press 1 to LED ON or 0 to LED OFF...");
}
 
void loop() {
  if (Serial.available() > 0) {  //если пришли данные
    incomingByte = Serial.read(); // считываем байт
    if(incomingByte == '0') {
       digitalWrite(LED, LOW);  // если 1, то выключаем LED
       Serial.println("LED OFF. Press 1 to LED ON!");  // и выводим обратно сообщение
    }
    if(incomingByte == '1') {
       digitalWrite(LED, HIGH); // если 0, то включаем LED
       Serial.println("LED ON. Press 0 to LED OFF!");
    }
  }
}

Драйвера на блютус установлены. 

Через программу Termite или Tera Term устанавливаю соединение (все делал как написанно вот тут http://cxem.net/arduino/arduino63.php), но данные идут только с ардуины, а вот когда пытаюсь послать сигнал на неё - никакой реакции. Хотя, если посылать сигнал с порта ардуины, то все работает (т.е. код правильны). 

 

Подскажите, пожалуйста, что делаю не так и где ошибка?

 

Заранее благодарен!

 

gloriaDeo
Offline
Зарегистрирован: 26.02.2013

Если замкнуть RX и TX блютуса (т.е. сигнал не проходит через ардуину), то тогда он эхом отвечает на сигналы от компьютера. Т.е. сама плата сигналы принимает и сразу же их отсылает обратно. Это исключает механическое повреждение. 

gloriaDeo
Offline
Зарегистрирован: 26.02.2013

решение проблемы: заменил входящие пины ардуины RX и TX на "искусственно" созданные.

 

Вот код:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // указываем пины rx и tx соответственно

char incomingByte;  // входящие данные
int  LED = 12;      // LED подключен к 12 пину
 
void setup() {
  mySerial.begin(9600); // инициализация порта
  pinMode(LED, OUTPUT);
  mySerial.println("Press 1 to LED ON or 0 to LED OFF...");
}
 
void loop() {
  if (mySerial.available() > 0) {  //если пришли данные
    incomingByte = mySerial.read(); // считываем байт
    if(incomingByte == '0') {
       digitalWrite(LED, LOW);  // если 1, то выключаем LED
       mySerial.println("LED OFF. Press 1 to LED ON!");  // и выводим обратно сообщение
    }
    if(incomingByte == '1') {
       digitalWrite(LED, HIGH); // если 0, то включаем LED
       mySerial.println("LED ON. Press 0 to LED OFF!");
    }
  }
}

идею взял из статьи http://habrahabr.ru/post/139477/ 
Все работает: сигналы идут с блютуса на ардуину в обе стороны (т.е. управляю с терминала и на него приходит ответ).