Strela FAQ

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

  1. Creator

    Creator Нерд

    Да, 1.7.0 брал оттуда. Но я паренёк неленивый - всё снёс, поставил православную 1.6.3. Прикрутил библиотеки, ошибка осталась:

     
  2. Creator

    Creator Нерд

    А между тем, завтра курьер уже привезет Стрелу, и вопрос станет ооочень актуальным...
     
  3. acos

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

    Осталась ошибка только с wire.h? Обратите внимание, на вики с любым примером, и в примерах к библиотеке Strela, везде нужно писать
    Код (C):

    #include <Wire.h>
    #include <Strela.h>
     
    Когда-то я переживал по этому поводу, а потом увидел в библиотеках adafruit то же самое. Просто в arduino IDE не очень корректно работает линковщик.

    Меня больше беспокоили ошибки, которые у вас выскакивали после добавления Wire.h в скетч. Эти ошибки пропали?
     
    Последнее редактирование: 14 апр 2015
    Creator нравится это.
  4. Creator

    Creator Нерд

    Большущее спасибо!
    Добавил руками Wire - всё скомпилилось.
     
  5. Creator

    Creator Нерд

    Продолжаем разговор :)
    Получил сегодня Стрелу и Wi-Fi Bee v2.
    В описании к Bee рекомендуется использовать библиотеку WiFly. Библиотеку установил, но нигде не смог найти, какие ноги у нас Rx и Tx для Bee-модулей.

    Для инициализации Bee есть такой кусок кода:
    Код (Text):
    SoftwareSerial uart(Tx, Rx);
    WiFly wifly(uart);
    Что подставлять в случае со стрелой вместо Tx и Rx?
    Инструкции курил - ничего не нашел ((
     
  6. Unixon

    Unixon Оракул Модератор

    Пины 0 и 1, как на других ардуинах.
    См http://wiki.amperka.ru/продукты:strela, раздел "Коммуникация".
     
  7. Creator

    Creator Нерд

    Спасибо, табличку видел, но не думал, что эти ноги относятся к разъему XBee.
    В-общем, не получается пока подключиться.
    При том, что роутер в логах факт подключения показывает, IP присваивает.

    Код такой:
    Код (Text):
    #include <Arduino.h>
    #include <SoftwareSerial.h>
    #include "WiFly.h"

    #define SSID      "..........."
    #define KEY      "............"
    #define AUTH      WIFLY_AUTH_WPA2_PSK

    SoftwareSerial uart(0, 1);
    WiFly wifly(&uart);

    void setup() {
      uart.begin(9600);
    delay (1000);
      Serial.begin(9600);
      Serial.println("--------- WIFLY TEST --------");

      // wait for initilization of wifly
      delay(5000);

      uart.begin(9600);    // WiFly UART Baud Rate: 9600

      wifly.reset();

      Serial.println("Join " SSID );
    if (wifly.join(SSID, KEY, AUTH)) {
    Serial.println("OK");
    } else {
      Serial.println("Failed");
    }
    Возвращает, понятное дело, Failed.

    И еще нубский вопрос - чем надо определить DEBUG для включения режима отладки? Посмотрел код библиотек - вроде при включении отладки библиотека добросовестно дублирует всё, переданное в XBee, в монитор последовательного порта (= на экран).

    Сейчас принудительно включил DEBUG (закомментил всё лишнее), итог такой:
    Что могло пойти не так?
     
    Последнее редактирование: 15 апр 2015
  8. iglooshtosser

    iglooshtosser Гик

    Я ошибаюсь или у Вас и для взаимодействия с модулем:
    SoftwareSerial uart(0, 1);
    .....
    uart.begin(9600);

    И для взаимодействия с компом:
    Serial.begin(9600);

    ипользуются одни и те же ноги 0 и 1?

    Не вернее ли софтовый uart повесить на другие...
    и подключить именно к ним rx и tx модуля?

    Мне кажется что отладка через сом-ПК и общение ардуины с модулем дерутся...
     
  9. Creator

    Creator Нерд

    В этом и вопрос. XBee втыкается в специально отведенное для него место, где подписей касательно того, что у нас Rx, а что Tx - нет.
    С другой стороны, если бы ноги были одними и теми же - я бы видел все команды, отправляемые на XBee, и без включения режима отладки. Однако этого не наблюдалось.
     
  10. iglooshtosser

    iglooshtosser Гик

    Это справедливо если "всё работает как ожидается".
    Но насколько я помню в леонарде сам контроллер отвечает за преобразование uart-юсб. Если для этого используется 0 и 1. то там не сигнал uart, а usb

    то есть получается что uart модуля подключен к usb микроконтроллера....

    Если же для usb используются другие выводы МК, то...

    Ещё есть вариант что я чего-то не знаю / не понимаю.
     
  11. acos

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

    На Стреле, как и на всех leonardo пины 0 и 1 это Serial1
    т.е. код будет какой-то такой

    Код ( (Unknown Language)):
    #include <Arduino.h>
    #include <SoftwareSerial.h>
    #include "WiFly.h"

    #define SSID      "..........."
    #define KEY      "............"
    #define AUTH      WIFLY_AUTH_WPA2_PSK

    WiFly wifly(&Serial1);

    void setup() {
      Serial1.begin(9600);
    delay (1000);
      Serial.begin(9600);
      Serial.println("--------- WIFLY TEST --------");

      // wait for initilization of wifly
      delay(5000);

    //  uart.begin(9600);    // WiFly UART Baud Rate: 9600

      wifly.reset();

      Serial.println("Join " SSID );
    if (wifly.join(SSID, KEY, AUTH)) {
    Serial.println("OK");
    } else {
      Serial.println("Failed");
    }
    При этом привычный Serial это USB. Эти ноги выведены только на USB и больше никуда)

    Дальше. Во всех Arduino Leonardo в отличии от Arduino Uno, SoftwareSerial может находится не на всех ногах. TX может быть на любой, а вот RX - нет. http://arduino.cc/en/Reference/softwareSerial
     
    Creator нравится это.
  12. Creator

    Creator Нерд

    Блин, заработало!!! Гран мерси!!!
    Подскажи, пожалуйста, а есть где мега-ссылка, которую надо прочесть сверху донизу, чтобы таких вопросов не возникало?
    Сам я, например, до второго пришествия искал бы &Serial1.
     
  13. Creator

    Creator Нерд

    А вот еще вопрос.

    Библиотеки Strela.h и рекомендованная для работы с приемником IR IRemote.h в одном скетче не уживаются.

    Проблема в том, что обе библиотеки пытаются определить прерывание TIMER4_OVF_vect

    Закомментил для эксперимента в Strela.cpp определение прерывания (строка 44 и ниже) - началась какая-то фигня с движками, пришлось раскомменчивать обратно.

    В IRemote.cpp ничего уже пробовать не стал.

    Как можно полечить ситуацию?
     
  14. Creator

    Creator Нерд

    Ошибку можно посмотреть на простейшем примере:

    Код (Text):
    #include <Wire.h>
    #include <Strela.h>
    #include <IRremote.h>

    void setup() {
      // put your setup code here, to run once:

    }

    void loop() {
      // put your main code here, to run repeatedly:

    }
    Ошибка выглядит так:
    Код (Text):

    var/folders/q2/3ttsw6hs5_jgydcv8v8mf7r40000gn/T/build1296348452396796681.tmp/IRremote/IRremote.cpp.o: In function `__vector_41':
    /Users/arthur777/Documents/Arduino/libraries/IRremote/IRremote.cpp:361: multiple definition of `__vector_41'
    /var/folders/q2/3ttsw6hs5_jgydcv8v8mf7r40000gn/T/build1296348452396796681.tmp/Strela/Strela.cpp.o:/Users/arthur777/Documents/Arduino/libraries/Strela/Strela.cpp:44: first defined here
    collect2: error: ld returned 1 exit status
     
    Плата выбрана Leonardo, все дела.
     
    Последнее редактирование: 1 май 2015
  15. Creator

    Creator Нерд

    Путем экспериментов выяснилось следующее:

    1. Закомменчивание в Strela.cpp процедуры обработки прерывания ISR(TIMER4_OVF_vect) приводит к неадекватному поведению движков (однажды включается один канал, и привет);
    2. Закомменчивание в IRremote той же самой процедуры обработки прерывания приводит к невозможности приёма сигнала по IR;
    3. Объединение кода процедур в обоих библиотеках - аналогично, неадекватное поведение движков.

    Возможно, что-то делаю не так.
    Как лечить?
     
  16. 1590kazak1590

    1590kazak1590 Нерд

    Решение на предыдущей странице =)
     
    Creator и acos нравится это.
  17. Creator

    Creator Нерд

    Я был слеп - и прозрел!!!

    Полноприводная бричка поехала!!!
     
    1590kazak1590 и acos нравится это.