Зависание при передаче по Bluetooth

Тема в разделе "Проводная и беспроводная связь", создана пользователем kurt_fisher, 24 авг 2014.

  1. kurt_fisher

    kurt_fisher Нуб

    Может кто то с этим уже сталкивался, при попытке связаться с платой по bluetooth (blutoothbeee) среда зависает. То же самое с программами, написанными для работы с com портом(передача как через обычный com порт)
     
  2. acos

    acos Официальный гик Администратор

    Подробности?
     
  3. kurt_fisher

    kurt_fisher Нуб

    Подключил блютус. Передаю данные из ком порта (программака на C#). При передаче программка зависает и среда разработки для ардуино тоже. Вот код:
    Код (Text):
    #define D1 8          // Направление вращение двигателя 1
    #define M1 11          // ШИМ вывод для управления двигателем 1
    #define D2 12          // Направление вращение двигателя 2
    #define M2 9          // ШИМ вывод для управления двигателем 2
    #include <Servo.h>

    Servo myservo1;
    Servo myservo2;
    Servo myservo3;
    Servo myservo4;
    Servo myservo5;
    Servo myservo6;
    Servo myservo7;

    int i = 0;
     
    void setup()
    {
        Serial.begin(9600);
       
        myservo1.attach(2);
        myservo2.attach(3);
        myservo3.attach(4);
        myservo4.attach(5);
        myservo5.attach(6);
        myservo6.attach(7);
        myservo7.attach(10);
       
            pinMode(D1, OUTPUT);
            pinMode(D2, OUTPUT);
            Serial.begin(9600);

            analogWrite(M1, 0);
            analogWrite(M2, 0);
         
            myservo1.write(140);
            myservo2.write(170);
            myservo3.write(90);
            myservo4.write(90);
            myservo5.write(10);
            myservo6.write(40);
            myservo7.write(90);
           
            delay(1000);
         
    }

    void loop()
    {

          if (Serial.available() > 0)
          {
                  i = Serial.read();
                  switch(i)
                  {
                        case 49:
                                digitalWrite(D1, 0);                        
                                digitalWrite(M1, 1);
                                digitalWrite(D2, 1);
                                digitalWrite(M2, 0);
                                break;
                        case 50:
                                digitalWrite(D1, 1);                        
                                digitalWrite(M1, 0);
                                digitalWrite(D2, 0);
                                digitalWrite(M2, 1);
                                break;
                        case 51:
                                digitalWrite(D1, 0);                        
                                digitalWrite(M1, 1);
                                digitalWrite(D2, 0);
                                digitalWrite(M2, 1);
                                break;
                        case 52:
                                digitalWrite(D1, 1);                        
                                digitalWrite(M1, 0);
                                digitalWrite(D2, 1);
                                digitalWrite(M2, 0);
                                break;
                        case 53:  
                                digitalWrite(D1, 0);                        
                                digitalWrite(M1, 0);
                                digitalWrite(D2, 0);
                                digitalWrite(M2, 0);
                                break;
                        case 'Y':
                                myservo1.write(140);
                                myservo2.write(140);
                                myservo3.write(90);
                                myservo4.write(90);
                                myservo5.write(10);
                                myservo6.write(40);
                                myservo7.write(150);
                                delay(500);
                                myservo1.write(140);
                                myservo2.write(170);
                                myservo3.write(90);
                                myservo4.write(90);
                                myservo5.write(10);
                                myservo6.write(40);
                                myservo7.write(90);
                               
                                break;
                        case 'U':
                                myservo1.write(90);
                                myservo2.write(90);
                                myservo3.write(150);
                                myservo4.write(90);
                                myservo5.write(100);
                                myservo6.write(40);
                                myservo7.write(150);
                                delay(500);
                                myservo1.write(140);
                                myservo2.write(170);
                                myservo3.write(90);
                                myservo4.write(90);
                                myservo5.write(10);
                                myservo6.write(40);
                                myservo7.write(90);                  
                                break;
                               
                        case 'I':
                                myservo1.write(90);
                                myservo2.write(110);
                                myservo3.write(60);
                                myservo4.write(90);
                                myservo5.write(100);
                                myservo6.write(40);
                                myservo7.write(150);
                                delay(500);
                                myservo1.write(140);
                                myservo2.write(170);
                                myservo3.write(90);
                                myservo4.write(90);
                                myservo5.write(10);
                                myservo6.write(40);
                                myservo7.write(90);
                               
                                break;
                               
                        case 'H':
                                myservo1.write(140);
                                myservo2.write(170);
                                myservo3.write(90);
                                myservo4.write(90);
                                myservo5.write(40);
                                myservo6.write(60);
                                myservo7.write(30);
                                delay(500);
                                myservo1.write(140);
                                myservo2.write(170);
                                myservo3.write(90);
                                myservo4.write(90);
                                myservo5.write(10);
                                myservo6.write(40);
                                myservo7.write(90);
                               
                                break;
                        case 'J':
                                myservo1.write(140);
                                myservo2.write(170);
                                myservo3.write(90);
                                myservo4.write(40);
                                myservo5.write(90);
                                myservo6.write(90);
                                myservo7.write(30);
                                delay(500);
                                myservo1.write(140);
                                myservo2.write(170);
                                myservo3.write(90);
                                myservo4.write(90);
                                myservo5.write(10);
                                myservo6.write(40);
                                myservo7.write(90);                  
                                break;
                               
                        case 'K':
                                myservo1.write(140);
                                myservo2.write(170);
                                myservo3.write(90);
                                myservo4.write(120);
                                myservo5.write(90);
                                myservo6.write(90);
                                myservo7.write(30);
                                delay(500);
                                myservo1.write(140);
                                myservo2.write(170);
                                myservo3.write(90);
                                myservo4.write(90);
                                myservo5.write(10);
                                myservo6.write(40);
                                myservo7.write(90);                  
                               
                               
                                break;
                                                           
                  }
          }
    }
     
     
  4. kurt_fisher

    kurt_fisher Нуб

     
  5. acos

    acos Официальный гик Администратор

    целевая плата Arduino Uno?
    Передаете из ком порта, тоесть ардуино подключена к компьютеру по USB? Я правильно вас понял - одновременно подключен и bluetooth bee через Wireless Shield и USB? А по блютус что подключено?
    Вот такая у меня картина в голове нарисовалась. Всё ещё недостаточно подробностей:)
    Если я угадал, то причина вот в чём: В Arduino Uno только один последовательный порт. По нему она общается с компьютером. Bluetooth bee общается с ардуино по тому же последовательному порту. Если вдруг и блютус и компьютер попробуют поговорить с ардуино одновременно, то ардуино скажет "ээээ! Что за ерунда?". Хотя сценарий не очень правдоподобен. Наверное я не угадал. Но на всякий случай - если дело обстоит так, то могу порекомендовать для Bluetooth bee использовать SoftwareSerial.
    Или нет, или вы подключили ардуино через виртуальный com-порт, который usb-bluetooth свисток к компьютеру, и пытаетесь открыть этот порт одновременно из программы на C# и из Arduino IDE?
    Или нет... Тогда сценарий снова мог бы бдыть другим.
    Кроме кода нужны: схема подключения, хотя бы словами - что к чему куда подключено. От чего запитаны сервоприводы? От чего запитана ардуино? Какая ардуино используется?
     
  6. acos

    acos Официальный гик Администратор

    в догонку - от чего запитаны двигатели? Через какой драйвер они управляются и через драйвер ли?
     
  7. kurt_fisher

    kurt_fisher Нуб

    Arduino Uno. Подключение без шилда, напрямую - TX, RX, 5V, GND. Для подключения по блютус провод отключаю. Даже если подключить блютус и поморгать диодом как в простом примере(http://cxem.net/arduino/arduino63.php) то Arduino IDE виснет. Драйвер двигателей
    Dual MC33926 Motor Driver Carrier(то же что и на амперке, только выходной ток побольше). Сама Ардуинка подключена через аккум с частичным сбросом напряжения через кренку(стабилизатор напряжения). Схемку смогу нарисовать только днем.
     
  8. kurt_fisher

    kurt_fisher Нуб

    Двигатели из ROVER 5 платформы.
     
  9. acos

    acos Официальный гик Администратор

    Bluetooth bee должна питаться от 3.3 В, Я не уверен, что блютус модуль всё ещё жив после этого. Wireless Shield нужен в том числе и для выравнивания уровней 5V→3.3V. По вашей ссылке как раз подключают модуль к 3,3 В контактам ардуино.

    Вы подключаете TX bluetooth Bee к RX Arduino, а RX Bluetooth Bee к TX Arduino? - нужно подключать именно так. RX→TX, TX→RX.

    Во всей истории я совсем не понимаю — при чем тут Arduino IDE? Почему она должна виснуть, если при подключении блютуса у вас компьютер и ардуино не соединены физически никак? Вы пытаетесь подключится к ардуино по блютусу из Arduino IDE? У вас в компьютере есть Bluetooth интерфейс? Вы подключаетесь в Arduino IDE к Arduino через него?
     
  10. kurt_fisher

    kurt_fisher Нуб

    Все именно так и делаю, отправляю команду из IDE, через монитор порта. IDE зависает, команда не проходит. upload_2014-9-15_18-11-3.png
     
    Последнее редактирование: 15 сен 2014
  11. kurt_fisher

    kurt_fisher Нуб

    То же самое через провод работает.
     
    Последнее редактирование: 15 сен 2014
  12. acos

    acos Официальный гик Администратор

    Ох. Давайте тогда по порядку.
    1. Компьютер подключен к Arduino Uno через bluetooth? Если да, то как вы определили факт подключения?
     
  13. kurt_fisher

    kurt_fisher Нуб

    Да, подключен. В устройствах есть bluetooth, к которому установлено соединение. Кроме того появляются 2 com порта в устройствах компьютера. Как я понял один на прием, другой на передачу.
    PS вы кстати не из амперки? а то я бы заехал и на месте посмотрели