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
El problema es que ambos Servo.cpp
intentan VirtualWire.cpp
usar el mismo vector de interrupción. En la Servo.cpp
fuente (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.cpp
lin 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.cpp
la 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.
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.h
y ServoTimer2.cpp
en ServoTimer2
el directorio de su libraries
directorio Arduino (para mí, el directorio Arduino es /usr/share/arduino
así, 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 ServoTimer2
en lugar de Servo
o SoftwareServo
.
yippie
Aakash