arduino leonardo, bluetoth bee - android

Тема в разделе "Arduino & Shields", создана пользователем alex111222, 21 июл 2013.

  1. alex111222

    alex111222 Нерд

    здравствуйте

    у меня плата arduino leonardo, недавно купил wirless proto shield и bluetooth bee.
    хочу научиться передавать данные с ардуино на андроид и обратно.
    ссылка
    использовал эту статью, телефон присоединяется к плате( загорается зеленый диод на блитусе), но команды на светодиоды не идут, они не загораются. Скетч для ардуино и программу на андроид брал в оригинале, соединял все как на последнем фото в статье.
    Пробовал принимать данные с ардуино на андроид с помощью Bluetooth Terminal и SENA BTerm. Соединение с ардуино устанавливается, но данные не передаются(в том числе и с телефона на ардуино через Bluetooth Terminal). помогите пожалуйста, очень хочется разобраться. заранее спасибо.
     
  2. alex111222

    alex111222 Нерд

    сегодня сделал тест: через программу PuTTY посылал на плату сигнал (цифру 1 с клавиатуры) на ардуино, где после приема загорался светодиод. При соединении через usb кабель все работает нормально, при этом на плате во время передачи данных горит диод ТХ.
    При соединении через Bluetooth bee устанавливается соединение(загорается зеленый диод на Bluetooth bee), передачи данных нет(диод не горит), но во время нажатия клавиши на компе едва заметно горит ТХ на плате wireless.
     
  3. nailxx

    nailxx Официальный Нерд Администратор

    Можете поставить запятые? Не до конца понятно кому принадлежат клавиши. И если речь идёт о BT, откуда в истории взялся комп? Также убедитесь, что переключатель на плате Wireless Shield установлен в положение Micro (не USB)
     
  4. alex111222

    alex111222 Нерд

    Я подсоединил к компу плату arduino через usb и через программу putty посылал на нее сигнал ("1"). Сигнал приходил, загорался светодиод. Во время передачи данных на плате arduino ярко горел диод TX. В этот момент плата wireless не была установлена.
    Затем я установил плату wireless, на нее bluetooth bee. Добавил устройство bluetooth bee в мои устройства bluetooth на компе, ввел пароль для сопряжения. Через программу putty соединился с платой arduino через bluetooth и начал посылать сигнал( ту же 1). Светодиод не загорался. На Bluetooth bee горел зеленый диод, значит было установлено соединение. На плате wireless в момент передачи данных ( когда нажимаю 1 или любую другую клавишу на компе) еле заметно горит индикатор TX.
    Т. К. плату wireless подключал после прошивки, я решил перепрошить arduino с установленной wireless. В режим usb wireless перевел, потом вернул на микро. Эффект тот же.
    В общем я много всего перепробовал уже, пришел к выводу, что почему то мой bluetooth bee не передает и не принимает данные. Не знаю что делать уже(( помогите плиз
     
  5. HighDigital

    HighDigital Гик

    1)Не понимаю зачем вы используете "putty". Прочитал статью, про putty и "добавления в "мои устройства" на компе" вообще не слово.

    2)
    Не понятно, зачем "блютус би" добавлять в "мои устройства на компе", я думал что блютус би внутри Ардуино крутится?

    3)Выполняли это действие?
    И уверены, что приложение на Андроид и скетч на все 100% идентичны?

    Ещё нюанс - зачем вы с компа присылаете данные вообще? На RX и TX (0 и 1 пины на дуне) должен сам "блютус би" присылать команды(следовательно Телефон-андроид), а не компьютер.
    А так получается, что вы Сериал передачу делаете только между "компом<->ардуино", а блютус би не может данные отправить/получить, т.к поток данных уже установлен между "компом<->ардуино", а не "ардуино<->блютусби". A на сколько я знаю С++ - нельзя отправлять данные в "не свой" поток, ИМХО

    Я конечно могу глубоко ошибаться - т.к у меня не было никогда блютус би, и с ним я не работал, сужу по прочитанной мною статьи из вики(кстати, статья очень хорошая!)
     
  6. nailxx

    nailxx Официальный Нерд Администратор

    Смотрите, попробуйте заменить свой loop на примерно такой:

    Код (C):

    void loop()
    {
      if (Serial.available()) {
        pinMode(13, OUTPUT);
        digitalWrite(13, HIGH);
      }
    }
     
    Это заставит навсегда зажечь светодиод L на 13-м пине, если из Bluetooth пришло хоть что-то. Исходя из того загорится ли он будем плясать дальше.
     
  7. HighDigital

    HighDigital Гик

    А разве не нужно добавить if (Serial.available() > 0)? или можно просто if (Serial.available())?
     
  8. nailxx

    nailxx Официальный Нерд Администратор

    Исходя из того, что количество байт в очереди не может быть отрицательным, это одно и то же.

    if (Serial.available())

    и

    if (Serial.available() != 0)

    это одно и то же, компилируется в одни и те же инструкции, и первое предпочтительнее второго с точки зрения зануд-программистов вроде меня, потому что соответствует заповедям KISS (Keep It Stupid Simple) и Yagni (You Ain't Gonna Need It)
     
    HighDigital нравится это.
  9. HighDigital

    HighDigital Гик

    По вам не сказать ;)
     
  10. alex111222

    alex111222 Нерд


    Код (C):

    void setup()
    {
    Serial.begin(9600);
    }

    void loop()
    {
    if (Serial.available() )
     { pinMode(13, OUTPUT);
      digitalWrite(13, HIGH); }
    }
     
    в общем не работает, расписываю мои действия:
    вставил светодиод в 13 контакт и землю
    залил скетч на arduino( на wireless сначала переключил кнопку на usb, после прошивки - микро)
    с телефона (android 4.0.3) включил созданную программу ( по теме на вики )
    соединение между телефоном и arduino установилось( загорелся зеленый диод на bluetooth bee)
    нажимаю кнопку в программе на телефоне(посылаю сигнал) - светодиод 13 не горит. (только еле заметное мигание на канале TX)

    подключился через комп с помощью программы putty - та же реакция.
     
  11. nailxx

    nailxx Официальный Нерд Администратор

    Стоп-стоп. Вы же говорили, что если с компа через PuTTY слать, то данные приходят. Как же тогда получается, что светодиод не загорается?! Светодиод L на самой плате тоже не горит?
     
  12. HighDigital

    HighDigital Гик

    ещё мысля пришла - вам может питания не хватает? вольты проседают?
    попробуйте помимо USB подцепить ещё и крону к дуне.
     
  13. HighDigital

    HighDigital Гик

    Блюпуп много кушает + дуня.
     
  14. alex111222

    alex111222 Нерд


    я сам не могу понять толком. светодиод на плате (тот, который я хочу заставить гореть) не загорелся, то есть данные не приходят. но если посылаю сигнал, то слабо мигает ТХ.
    потом снял светодиод с платы, смотрел только на L, то же самое.

    с компа данные я через usb передавал и тогда приходили. кстати тогда ТХ тоже мигал, но на самой плате и намного сильнее.
     
  15. alex111222

    alex111222 Нерд

    попробовал, то же самое. не в этом проблема похоже, тем более в теме на вики питание от одной кроны было. я так же делал изначально(
     
  16. alex111222

    alex111222 Нерд

    :):):):)
    у меня заработало))) в общем проблема была в плате. На arduino leonardo ( как и на micro) используется какой-то новый чип, смысл в том, что он совмещает работу по usb и пинам. (сам не совсем понял, но это не главное). На arduino leonardo нужно использовать вместо привычной команды "Serial" "Serial1"
    рабочий код выглядит так

    Код (C):
     void setup()
    {
    Serial1.begin(9600);
    }

    void loop()
    {
    if (Serial1.available() )
     { pinMode(13, OUTPUT);
      digitalWrite(13, HIGH); }
    }
     

    еще раз спасибо за помощь)))
     
    HighDigital нравится это.