Go Down

Topic: Coder une carte Arduino avec CodeBlocks (Read 4453 times) previous topic - next topic

abernard



Bonjour,



Dans le cadre de mon projet, je dois coder une carte Arduino avec un logiciel plus adapté que celui de base, car j'ai un module d'incrustation vidéo en liaison SPI qui doit être codé en C.


J'ai essayé WinAVR puis Eclipse, sans succès, malgré l'abondance de tutos que j'ai suivis à la lettre. Mais bon, j'ai cru comprendre que faire fonctionner une carte Arduino avec ces logiciels pour un débutant comme moi relevait de l'exploit, alors passons...


Après une semaine d'essais laborieux, j'ai découvert l'existence d'une version de CodeBlocks pour Arduino, qui possède déjà toutes les librairies et ne nécessite pas l'installation de composants obscures tels que GCC GNU AVRdude, et je sais plus quoi.

J'ai réussi en même pas 5 minutes à faire blinker la petite LED en me faisant accueillir par un joli petit "Hello World". J'ai sauté de joie, je me suis mis à coder mon programme, j'ai compilé, et la... la petite LED qui clignote, "Hello World" toujours présent, alors que le projet a été entièrement modifié, et que les commandes à l'origine de ces effets ne sont plus présentes !

J'ai cherché la cause du problème en essayant de refaire un programme test, en mettant bonjour à la place de Hello World, rien n'y fait. Et pourtant quand je compile sur le simulateur tout fonctionne... Je peux supprimer tout ce que je veux entre les bornes de la fonction setup et loop, coder d'autres fonctions... ça ne change rien.

Par contre si j'écris n'importe quoi j'obtiens tout de même une erreur de compilation.

Pour résumer, les programmes fonctionnent, sur le simulateur, mais dès que je veux passer ce programme sur la carte Arduino, la LED clignote et hello world s'affiche à l'ecran, alors que RIEN dans le code ne peux être à l'origine de ça.

J'en conclue que Arduino a du garder en mémoire le premier programme qu'on lui a présenté, et qu'on doit faire une manip spéciale pour le supprimer de sa mémoire et en mettre un autre, je me trompe ?

Si non, comment je fais ça ?

Si oui, quel peut alors être le problème et sa solution?

Si quelqu'un a une idée, je lui serais extrêmement reconnaissant de m'apporter de l'aide :)  Cette situation est vraiment frustrante..

patg_

J'ai pas compris la question...quelle erreur de compilation as-tu?

Personnellement je développe avec Atmel Studio et le plugin VisualMicro.
On a un vrai IDE et la compatibilité des sketches avec l'IDE Arduino.
C'est vraiment très simple à installer.

Mes Arduineries: http://breizhmakers.over-blog.com/

68tjs

Quote
faire fonctionner une carte Arduino avec ces logiciels pour un débutant comme moi relevait de l'exploit, alors passons...
Non il faut seulement seulement du calme et de la réflexion.
Quote
l'installation de composants obscures tels que GCC GNU AVRdude, et je sais plus quoi.
Alors là tu es vraiment mal parti. On va dire que c'est sous l'effet de la fatigue :D

- GNU GCC
un composant obscur il y en a qui vont faire des bonds au plafond.
C'est LE compilateur libre il est tellement bon qu'il a été porté  sous W$ sous le nom  MinGW.

- avrdude
un composant obscur : figure toi que pour transférer un programme dans un micro-contrôleur il faut un logiciel spécialisé et que justement avrdude EST LE logiciel spécialisé pour les micro qui sont dans les cartes arduino.

- Il faut aussi avr-gcc qui est l'interface obligatoire pour utiliser GCC avec un micro avr.
avr-gcc est fourni par Atmel.

Il faudrait faire l'effort minimal de comprendre ce qu'il faut faire avec un micro-contrôleur, ça aide quand cela ne marche pas.

