VirtualWire e Servo Libraries Codigos de erros possivel conflito


Servo\Servo.cpp.o: In function `__vector_11':
C:\Users\Nadiel\Desktop\arduino-1.0.3-windows\arduino-1.0.3\libraries\Servo/Servo.cpp:103: multiple definition of `__vector_11'
VirtualWire\VirtualWire.cpp.o:C:\Users\Nadiel\Desktop\arduino-1.0.3-windows\arduino-1.0.3\libraries\VirtualWire/VirtualWire.cpp:568: first defined here

Sempre que utilizo as libraries VirtualWire e Servo mostra o erro acima, já tentei de tudo para resolver mas não consigo....

Alguém sabe resolver este conflito?

Exibições: 1895

As respostas para este tópico estão encerradas.

Respostas a este tópico

então, você vai ter q abrir ou o Servo.cpp e mudar o __vector_11 para "__Servo_vector_11"

ambas usam o mesmo #define __vector_11 ou algo assim.

Mudar eu digo mudar o nome para todas as vezes que for usado o __vector_11 na lib inteira....

Obrigado, mas não tem como fazer desse jeito. Creio que o problema tenha haver com a parte abaixo quando modifico TIMER1_COMPA_vect para TIMER1_COMPA_vect1 não dá conflito porém não funciona o RF e o servo.

Este código foi retirado do Servo.cpp

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

Fui em vários fóruns em ingles e espanhol em tudo que é idioma... Mas ninguem apresentou uma solução...

Esse problema parece não ter solução....

Ambas as libs usam o timer1. Você vai ter que substituir uma das bibliotecas por uma que use um timer diferente. Existe bibliotecas tanto para o servo quanto para RF que usam um timer diferente.

Obrigado pela resposta. Você pode me apresentar alguma outra blibioteca? Meu desespero é tanto que tentei fazer um código manual para movimentar os Servos... Mas não estou tendo muito sucesso pois os servos perdem um pouco de sua precisão e parecem consumir mais corrente de que o normal ... a biblioteca Servo.h é a mais perfeita ao meu ver. Dê uma olhada em meu código:


int SERVO_PIN = 9;  
int volta = 0;
int control = 0;

void setup()
{
  pinMode(SERVO_PIN, OUTPUT);

}

int lenMicroSecondsOfPeriod = 20 * 1000;
int lenMicroSecondsOfPulse = 2.0 * 1000;

void loop()
{
volta = volta +1;

 digitalWrite(SERVO_PIN, HIGH);


 delayMicroseconds(lenMicroSecondsOfPulse);


 digitalWrite(SERVO_PIN, LOW);

 delayMicroseconds(lenMicroSecondsOfPeriod - lenMicroSecondsOfPulse);


if(volta >= 250 and control == 0){
SERVO_PIN = 9;
lenMicroSecondsOfPulse = 2.0 * 1000;
control = 1;

}

if(volta == 250 ){
SERVO_PIN = 9;
}
if(volta == 499 ){
SERVO_PIN = 8;
}

if(volta == 500 and control == 1){
 
 lenMicroSecondsOfPulse = 1.0 * 1000;
volta = 0;
control = 0;
SERVO_PIN = 9;
}

}

Você pose usar a biblioteca SoftwareServo para controlar os servos. Para a VirtualWire, dá pra usar a RCSwitch se a velocidade de comunicação não for alta. Se possível, mantenha a biblioteca Servo original.

Curiosidade: Aqui nos meus testes eu consegui um alcance maior com a RCSwitch do que com a VirtualWire e menos comandos foram perdidos.

Muito obrigado, eu não conhecia a biblioteca RCSwitch. Vou tentar aqui, mas creio que já deve ter sido solucionado o problema. Grato!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço