Traduire "Arduino" en "C" pour avr-gcc

Bonjour,

Je suis actuellement sur un projet codé en C qui comporte plusieurs dizaines de fichiers. Afin d'améliorer ce code je voudrai ajouter une partie ( comptage des impulsions d'un encodeur). Pour cela j'ai trouvé un composant qui fonctionne sous language "Arduino" j'aimerai donc traduire ce code pour l'ajouter a mon projet (même microcontroleur) qui est en C. Après avoir parcouru le net je ne trouve rien qui puisse m'aider à faire ça.

Auriez-vous une idée si cela est possible?

Merci d'avance

Bonjour,

Le “langage Arduino” est du C++ standard, qui se compile avec avr-gcc (ou plutôt avr-g++).

Il te faut juste récupérer les librairies et headers dans les sources d’Arduino (arduino.h, les librarires “wiring”, …)

Il n'y a pas de "language Arduino", il n'y a que du C et du Cpp.

Ce qu'on appelle improprement du langage arduino c'est une bibliothèque de fonctions qui simplifient la vie.
Exemple pour configurer une Entrée/sortie soit en entrée soit en sortie il faut aller modifier la valeur de certains registres, pour savoir lesquels il faut lire une datasheet de 500 pages , la fonction arduino: pinMode(numéro de pin, INPUT ou OUTPUT) le fait "élégament".
La bibliothèque arduino privilégie la simplicité d'usage à l'optimisation, il peut y avoir des surprises désagréables pour quelqu'un habitué à d'autres styles de programmation.

Pour avoir le code de la bibliothèque arduino c'est très simple : tu télécharge l'IDE et tu cherches dans l'arboressence (elle peut varier entre win,linux,mac) et tu trouvera le "core" avec l'ensemble des fichiers c,cpp et h.

Pour avoir la documentation des fonctions c'est encore plus simple : c'est sur ce site : Learning-> Reference.

En faisant un petit peu de recherche sur internet on trouve des tutos pour utiliser la bibliothèque "arduino" avec Eclipse, Code::Blocs et Netbeens

Et pour le "langage arduino" adapté à ton composant c'est boule de cristal puisque tu ne nous dit pas de quoi il s'agit.

Merci pour vos réponse c’est devenu un peu plus clair pour moi !

Et pour le “langage arduino” adapté à ton composant c’est boule de cristal puisque tu ne nous dit pas de quoi il s’agit.

C’est volontaire vu que l’idée est à long terme pouvoir intégrer du code “arduino” dans mon projet sans se soucier des fonctions pinMode() par ex.

J’ai juste oublié précisé que je tourne sur Ubuntu 14.04.

J’essayerai alors simplement d’intégrer le “core” avec mes fichiers voir ce que ça donne

Ubuntu c'est du Debian. L'IDE mode arduino est coupée en 2 paquets :
1 paquet IDE seule
1 paquet "core", qui pour toi devrait être le seul indispensable.

Et un paquet "arduino-makefile" qui permet de compiler et déployer un ".ino" via make, qui fera tout ce qu'il faut pour gérer avr-gcc et avrdude

Merci à vous,

J'ai pu réussir à compiler mon ancien programme en ajoutant des fonctions spécifique à arduino en spécifiant simplement le dossier "core" qui se trouve dans le dossier "arduino" :wink:

Petit complément : certaines fonctions demandent une configuration préalable, comme celles qui utilisent les timers (exemple non exclusif). Cette configuration se fait par la fonction init() qui se trouve dans wiring.c

Merci pour ce complément,

Je me suis rendu compte que ma fonction delay(); ne fonctionnait pas. Ca compile maisla led ne blink pas (et rien sur oscilloscope). Comme tu l'as bien indiqué, ça vient d'un problème de timer.

Pour faire fonctionner la librairie j'ai juste défini la valeur de F_CPU (16000000l), je me demande s'il ne faudrait pas configurer d'autres paramétres et comment les integrer (j'utiliser une mega 2560).

Edit : chose curieuse : la fonction delayMicroseconds(); fonctionne.... Je continue à creuser !
Les fonctions millis(); et micros(); ne fonctionnent pas

Merci beaucoup

C'est ce que je viens de t'écrire il faut éxécuter la fonction init() ou plus efficacement regarder dans la fonction init() ce dont tu as réellement besoin.

Edit :
Il existe toujours les fonctions _delay() et consœur de l'avr-libc qui n'utilisent pas les timers mais les subtilités du micro : comme c'est Atmel qui a fait le micro et qui écrit l'avr-libc il sait comment c'est fait à l'intérieur .
Arduino c'est pas mieux que ce que fait Atmel.

Merci à vous,

Tout marche !