Si le programme ne se transfère pas c'est qu'il te manque le composant obscur avrdude où que Code::Blocks est mal configuré :smiley-mr-green: .
Par exemple il y a deux modes Debug et Release. Souvent avrdude n'est invoqué que dans le mode Release.

Avec Clock::Blocks tout comme avec Eclipse il faut installer un plug-in spécialisé pour les avr, attention ce n'est pas le même pour Eclipse et Code::Blocks.

Un peu de lecture (et un peu de calme pendant la lecture ) :
http://www.arrizza.com/cgi-bin/pub?ArduinoHowTo
http://www.arrizza.com/cgi-bin/pub?CreateArduinoGenericProject
http://www.arrizza.com/cgi-bin/pub?CreateArduinoLedBlink
http://www.arrizza.com/cgi-bin/pub?CreateArduinoStaticLibrary

Evidement tout est pour Linux mais c'est normal : tout est plus facile avec Linux.
Avec W$ il te faudra sans doute faire beaucoup plus de configurations manuelles.

Il existe aussi d'autres plug-in développés par des membres du forum qui recréent un environnement Arduino.
http://forum.arduino.cc/index.php?topic=79595.0    --> Pour Eclipse (W$, Lin, Mac)
et un autre que je ne retrouve pas pour Code::Blocks mais c'est peut-être celui que tu utilise.

Bonne lecture .

Yan_duino

Bonjour,
a mon avis c'est un problème de paramètrage et il n'y a pas de téléversement dans l'arduino.

moi c'est sublim text + Stino que j'utilise , interface puissante et complètement gratuit.

Il y aura toujours débat sur ce genre d'ide mais bon.
Voici donc un lien pour une installation parfaite.

http://eskimon.fr/2224-arduino-mini-tuto-utiliser-sublime-text-ide

Bonne continuation.

Yan_duino

lilo

Mais avec l'IDE de base d'arduino, ça donne quoi ? Je ne vois pas en quoi la programmation en C le rendrait rédhibitoire, c'est même fait pour à ce que je sache.

patg_

Mais avec l'IDE de base d'arduino, ça donne quoi ? Je ne vois pas en quoi la programmation en C le rendrait rédhibitoire, c'est même fait pour à ce que je sache.
C'est pas rhédibitoire mais pénible.
J'ai du mal à me passer de code-assist, question de productivité.
J'aime bien aussi avoir un débuggueur sous la main, je sais m'en passer (je développe depuis quelques décennies) mais je crois que je vais finir par investir dans la version payante de visualmicro pour avoir le débuggueur (limité mais pratique apparemment).

C'est un débat sans fin entre ceux qui préfèrent les trucs bruts "à la dure" et ceux qui préfèrent un IDE qui les aide. Mon temps libre étant limité et mon temps professionnel facturé au plus juste, je préfère les IDE complets, à la maison comme au boulot  :)
Mes Arduineries: http://breizhmakers.over-blog.com/

abernard

#6
May 28, 2015, 01:46 pm Last Edit: May 28, 2015, 02:09 pm by abernard
Non, non il n'y a pas d'erreurs de compilations, juste un problème de transfert du code à l'Arduino :)

Non il faut seulement seulement du calme et de la réflexion.

Il faudrait faire l'effort minimal de comprendre ce qu'il faut faire avec un micro-contrôleur, ça aide quand cela ne marche pas.

En fait, c'est bien la tout le problème !

Je suis près à passer le temps qu'il faut pour comprendre le fonctionnement de tout ça, mais impossible de trouver les ressources nécessaires sur Internet...
C'est comme si j'étais assoiffé et que j'essayais de boire à l'aide d'un carcher, il y a de l'eau qui coule, mais trop vite pour que j'en puisse en saisir une goute.

