
Update : Vive Arduino sous Eclipse. Tutorial commis par votre serviteur, sur l'Arduino Playground.
Après un peu de bidouillage avec une Arduino Decimilia, quelques notes qui peuvent toujours servir. Liste modifiable selon trouvailles ^^ Merci de noter que ce n'est pas une tentative de dire du mal de l'Arduino qui reste une excellente plateforme de prototypage, mais juste de localiser quelques unes de ses fourberies. Liste valable pour l'environnement version 011.
Apparemment, la board n'aime pas du tout avoir quelque chose de branché sur le PIN 0 lors d'un upload de programme.(Normal, 0 et 1 correspondent aux E/S série)
Uploads aussi, évitez de renvoyer un programme sur la board immédiatement après un autre. Il y'a un bug (documenté) du bootloader qui le fait crasher lorsque il reçoit des données via la liaison série pendant le démarrage.
Le PIN 1 est toujours HIGH lorsque une liaison série est active. Attention donc à ne pas l'utiliser si vous utilisez la liaison série. Ça peut donner lieu à des comportements difficiles à comprendre quand on débugge un programme de cette façon.
L'interprétation du C de l'environnement Arduino est très (trop) permissive sur le typage. Pas de warning, par ex, lorsque la valeur de retour d'une fonction long est affectée à un int. Ça peut donner lieu à des bugs pénibles.
Dans le même esprit, il semble que Serial.println n'accepte pas de valeurs char[] littérales, qu'il considère systématiquement comme des int. Donc Serial.println("truc"); doit être évité et remplacé par char x[] = "truc"; Serial.println(x); Même si apparemment la première notation marche pour certainEs, à voir des exemples trouvés sur le net. En fait rien à voir : Serial.println n'accepte des chaines qu'entre guillements doubles, et traite les chaines entre guillements simples comme des valeurs numériques. Mais par contre, char x[] = 'truc'; et char x[] = "truc"; sont équivalents. Une bonne source de bugs étranges quand on navigue entre différents langages. Effectivement c'est une faute en C/C++ (les guillements simples définissent un char, les doubles un char[]) mais un warning voire une erreur ne serait pas de trop non plus.
L'environnement a du mal avec les commentaires multi-lignes qui commencent en milieu de ligne. Ainsi, les déclarations de fonctions (générées automatiquement) peuvent se retrouver intégrées dans un commentaire, ce qui peut donner lieu à des erreurs du compilateur difficiles à comprendre.
De façon générale, en cas de message douteux du compilateur, il est bon d'aller voir le code C++ produit (qui se trouve dans le sous dossier /applet/ à l'endroit où votre programme est enregistré, avec le même nom mais l'extension .cpp).