I have some code set up on a Mega that uses Timer 1. I'm trying to now add in the servo library (Servo.h) but it's throwing an error "multiple definition of '_vector_17'". I changed my code over to Timer 3 and the error just moved to "vector_32".
Is the Servo library just too greedy with taking control of all the timers on the board that it's a non-starter if I have my own timers in the code already or is there a way around this?
I read that it uses Timer 5 on the Mega, but in any case it doesn't matter what timer I am using with my code, Servo.h conflicts with it. Is it really the case that in code that already uses any of the 16 bit timers that it's impossible to use this library?
Maybe you should edit "ServoTimers.h" in the Servo library. It looks like it enables uses of 5, 1, 3, and 4, by default. Remove one of those from the lists to reserve it for your use.
// Say which 16 bit timers can be used and in what order
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define _useTimer5
#define _useTimer1
#define _useTimer3
#define _useTimer4
typedef enum { _timer5, _timer1, _timer3, _timer4, _Nbr_16timers } timer16_Sequence_t;
Find the file in:
(Arduino program directory)/libraries/Servo/src/avr/ServoTimers.h
Editing "ServoTimers.h" did the trick. Odd design choice in the library to stake a claim to every 16bit timer on the board, but at least it was a simple fix.