Impossible de trouver un cours adapté à ce que je recherche et à mon niveau (c'est à dire le niveau 0).


j'ai regardé les liens que tu m'as envoyé, mais il s'agit encore d'une suite d'instructions que je vais devoir suivre à la lettre sans rien y comprendre... et ça me gène, parce que 9 fois sur 10 le tuto ne marche pas et je suis incapable de déterminer à quel moment j'ai fait une erreur, ou si je n'ai pas fait d'erreurs et que je dois faire des manipulations supplémentaires auquel cas j'ai autant laisser tomber de suite.


Je vais essayer avec le logiciel Arduino de base, ainsi qu'avec tout ce que vous me proposez, il va bien y avoir quelque chose qui marche. Vu que je n'ai aucune idée de comment configurer Code:Blocks en raison de l'absence de ressources sur le sujet (ou alors c'est moi qui ne sait pas chercher).

Mais avec l'IDE de base d'arduino, ça donne quoi ? Je ne vois pas en quoi la programmation en C le rendrait rédhibitoire, c'est même fait pour à ce que je sache.
Si le logiciel de base est capable de comprendre ce genre de code, alors pourquoi pas oui !
https://github.com/sparkfun/On_Screen_Display_Breakout-MAX7456/blob/V_1.3/Firmware/MAX7456_sample_code/main.c

En tout cas merci pour vos réponses !

68tjs

#7
May 28, 2015, 01:57 pm Last Edit: May 28, 2015, 02:10 pm by 68tjs
Quote
j'ai regardé les liens que tu m'as envoyé, mais il s'agit encore d'une suite d'instructions que je vais devoir suivre à la lettre sans rien y comprendre... et ça me gène.
Tu veux un IDE évolué, Eclipse en est un. Mais comme tout IDE évolué Eclipse est plus compliqué à appréhender qu'un IDE basique. Je suis désolé mais pour utiliser Eclipse il faut apprendre à s'en servir. La configuration fait partie de l'apprentissage.

As tu consulté et lu le tuto d'Eskimon ?
Tu apprendra des choses intéressantes sur le fonctionnement des micro-controleurs et sur la programmation arduino..

IDE arduino:
Les derniers essais que j'ai fait en ajoutant des fichiers non *.ino ne fonctionnaient qu'avec des fichiers *.cpp, je n'ai plus réussi avec des fichiers *.c, mais c'est peut-être moi qui ai cafouillé..

Chose à savoir avec les fichiers *.ino :
Si tu ajoutes des fichiers *.ino à ton projet ils seront concaténés dans l'ordre alphabétique au fichier ino original.
Pour le compilateur se sera comme s'il n'existait qu'un seul fichier ino qui sera recompilé à chaque modification.
Il faudra bien choisir les noms de fichier ou sinon cela peut être le bazar.
L'ajout de fichier *.h et *.cpp me parait moins risqué même si c'est un peu moins évident. Avantage seuls les fichiers modifiés seront recompilés.

abernard

#8
May 28, 2015, 02:38 pm Last Edit: May 28, 2015, 05:17 pm by abernard
Je suis désolé mais pour utiliser Eclipse il faut apprendre à s'en servir. La configuration fait partie de l'apprentissage.

Non, je ne suis pas d'accord avec ce point. Me faire balader dans des labyrinthes de menus par des tutos comme
http://horrorcoding.altervista.org/arduino-development-with-eclipse-a-step-by-step-tutorial-to-the-basic-setup/
ou encore
http://playground.arduino.cc/Code/Eclipse
pour y écrire des lignes de commande bizarres, ajouter des paths dans tous les sens, etc. pour au final obtenir des erreurs de compilations du style
make: [arduino_eclipse_test.hex] Error 1 (ignored)
make: [arduino_eclipse_test.lss] Error 1 (ignored)
make: [sizedummy] Error 1 (ignored)

avec aucun indice pour les résoudre, j'appelle pas ça de l'apprentissage... Si les tutos étaient fait de façon à ce qu'à chaque étape on explique le pourquoi du comment, ça aiderait peut être à s'en sortir à la fin. La j'ai l'impression de composer une formule magique et d'attendre que le miracle se produise.

