Pages: [1]   Go Down
Author Topic: ¿Por qué no compila?  (Read 1671 times)
0 Members and 1 Guest are viewing this topic.
Alicante
Offline Offline
Sr. Member
****
Karma: 2
Posts: 413
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Radiofrecuencia y servomotores mezclados.He trabajado con los dos por separado y funciona perfecto, pero cuando los uno, no funciona.
La función es mediante radiofrecuencia, mover servos a determinadas posiciones.Por problemas de compatibilidad entre librerias.¿Qué hago?
GRACIAS!
Code:
#include <VirtualWire.h>

#include <Servo.h>

Servo myservo;  

int pos = 0;    



int pinRx = 4;

void setup(){
   myservo.attach(9);  


  Serial.begin(9600);

  vw_set_rx_pin(pinRx);
  vw_setup(2000);
  vw_rx_start();
//setup


}

void loop(){

  uint8_t mensaje[VW_MAX_MESSAGE_LEN];
  uint8_t longitud = VW_MAX_MESSAGE_LEN;

  if (vw_get_message( mensaje , &longitud ) ){    
    Serial.print("Recibido -> ");
    Serial.println( mensaje[0] );
    
    if( mensaje[0] == 'A' ){
      myservo.write(pos);            
    delay(15);  
  
      
              
    }else if( mensaje[0] == 'R' ){
                
    }else if( mensaje[0] == 'V' ){
      
}else if( mensaje[0] == 'N' ){
        
  
  }
}
}
« Last Edit: March 16, 2012, 05:53:14 pm by a9965 » Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 724
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,
si no compila, te dará algún error. ¿Podrías indicarnos?

Logged

Alicante
Offline Offline
Sr. Member
****
Karma: 2
Posts: 413
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

VirtualWire\VirtualWire.cpp.o: In function `__vector_11':
C:\Users\Santi\Desktop\arduino-1.0\libraries\VirtualWire/VirtualWire.cpp:416: multiple definition of `__vector_11'
Servo\Servo.cpp.o:C:\Users\Santi\Desktop\arduino-1.0\libraries\Servo/Servo.cpp:103: first defined here




Gracias!
Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 724
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,
en Google hay bastantes menciones a ese conflicto de esas dos librerías. Busca en Google trozos del mensaje de error como multiple definition of  __vector_11
Parece que el problema está en que las dos usan el mismo timer.
En algún sitio he visto que presentan como alternativa usar "SoftwareServo.zip"
http://www.arduino.cc/playground/ComponentLib/Servo
Mi conocimiento de los timer es escaso, seguro que hay gente que conoce más profundamente el problema.

Logged

Alicante
Offline Offline
Sr. Member
****
Karma: 2
Posts: 413
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si he estado mirando. La solución esta en usar la librería timerServo2. Pero no encuentro su sintaxis ni información acerca de ésta en Arduino.

¿Alguien sabe ésto?

Un saludo y gracias por su atención!
Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 724
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,
Mira en la página http://letsmakerobots.com/node/12803
Ahí tienes un link para bajar la librería ServoTimer2
« Last Edit: March 17, 2012, 01:12:58 pm by curro92 » Logged

Alicante
Offline Offline
Sr. Member
****
Karma: 2
Posts: 413
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Instalada ya la tenía, pero gracias de todas formas.
Es que en ningún sitio pone nada acerca de la libreria.
Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 724
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,

ahí va un ejemplo sacado de aquí http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?action=print;num=1285514626

Code:
// this sketch cycles three servos at different rates

#include <ServoTimer2.h>  // the servo library

// define the pins for the servos
#define rollPin  2
#define pitchPin 3
#define yawPin   4

ServoTimer2 servoRoll;    // declare variables for up to eight servos
ServoTimer2 servoPitch;
ServoTimer2 servoYaw;

