Strela FAQ

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

  1. Unixon

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

    Скажите, когда Стрела становится "неизвестным устройством", вот этот компонент на рисунке сильно греется?

    strela_usb_overcurrent.png
     
    tirus нравится это.
  2. 1590kazak1590

    1590kazak1590 Нерд

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

    Поступил пока самым легким способом: сдал по гарантии, не ломая голову и не тратя нервы. Посмотрим, что скажут.. =)
     
  3. 1590kazak1590

    1590kazak1590 Нерд

    Здаров! Эт снова я =) (С новой стрелой)
    Такой вопрос.
    Скетч.
    Код (Text):
    #include "IRremote.h"
    #include "Wire.h"
    #include "Strela.h"


    void setup()
    {
    }

    void loop()
    {

    }
    Возникает ошибка:
    Код (Text):

    Strela\Strela.cpp.o: In function `_stepMotor':
    D:\Документы\Программы\ARDUINO\libraries\Strela/Strela.cpp:46: multiple definition of `__vector_41'
    Arduino-IRremote-master\IRremote.cpp.o:D:\Документы\Программы\ARDUINO\libraries\Arduino-IRremote-master/IRremote.cpp:375: first defined here
    collect2: error: ld returned 1 exit status
    Ошибка компиляции.
     
    А так если поменять местами библиотеку стрелы и ИК
    Код (Text):

    Arduino-IRremote-master\IRremote.cpp.o: In function `__vector_41':
    D:\Документы\Программы\ARDUINO\libraries\Arduino-IRremote-master/IRremote.cpp:375: multiple definition of `__vector_41'
    Strela\Strela.cpp.o:D:\Документы\Программы\ARDUINO\libraries\Strela/Strela.cpp:46: first defined here
    collect2: error: ld returned 1 exit status
    Ошибка компиляции.
     
    Это между собой конфликтуют библиотеки? Как это исправить?
     
    Последнее редактирование: 29 мар 2015
  4. Kopilov

    Kopilov Гик

    Лол. Недавно подобное встречалось. И откуда эти коллизии берутся?
     
  5. 1590kazak1590

    1590kazak1590 Нерд

    И как их глобально можно переименовать?
    __vector_41 - не находится, это не название.=(
    нашёл в обоих кодах "uint8_t" может оно? причём в ИК библеотеке всего 2 раза встречается. пробовал тупо переименовать - ошибки при компиляции возникают(что и ожидалось)
     
    Последнее редактирование: 29 мар 2015
  6. Kopilov

    Kopilov Гик

    Да, действительно. Значит, возникает после препроцессинга (обработки #include, #define и т.п.). Очередное подтверждение того, что макросы -- скрытая угроза.
    В самой Arduino IDE (1.0.6, а у Вас какая версия, кстати?) такую нашёл строчку кода:
    #define _VECTOR(N) __vector_ ## N
    файл ./hardware/tools/avr/lib/avr/include/avr/sfr_defs.h
    Дальше пусть авторы библиотек разбираются.
     
  7. 1590kazak1590

    1590kazak1590 Нерд

    1.6.0 версия =)

    Не знаете, может есть где альтарнативная библиотека для обработки сигналов с ИК датчика?
     
    Последнее редактирование: 30 мар 2015
  8. acos

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

    Библиотеку отсюда брали? https://github.com/shirriff/Arduino-IRremote или откуда?
    Похоже дело в использовании одного и того же таймера. _stepmotor() вообще находится в локальной области видимости Strela.cpp


    А, всё, нашел. В файлике IRremoteInt.h:
    Код (C):
    #elif defined(__AVR_ATmega32U4__)
      //#define IR_USE_TIMER1  // tx = pin 14
      //#define IR_USE_TIMER3  // tx = pin 9
      #define IR_USE_TIMER4_HS  // tx = pin 10
    Стрела использует тот же 4-й таймер для своих нужд.
    Попробуйте это место в этом файле привести к такому виду:

    Код (C):
    #elif defined(__AVR_ATmega32U4__)
      #define IR_USE_TIMER1  // tx = pin 14
      //#define IR_USE_TIMER3  // tx = pin 9
      //#define IR_USE_TIMER4_HS  // tx = pin 10
    т.е. используйте первый таймер) Не знаю, что конкретно тут означают комментарии, и странно, что вообще этот блок кода используется для teensy... Ну да ладно. В общем, если верить комменту, то для tx нужно использовать ногу MISO, именно она имеет номер 14 в pins_arduino.h для leonardo.
     
  9. 1590kazak1590

    1590kazak1590 Нерд

    Скомпилилось! Спасибо! Сам бы не понял точно, и в интернете ничего по этому поводу нет.

    Повод добавить в первый пост на вопрос-ответ.
     
  10. 1590kazak1590

    1590kazak1590 Нерд

    И даже датчик работает и декодирует сигналы! Вообще крутяк!
     
  11. acos

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

    Добавлю) А можете скетч итоговый рабочий приложить?
     
  12. Unixon

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

    Под __vector_XX_ скрывается обработчик прерывания таймера. Если в нескольких библиотеках объявлены обработчики одного и того же прерывания, то на этапе линковки возникает проблема какой из них использовать. Исправление этой ситуации выше продемонстрировал acos.
     
    1590kazak1590 нравится это.
  13. 1590kazak1590

    1590kazak1590 Нерд

    ну ладно, из стандартных примеров переделанно (почему -то немного стыдно выкладывать).
    Код (Text):
    #include "Wire.h"      //библиотеки
    #include "Strela.h"    //библиотеки
    #include "IRremote.h"  //библиотеки
    #define  RECV_PIN  P12  //директива назначить контакт 12 на вход ИК

    IRrecv irrecv(RECV_PIN); //хз
    decode_results results; //хз

    void setup()
    {
      Serial.begin(9600);
      irrecv.enableIRIn(); // старт приёма данных с ИК
    }

    void loop()
    {  long i; // сюда результат
      if (irrecv.decode(&results)) //хз
      {
      Serial.println(results.value);
      i = results.value;
      irrecv.resume(); // Receive the next value
      }
      if (i == 50167935) uDigitalWrite(L1,1);// нажали на пульте "1" - зажгли светодиод 1


    delay(100);
    }
     
    acos нравится это.
  14. 1590kazak1590

    1590kazak1590 Нерд

    Их ещё найти надо среди библиотек =)
     
  15. Unixon

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

    Ищите функции ISR(...), это и есть обработчики. (см. объявления в avr/interrupt.h)
     
  16. Creator

    Creator Нерд

    Вопрос по библиотеке Стрелы.
    IDE 1.7.0, богомерзкий Мак.

    Импортирую библиотеку в соответствии с инструкцией.
    Добавляю в скетч #include <Strela.h>
    Получаю вот такую ошибку:
    Ну ок, мне не сложно - добавляю в скетч #include <Wire.h>
    И получаю целый набор:
    Куды бечь, что смотреть?
     
  17. Creator

    Creator Нерд

    Мистика какая-то.

    Ставлю библиотеку Multiservo - всё нормально компилится, хотя в .cpp точно так же вставлен #include <Wire.h> - но только в этот раз всё почему-то находится.
     
  18. Unixon

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

    Какая плата была выбрана в IDE ?
     
  19. Creator

    Creator Нерд

    Leonardo.
     
  20. acos

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

    Arduino IDE 1.7.0 :) Это версия отсюда ? http://arduino.org/downloads
    Я бы ей пока не доверял) http://hackaday.com/2015/04/06/arduino-ide-forked/

    Православным пока считается (думаю и впредь будет считаться) вот это:
    http://arduino.cc/en/Main/Software - тут 1.6.3. последняя. С ней не пробовали?

    Wire.h ни при чём. Дело в
    #include <avr/io.h>
    #include <avr/interrupt.h>

    а в мультисерво эти штуки не используются

    Попробуйте с версией arduino 1.6.3
     
    Последнее редактирование: 13 апр 2015