J'en demande peut être beaucoup, mais je trouve ça insensé que les gens à l'origine de tout ça ne fasse pas plus d'effort pour essayer de rendre leur oeuvre compréhensible. J'ai l'impression qu'ils gardent jalousement tout le savoir dont ils disposent pour ne pas qu'il tombe dans les mains de la masse, et ainsi qu'ils ne jouissent plus du privilège de "savoir".


Par ailleurs j'ai lu les tutos d'eskimon, qui m'ont bien servis, mais qui n'aident pas en revanche à franchir la barrière "logicielle".


Merci pour les explications sur les fichier .ino :)

J'ai codé mon programme avec plusieurs fichiers sources en .c et des headers .h comme n'importe quel programme en C.

Si je veux utiliser le logiciel Arduino, il faut donc que j'adapte le programme afin qu'il rentre dans un seul fichier .ino ? (ou plusieurs mais puisqu'ils sont concaténés cela revient au même, non?)

Et si j'utilise un logiciel tiers je pourrais faire sans .ino et tout mettre tel quel ? J'ai du mal à voir comment on peut mixer des fichiers .ino .c et .h ensemble...

68tjs

Quote
Si je veux utiliser le logiciel Arduino, il faut donc que j'adapte le programme afin qu'il rentre dans un seul fichier .ino ? (ou plusieurs mais puisqu'ils sont concaténés cela revient au même, non?)
Je pensais avoir écrit le contraire.

Alors je répète :
Dans l'IDE arduino si tu ajoutes d'autres fichiers avec l'extension ino ils seront ajoutés à la fin de ton fichier principal pour ne former qu'un seul fichier toujours en extension ino

Si tu ajoutes des fichiers cpp et les fichiers h associées ils seront compililés individuellement pour créer des fichiers objets. Tous les fichiers objets seront associés par le programme éditeur de liens ( le linker).

La méthode la moins prise de tête pour ajouter des fichiers cpp et h.
1) tu crée un nouveau projet avec l'IDE arduino.
L'IDE créera un répertoire dans lequel il y aura un fichier en extension ino qui portera le même nom que le répertoire.
2) ceci fait tu ferme l'IDE Arduino
3) Dans le répertoire tu crée les fichiers cpp et h  dont tu as besoin. Peut importe le nom donné.
4) Tu rouvre l'IDE et tous les fichiers que tu viens de créer apparaitront dans des onglets.

Pour plus de confort dans l'écriture du code tu peut utiliser un éditeur externe  sous W$$ il y  notepad++. Ce choix se fait en ouvrant l'onglet Fichier puis Préférences.

Christian_R

+1, l'IDE Arduino est amplement suffisante pour débuter un petit projet.

Passer par l'installation et la configuration d'Eclipse pour faire clignoter une led c'est presque du masochisme.

Christian

68tjs

Quote
Passer par l'installation et la configuration d'Eclipse pour faire clignoter une led c'est presque du masochisme.
Eh je l'ai fait et je ne suis pas maso :smiley-mr-green:

Plus sérieusement je suis d'accord avec toi , c'était par curiosité : veni, vedi , petitement vinci et déçu d'être obligé de tout configurer à chaque nouveau projet.
Donc Eclipse c'est effectivement pour les projets où il y a beaucoup de fichiers à gérer.
Il reste que pour un débutant les messages d'erreurs d'Eclipse sont moins abscons que ceux de l'IDE arduino Wiring

L'ennui avec l'IDE  arduino Wiring  c'est qu'elle est capable de faire plus de chose que ce qui est annoncé mais c'est bien caché. Il faut fouiller pour connaître ses possibilités.
C'est comme si l'équipe Arduino faisait tout pour qu'on ne sorte pas des fichiers ino.

Go Up