Go Down

Topic: [Résolu] Lib "VirtualWire.h" incompatible avec Lib "Servo.h" !!? (Read 971 times) previous topic - next topic

cutprod

Feb 27, 2012, 11:04 pm Last Edit: Feb 29, 2012, 09:07 pm by cutprod Reason: 1
Bonjour a tous, mon projet avance mais je me trouve confronté à un problème de lib!!!
"VirtualWire" et "Servo" utilisent toute les deux le Timer1 et donc lors de la compilation ca bloque!!  :0

VirtualWire =>
Code: [Select]
// This is the interrupt service routine called when timer1 overflows
// Its job is to output the next bit from the transmitter (every 8 calls)
// and to call the PLL code if the receiver is enabled
//ISR(SIG_OUTPUT_COMPARE1A)
SIGNAL(TIMER1_COMPA_vect)
{
   vw_rx_sample = digitalRead(vw_rx_pin);

   // Do transmitter stuff first to reduce transmitter bit jitter due
   // to variable receiver processing
   if (vw_tx_enabled && vw_tx_sample++ == 0)
   {
       // Send next bit
// Symbols are sent LSB first
       // Finished sending the whole message? (after waiting one bit period
// since the last bit)
       if (vw_tx_index >= vw_tx_len)
{
   vw_tx_stop();
   vw_tx_msg_count++;
}
       else
       {
   digitalWrite(vw_tx_pin, vw_tx_buf[vw_tx_index] & (1 << vw_tx_bit++));
   if (vw_tx_bit >= 6)
   {
       vw_tx_bit = 0;
               vw_tx_index++;
   }
       }
   }
   if (vw_tx_sample > 7)
vw_tx_sample = 0;

   if (vw_rx_enabled && !vw_tx_enabled)
vw_pll();
}


Servo =>
Code: [Select]
#ifndef WIRING // Wiring pre-defines signal handlers so don't define any if compiling for the Wiring platform
// Interrupt handlers for Arduino
#if defined(_useTimer1)
SIGNAL (TIMER1_COMPA_vect)
{
 handle_interrupts(_timer1, &TCNT1, &OCR1A);
}
#endif

et plus loin...

Que faire ?  :smiley-slim:
Dites moi qu'il y a une solution!! Mon projet de tourelle radioguidé (module 433Mhz) monté sur un 4*4 géant  lui aussi radioguidé ...le tout piloté avec un joystick PS2 ne peut pas s'arrêter la  =(

skywodd

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Super_Cinci

Tu as eu la bonne réaction de fouiller dans les libs pour identifier ton problème. As-tu vraiment besoin de virtualwire? ne peux-tu pas le contourner? J'y connais rien dans virtualWire, je ne sais pas à quoi il sert. je n'utilise jamais les #include à cause de ces incompatibilités et les ressources limitées de l'arduino, je code tout en dur, comme ça, je sais ce qui est utilisé et où j'en suis...

cutprod

Merci pour vos réponses!!
@skywodd =
T'es un magicien je teste ça et je post le résultat.(j' étais prêt a commander 2 modules "nRF24L01+" dont les lib sont apparament compatible avec Servo.h ... mon porte monnaie te dit merci aussi $))
@Super_Cinci=
Ouhaaa, je t'envie de savoir coder a ce niveau!! Moi j'en suis bien loin  :( je dois m'appuyer sur ce que de vrais pros ont fais ou m'aide a faire...

skywodd


@skywodd =
T'es un magicien je teste ça et je post le résultat.(j' étais prêt a commander 2 modules "nRF24L01+" dont les lib sont apparament compatible avec Servo.h ... mon porte monnaie te dit merci aussi $))

nRF24L01+ x2, ebay ;)

Si tu n'as pas une autre lib qui utilise le timer2 tu ne devrais plus avoir de soucis.
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Super_Cinci


@Super_Cinci=
Ouhaaa, je t'envie de savoir coder a ce niveau!! Moi j'en suis bien loin  :( je dois m'appuyer sur ce que de vrais pros ont fais ou m'aide a faire...
C'est l'avantage d'avoir fait un peu de prog à l'école en 1995, l'époque où on codait en assembleur sur des AIM (ça ressemblait à des minitels...) où le Ctrl+C/Ctrl+V n'existait pas, et on n'a vu arriver les premiers compilateurs C sur PC arriver en deuxième année de BTS, mais toujours sans librairies.

Mais je trouve dommage qu'il n'y ait toujours pas une sorte de "norme" qui impose de lister les ressources utilisées par une lib, histoire que l'on sache d'entrée de jeu si une lib est compatible avec une autre, et c'est un peu ce que j'attendais de la version 1.0 de l'IDE. quand on importe une lib, l'IDE devrait vérifier que les ressources utilisées par la lib importée soient encore libre...

skywodd


Mais je trouve dommage qu'il n'y ait toujours pas une sorte de "norme" qui impose de lister les ressources utilisées par une lib, histoire que l'on sache d'entrée de jeu si une lib est compatible avec une autre, et c'est un peu ce que j'attendais de la version 1.0 de l'IDE. quand on importe une lib, l'IDE devrait vérifier que les ressources utilisées par la lib importée soient encore libre...

Déja ce qui serai un minimum, ce serait d'avoir un repository (svn ou git) avec TOUTES les librairies dispo.
Au moins ça aurait l'avantage de permettre une mise à jour centralisé et facile (ça aurait même pu être intégré à l'ide).
La team arduino a tenté un truc dans le genre, mais vu comment c'est géré personne veut l'utiliser ...
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

cutprod

#7
Feb 29, 2012, 09:07 pm Last Edit: Feb 29, 2012, 09:11 pm by cutprod Reason: 1
J'ai eu des soucis avec ServoTimer2.h l'IDE 023 me donner ces erreurs =
Code: [Select]
In file included from E:\#ARDUINO#\#IDE_ARDUINO#\arduino-0023\hardware\arduino\cores\arduino/WProgram.h:6,
                from sketch_feb29a.cpp:8:
e:/#arduino#/#ide_arduino#/arduino-0023/hardware/tools/avr/lib/gcc/../../avr/include/math.h:439: error: expected unqualified-id before 'double'
e:/#arduino#/#ide_arduino#/arduino-0023/hardware/tools/avr/lib/gcc/../../avr/include/math.h:439: error: expected `)' before 'double'
e:/#arduino#/#ide_arduino#/arduino-0023/hardware/tools/avr/lib/gcc/../../avr/include/math.h:439: error: expected `)' before 'double'

Mais dans les commentaires de la lib j'ai trouvé ce lien =  http://www.arduino.cc/playground/ComponentLib/Servo
et la miracle la lib SoftwareServo.h est pile ce qu'il me faut.
Je vous remercie bien tous les deux, à bientôt.

skywodd

Pour ceux qui auraient un probléme de compilation à cause de math.h
Code: [Select]
#undef int
#undef abs
#undef double
#undef float
#undef round

La derniére ligne suffit en général, sinon il faut faire des test pour savoir quel undef garder ou non.
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Go Up