Конфликт библиотек Tone и IRemote
- Войдите на сайт для отправки комментариев
Сб, 22/11/2014 - 01:35
Здравствуйте, использую Arduino Uno. Вот инклюды:
#include <IRremote.h> #include "pitches.h" #include <Servo.h> .....
И получаю:
(Tone.cpp.o): In function `__vector_7': D:\Programs\Arduino\hardware\arduino\cores\arduino/Tone.cpp:535: multiple definition of `__vector_7' IRremote\IRremote.cpp.o:D:\Programs\Arduino\libraries\IRremote/IRremote.cpp:311: first defined here
Меняю таймеры в файле IRremoteint.h в строках, начиня с 27строки, но ошибка не меняется.
С Уважением, Станислав.
Там же ясно написано, что __vector_7 объявлено несколько раз. Надо имя переменной менять.
В файлах:
IRremote.cpp
IRremote.h
IRremoteint.h
Этой переменной нет.
Тогда смотри, что лежит в libraries в папке скетчей и папке с IDE.
Дело в том, что Tone и IRremote по умолчанию используют один и тот же таймер и один и тот же вектор прерывания, на который собственно и ругается компилятор. Сделать нужно следующее, так же обратите внимание, если вы хотите не только принимать сигнал, а еще и передавать, то после этих манипуляций вывод для подключения ИК-передатчика (светодиода) будет не 3, а 9.
maksim ,большое спасибо! Я уже находил такой совет на одном из англоязычных форумов, но вот IDE я не перезагружал после внесения изменинй в IRremoteint.h.
После этого появилась другая проблема.
Ошибка:
Решилось это использованием другой библиотеки SERVO, ServoTimer2.
https://code.google.com/p/arduino-ppm-servo/source/browse/libraries/ServoTimer2/
Вот только ServoTimer2 использует тот же таймер2, что и Tone, а компялятор не ругается потому что вектора разные. Но скорее всего, что то будет работать некоректно, так как каждая библиотека настраивает таймер по своему. Возможно вам и повезет и при определенный обстоятельствах все будет работать нормально.
Я вот тоже этого боюсь. Через пару минут узнаю и сообщу.
Компилится без ошибок, серва работает.