void setup() {
 servoRoll.attach(rollPin);     // attach a pin to the servos and they will start pulsing
 servoPitch.attach(pitchPin);
 servoYaw.attach(yawPin);
}


// this function just increments a value until it reaches a maximum
int incPulse(int val, int inc){
  if( val + inc  > 2000 )
   return 1000 ;
  else
    return val + inc;
}

void loop()
{
int val;

  val = incPulse( servoRoll.read(), 1);
  servoRoll.write(val);

  val =  incPulse( servoPitch.read(), 2);
  servoPitch.write(val);

  val = incPulse(servoYaw.read(), 4);
  servoYaw.write(val);

  delay(10);
}

Logged

Alicante
Offline Offline
Sr. Member
****
Karma: 2
Posts: 413
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Muchas gracias! Lo pruebo y te digo algo. Un saludo
Logged

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Teniendo en cuenta que es una librería del 2009, es imposible que funcione sin retoques en la versión 1.0 del IDE
Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

Alicante
Offline Offline
Sr. Member
****
Karma: 2
Posts: 413
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ya he conseguido que vaya. Desde un teclado inalámbrico pulso el 1 y se mueve a un lado, y debería de ser que pulse el 2 y para el otro lado. Pero se queda bloqueado. Es cosa de que hay que meterle un refresco al servo o algo, no se si me explico.
Gracias a todos!


Code:
#include <ServoTimer2.h>
#include <VirtualWire.h>
int rollPin=9;
ServoTimer2 servoRoll;




int pinRx = 4;

void setup(){
   pinMode(13,OUTPUT);
servoRoll.attach(rollPin);     

  Serial.begin(9600);

  vw_set_rx_pin(pinRx);
  vw_setup(2000);
  vw_rx_start();
//setup


}


void loop(){
 
 
   
  uint8_t mensaje[VW_MAX_MESSAGE_LEN];
  uint8_t longitud = VW_MAX_MESSAGE_LEN;

  if (vw_get_message( mensaje , &longitud ) ){   
    Serial.print("Recibido -> ");
    Serial.println( mensaje[0] );
   
    if( mensaje[0] == 'A' ){
       servoRoll.write(100);        // Lo mueve hasta aquí, pero hay que meterle algo para que...
   
             
    }else if( mensaje[0] == 'B' ){
     servoRoll.write(50);            //...aquí te deje moverlo de nuevo
       

               
    }else if( mensaje[0] == 'V' ){
     
       
}else if( mensaje[0] == 'G' ){
   
  }
}
}
« Last Edit: March 17, 2012, 08:12:20 pm by a9965 » Logged

Alicante
Offline Offline
Sr. Member
****
Karma: 2
Posts: 413
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hace como un ruido, como si se estuviera forzando. Ayudadme cuanto podais necesito tener ésto para esta semana.
Gracias un saludo
Logged

Alicante
Offline Offline
Sr. Member
****
Karma: 2
Posts: 413
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

He estado realizando pruebas un buen rato. He retirado del código las acciones de mover el servo y para mi sorpresa, descubro que sigue con el 'forceo' que anteriormente, creia que era del código.
Logged

Alicante
Offline Offline
Sr. Member
****
Karma: 2
Posts: 413
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ya lo he conseguido. Pero sigo con el problema de que el servo se queda 'pillado'. El motor interno se mueve quedándose bloqueado.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola yo he probado a modificar los Timer de la librería Virtual Wire, concretamente el Timer1 lo he renombrado como TimerX en todas la líneas del código (creo recordar que eran 2) de la librería VirtualWire.cpp y los errores de compilación desaparecen al trabajar con las dos librerías VirtualWire y Servo.
He intentado trabajar también con las librerías SoftwareServo y ServoTimer2 pero mi sorpresa es que arduino parece no reconocerlas, pues al importarlas no quedan marcadas de color como ocurre con otras librerías y las instrucciones del código, además de dar varios errores al compilar.
Logged

Pages: [1]   Go Up
Jump to: