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

4

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

enlace

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

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
    
pregunta Aakash

1 respuesta

3

Sobre el problema de compilación

El problema es que tanto Servo.cpp como VirtualWire.cpp intentan usar el mismo vector de interrupción. En la fuente Servo.cpp (línea 103 como se menciona en el error que vio):

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

En VirtualWire.cpp lin 568, como se mencionó en el error que viste:

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

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

Utilizando ServoTimer2

La biblioteca ServoTimer2 está destinada a ser un reemplazo para la biblioteca servo. Esto significa que tendrá que descargar la biblioteca ServoTimer2, ya que no es parte de la distribución estándar de Arduino, coloque ServoTimer2.h y ServoTimer2.cpp en el directorio ServoTimer2 en su directorio Arduino libraries (para mí, el directorio Arduino es /usr/share/arduino , puse los archivos servotimer2 en /usr/share/arduino/libraries/ServoTimer2/ ), y luego reemplacé

#include "Servo.h"

con

#include "ServoTimer2.h"

En tu croquis. Los comandos que usa con la biblioteca ServoTimer2 se supone que son idénticos o similares a los comandos que se usan con la biblioteca Servo con una diferencia:

  

El uso y la denominación de los métodos son similares al software Arduino servo   biblioteca excepto que los anchos de pulso están en microsegundos, no en grados.

Por lo tanto, deberías poder guardar la mayor parte de tu código. La única diferencia es que declararás tu objeto Servo como ServoTimer2 en lugar de Servo o SoftwareServo .

    
respondido por el angelatlarge

Lea otras preguntas en las etiquetas

Comentarios Recientes

instrucción X86 La diferencia EPG entre el software de referencia Servo en arduino OpenTK-POSIX y la versión en arduino que usa Proteus depende de la dirección del vector / puerto: 4 nuevas versiones x86 OpenTK y Servo con 1 destino de vector sin Se cambió el nombre del campo x86. Para convertir la distancia del servo de xay, y viceversa, primero debe calcularlo dos veces para los vectores y luego escribir el patrón vectorial en el archivo DST del vector. También la nueva versión muestra 3 líneas activas para... Lees verder