Problemas al usar Servo.h y VirtualWire.h en arduino

Estoy usando un Arduino Uno. Mi motivo es controlar un servo a través de transmisión inalámbrica usando RF. Entonces, para eso, tengo que usar tanto Virtual Wire.h como Servo.h. Pero cuando estoy compilando me muestra errores que no esta definido y otros problemas. Cuando estudié en la red, se muestra que ambos usan Timer1, por lo que tenemos que cambiar el temporizador de Servo. Así que hay algunas sugerencias y correcciones encontradas en la red que me guiaron para usar una nueva biblioteca llamada ServoTimer2.h.

http://arduino.cc/forum/index.php/topic,21975.0.html

Ahora, cuando uso esta biblioteca, no parece que se haya incluido en la biblioteca de arduino. Además, el color de Servotimer2.h tampoco cambia.

Errores mostrados al compilar

#include <VirtualWire.h>
#include <Servo.h>

void setup(){}

void loop(){}
Servo\Servo.cpp.o: In function `__vector_11':
C:\arduino-1.0.3\libraries\Servo/Servo.cpp:103: multiple definition of `__vector_11'
VirtualWire\VirtualWire.cpp.o:C:\arduino-1.0.3\libraries\VirtualWire/VirtualWire.cpp:568: first defined here
¿Qué sucede cuando quitas uno de los dos incluidos?
funciona normalmente. Como si los individuos estuvieran trabajando perfectamente pero no juntos.

Respuestas (1)

Sobre el problema de compilación

El problema es que ambos Servo.cppintentan VirtualWire.cppusar el mismo vector de interrupción. En la Servo.cppfuente (línea 103 como se menciona en el error que viste):

#if defined(_useTimer1)
SIGNAL (TIMER1_COMPA_vect)
{
  handle_interrupts(_timer1, &TCNT1, &OCR1A);
}
#endif

En VirtualWire.cpplin 568, como se menciona en el error que vio:

// Assume Arduino Uno (328p or similar)    
SIGNAL(TIMER1_COMPA_vect)
#endif // __AVR_ATtiny85__    
{
    ... ISR code here ....

Arduino Uno solo tiene un temporizador de 16 bits y Servo.cppla biblioteca parece quererlo. El problema es que la biblioteca VirtualWire también quiere usar el único temporizador de 16 bits disponible. Puede intentar reescribir una de las dos bibliotecas para usar temporizadores de 8 bits, pero puede perder características y funcionalidad.

Uso de ServoTimer2

La biblioteca ServoTimer2 está destinada a ser un reemplazo de la biblioteca servo. Esto significa que necesitará descargar la biblioteca ServoTimer2, ya que no es parte de la distribución estándar de Arduino, colocar el directorio ServoTimer2.hy ServoTimer2.cppen ServoTimer2el directorio de su librariesdirectorio Arduino (para mí, el directorio Arduino es /usr/share/arduinoasí, puse los archivos servotimer2 en /usr/share/arduino/libraries/ServoTimer2/), y luego reemplaza

#include "Servo.h"

con

#include "ServoTimer2.h"

En tu boceto. Se supone que los comandos que utiliza con la biblioteca ServoTimer2 son idénticos o similares a los comandos utilizados con la biblioteca Servo con una diferencia:

El uso y la denominación del método es similar a la biblioteca de servos del software Arduino, excepto que los anchos de pulso están en microsegundos, no en grados.

Por lo tanto, debería poder conservar la mayor parte de su código. La única diferencia es que declarará su objeto Servo como ServoTimer2en lugar de Servoo SoftwareServo.

En ServoTimer2, ¿cómo doy el comando de escritura? ¿Puedo usar servo.write (grado entre 0 y 180)
Edité mi respuesta, lo siento.