Bonjour / Bonsoir
Je suis en train de travailler sur mon premier vrai projet Arduino depuis maintenant quelques mois.
J'ai vraiment TRÈS bien progressé mais là, depuis 2 jours, je suis bloqué. Habituellement, je cherche jusqu'a ce que je trouve la solution par moi même (généralement en me documentant) car c'est comme ca que j'apprend le mieux. Mais ce soir, j'avoue, je suis à court d'idée. Je me permet donc de vous soumettre mon problème.
J'utilise dans mon projet principalement 2 libraries: ethercard (module ENC28j60) et RF24 ( nRF24L01)
J'ai deja fais pas mal de tests avec ces deux libraries ensemble et je n'ai jamais eu de problème auparavant. Elles fonctionnent très bien toutes les deux.
Voici ce que je fais mon projet en mode simplifié:
J'ai un serveur web qui tourne sur l'arduino, il recoit une requete, il recupère une valeur passé dans la querystring et il envoit cette valeur par onde radio via le RF24 à un autre arduino.
Jusque la cela fonctionnait bien.
Je voudrais maintenant que ma value recu soit aussi en même temps envoyé a PACHUBE (ou devrais je dire COSM maintenant)
Avec la librarie Ethercard, il y a un exemple pour envoyer des data sur PACHUBE. Je l'ai testé, ca fonctionne super. J'ai donc repris ce bout de code et l'ai ajouté a mon code principal. Mais depuis que j'ai fais ca, je suis impossible de compiler mon code, j'ai toujours 4 erreurs:
error: __c causes a section type conflict
qui apparait vis à vis de ce morceau de code:
Stash::prepare(PSTR("PUT http://$F/v2/feeds/$F.csv HTTP/1.0" "\r\n"
"Host: $F" "\r\n"
"X-PachubeApiKey: $F" "\r\n"
"Content-Length: $D" "\r\n"
"\r\n"
"$H"),
website, PSTR(FEED), website, PSTR(APIKEY), stash.size(), sd);
C'est le PSTR qui pose problème.
J'ai essayé d'enlever le plus d'info dans mon code pour essayer de trouver l'endroit qui cause problème et je me suis rendu compte que les deux libraries déclarent PSTR
RF24Config.h pour la lib RF24
// Avoid spurious warnings
#if 1
#if ! defined( NATIVE ) && defined( ARDUINO )
#undef PROGMEM
#define PROGMEM __attribute__(( section(".progmem.data") ))
#undef PSTR
#define PSTR(s) (__extension__({static const char __c[] PROGMEM = (s); &__c[0];}))
#endif
#endif
// Progmem is Arduino-specific
#ifdef ARDUINO
#include <avr/pgmspace.h>
#define PRIPSTR "%S"
#else
typedef char const char;
typedef uint16_t prog_uint16_t;
#define PSTR(x) (x)
#define printf_P printf
#define strlen_P strlen
#define PROGMEM
#define pgm_read_word(p) (*(p))
#define PRIPSTR "%s"
#endif
Et dans tcpip.cpp pour la lib Ethercard
// Avoid spurious pgmspace warnings - http://forum.jeelabs.net/node/327
// See also http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34734
#undef PROGMEM
#define PROGMEM __attribute__(( section(".progmem.data") ))
#undef PSTR
#define PSTR(s) (__extension__({static prog_char c[] PROGMEM = (s); &c[0];}))
J'ai essayé de me documenter sur cela mais cela depasse mes compétences malheuresement.
Je comprend l'utilité de PROGMEM (après mettre documenté)... J'imagine que PSTR c'est pour dire "print string" et que par conséquent, j'imagine que ca sert à "printer" une valeur qui etait setté avec progmem...
Mais à part cela...
J'ai fais pas mal de test:
-Supprimer ces defines
-Laisser seulement ceux de RF24
-Laisser seulement ceux de Ethercard
-Supprimer les deux et inserer juste ceux de ethercard à meme mon fichier ino
-Remplacer celui de RF24 par exactement le même que celui de ethercard.
Je suis à court d'idée. Si jamais quelqu'un a une piste, je suis preneur!
Je met le code source de mon programme qui ne compile pas en l'état des lieux:
https://dl.dropbox.com/u/138037/web/code.ino
Et voici les liens vers les deux libs en question:
Merci beaucoup