Bluetooth HC-05 ведет себя странно. Помогите разобраться.

Тема в разделе "Arduino & Shields", создана пользователем incbot, 20 фев 2016.

  1. incbot

    incbot Нуб

    Имеется HC-05, распаянный на подложке (торчат ноги GND, 3.3v, 5v, TX, RX, KEY) Имеются две меги 2560. С обоими симптомы одинаковые. Подключаю ножки HC-05:

    GND<->GND ардуино
    5v<->5V ардуино
    TX/RX <-> 0/1 (если нулевой serial) либо 19/18 (если первый) либо 17/16 (если второй)
    остальные ножки синезуба не включены

    Скетч для подключения TX/RX = 15/14 (Serial2) приведен ниже.
    Так вот. В режиме TX/RX <-> 0/1 ардуино не может принять со спаренного смартфона ничего, хотя передает. А для остальных портов все работает как надо (в обе стороны). WTF? Где собака порылась в мегах или модуле? Или я чего то не понимаю? Убил целый вечер. Думал что модуль не работает. Сомнения закрались когда сцепил ему ножки приема и передачи и по петле получил эхо на смартфоне без ардуины (только подав питание) Только после этого решил потестить на другом Serial и ... о чудо

    Итак код, включающий встроенный в ардуино светодиод на пине 13 при подаче 1 со спаренного через Bluetooth HC-05 смартфона:

    Код (C++):
    char incomingByte;  // input data
    int  LED = 13;      // LED on 13 pin

    void setup() {
      Serial.begin(9600); //init port
      Serial2.begin(9600); //init port
      pinMode(LED, OUTPUT);
      Serial.println("Press 1 to LED ON or 0 to LED OFF...");
      Serial2.println("Press 1 to LED ON or 0 to LED OFF...");
    }

    void loop() {
      if (Serial2.available() > 0) {  //if data coming...
        incomingByte = Serial2.read(); //read byte
        if (incomingByte == '0') {
          digitalWrite(LED, LOW);  //if incoming '0' LED off
          Serial.println("LED OFF. Press 1 to LED ON!");  //text message
          Serial2.println("LED OFF. Press 1 to LED ON!");  //text message
        }
        if (incomingByte == '1') {
          digitalWrite(LED, HIGH); //if incoming '1' LED on
          Serial.println("LED ON. Press 0 to LED OFF!");
          Serial2.println("LED ON. Press 0 to LED OFF!");
        }
      }
    }
     
    Последнее редактирование: 20 фев 2016
  2. shpock

    shpock Гик

    мега 2560 у вас какая? как организовано подключение к компьютеру? 0/1 (нулевой serial) используется (также подключено) к atmega8u2, (или к другому чипу, если китай). Проблема связана скорее с этим.

    Питание на плату вы берете с компа? Если да то Serial может использоваться компом. Запитайте мегу чем то другим (не от компа).
     
  3. Mestniy

    Mestniy Гуру

    Дык у него же Serial2 занят. Serial используется компом, в данном случае. Но не как не Serial2. Собака скорее всего в контактах зарыта))))). Пропаяйте все, и посмотрите на реакцию.
     
  4. shpock

    shpock Гик

    на сколько я понял то с Serial2, как в скетче выше, все работает. Не работает как раз через Serial.
     
  5. Mestniy

    Mestniy Гуру

    Так ардуино понять не может или com-порт ПК?
     
  6. Mestniy

    Mestniy Гуру

    Потомучто, если Arduino не может принять, то это Serial3(TX).
     
  7. shpock

    shpock Гик

    Ардуино не может принять
     
  8. shpock

    shpock Гик

    вот тут не понял о чем Вы?
     
  9. incbot

    incbot Нуб

    Мда люди )) Походу вопросов у вас больше чем у меня )) Питание внешнее 9 в около ампера (вроде более чем ибо только модуль и включен) Ардуина на atmega8u2 как и положено )) При скетче выше (и соответствующем подключении) все работает в две стороны. Как и на других сериалах кроме того по которому льется скетч (на TX0/RX1 я его называю нулевым). Заливаю кеш, отключаю USB с переходом на внешнее питание.Во всех случаях ардуина передает на смартфон данные, в случаи не нулевого компорта еще и принимает... А вот при подключении синезуба через TX0/RX1 можно обпередаваться со смарта нулями и единицами. Реакции нет. Не знаю как еще обьяснить (если что простите мой русский :) ) Спрашивается в задаче кто виноват :) и что делать :)
     
    Последнее редактирование: 20 фев 2016
  10. shpock

    shpock Гик

    Все правильно я понял. А проверьте Serial каким то способом. Именно в месте подключения блютус поставьте перемычку и поодправляйте попринимайте ардуинкой.
     
  11. incbot

    incbot Нуб

    Мысль отличная... Странно что я до нее не дошел... Однако если соединить 0 и 1 пин после загрузки скетча (см ниже) светодиод зажигается на полсекунды и на полсекунды гаснет:oops: Там по сериалу никуда ничего подтягивать не надо резисторами часом?

    Код (C++):
    char incomingByte;  // input data

    void setup() {
      Serial.begin(9600); //init port
      pinMode(LED, OUTPUT);
      Serial.println("1");
    }

    void loop() {
      if (Serial.available() > 0) {  //if data coming...
        incomingByte = Serial.read(); //read byte
        if (incomingByte == '0') {
          digitalWrite(LED, LOW);  //if incoming '0' LED off
          Serial.println("1");  //text message
        }
        if (incomingByte == '1') {
          digitalWrite(LED, HIGH); //if incoming '1' LED on
          Serial.println("0");
        }
        delay(500);
      }
    }
     
  12. shpock

    shpock Гик

    да нет, ничего подтягивать не нужно
     
  13. incbot

    incbot Нуб

    ЗдОрово... И какие мысли?
     
  14. shpock

    shpock Гик

    все таки нужно к Serial что то подключить, может даже Serial1. Что то в нём не чисто.
     
  15. incbot

    incbot Нуб

    Петлю из двух сериал? )) К тому же две меги такие у меня.... Можно даже с одной на другую ))
     
  16. incbot

    incbot Нуб

    То что вообще говоря на HC-05 логические уровни трехвольтовые я конечно знал, хотя все говорят что кушает она и 5 и по питанию и по логике Однако забавно... погуглил... народ резистивным делителем трансмит ардуины подключает к порту ресив HC05. Здесь http://42bots.com/tutorials/how-to-connect-arduino-uno-to-android-phone-via-bluetooth/ например. У меня же с приемом проблема... Неужели не хватает питания с модуля для логической единицы на ардуино? Блин и осцила нет под рукой....
     
  17. shpock

    shpock Гик

    так работает петля ?
     
  18. incbot

    incbot Нуб

    Дело в чем то другом... По крайней мере так все мигает как надо:

    Код (C++):
    /*
    * Connection is crosslink:
    * 0 (RX serial 0)<-->18 (TX serial 1)
    * 1 (TX serial 0)<-->19 (RX serial 1)
    */


    char incomingByte;  // input data
    int  LED = 13;      // LED on 13 pin

    void setup() {
      Serial.begin(9600); //init port for 0 (RX) и 1 (TX)
      Serial1.begin(9600); //init port for 19 (RX) и 18 (TX)
      pinMode(LED, OUTPUT);
      Serial1.print('1'); //Hello from Serial_1 Start loop with this ))
    }

    void loop() {
      //see what incoming on Serial_0:
      if (Serial.available() > 0) {  //if data coming...
        incomingByte = Serial.read(); //read byte
        if (incomingByte == '0') {
          digitalWrite(LED, LOW);  //if incoming '0' LED off
          Serial.print('1');  //echo to next ))) serial
        }
        if (incomingByte == '1') {
          digitalWrite(LED, HIGH); //if incoming '1' LED on
          Serial.println("0");
        }
      }
      //wait byte on Serial_1 and translate it to loop
      if (Serial1.available() > 0) {  //if data coming...
        incomingByte = Serial1.read(); //read byte
        Serial1.print(incomingByte);  //echo to next ))) serial
      }
      delay(1000); //real it's blink time
    }
     
  19. shpock

    shpock Гик

    может atmega8u2 все-таки мешает. Он через 1К резистор подключен. У Вас точно оригинальная плата?
     
  20. incbot

    incbot Нуб

    Про какой резистор речь то?