-
il n'existe pas de langage arduino, c'est très clair.
-
Le langage utilisé par Arduino pour son ensemble de fonctions et de classes est tout simplement le langage C++.
-
Le mieux est au minimum de lire un tuto d'initiation, même raz les paquerettes, au C/C++.
Un autre tuto est très utile celui d'Eskimon, il est complet dans le sens ou il traite aussi bien de programation que de la façon de gérer le matériel.
eskimon.fr
Qu'est-ce qu'une Bibliothèque :
Je pars du principe que l'on utilise un logiciel qui s'appelle un Environnement de Développement Intégré, soit EDI en français et IDE en anglais.
Comme l'IDE Arduino.
La différence entre la programation en fichiers séparés et une bibliothèque est que les fichiers de bibliothèque sont rangés dans un emplacement connu de l'IDE. Le compilateur sait où aller les chercher.
Un autre coté bien pratique est que l'IDE Arduino possède un gestionnaire de bibliothèque qui simplifie bien les débuts.
Attention : le fichier ma_bibliotheque.h n'est pas une bibliothèque.
Une bibliothèque est un ensemble de fichiers de déclaration (*.h) et de fichiers de code (*.cpp)
Ecrire
#include <ma_bibliotheque.h>
Indique simplement au compilateur qu'il faut ajouter au code le contenu du fichier h (h pour header ou en-tête) mais aussi qu'il aille chercher les différents autres fichiers de la bibliothèque et qu'il les compile.
Fichiers ino , h ,cpp
L'ide arduino ne demande que d'écrire une fonction setup() et une fonction loop().
Mais dans ton dos elle créé un VRAI fichier cpp à partir du fichier *.ino.
On peut trouver le squellette de ce fichier main.cpp dans les les fichiers de l'IDE.
/*
main.cpp - Main loop for Arduino sketches
Copyright (c) 2005-2013 Arduino Team. All right reserved.
..................................................................................................................
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <Arduino.h>
// Declared weak in Arduino.h to allow user redefinitions.
int atexit(void (* /*func*/ )()) { return 0; }
// Weak empty variant initialization function.
// May be redefined by variant files.
void initVariant() __attribute__((weak));
void initVariant() { }
void setupUSB() __attribute__((weak));
void setupUSB() { }
int main(void)
{
init();
initVariant();
#if defined(USBCON)
USBDevice.attach();
#endif
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}
C'est ce fichier qui est transmis au compilateur.
Ce fichier appelle des fonctions dont arduino ne te signale pas l'existance comme ini() et initvariant().
Ces fonctions configurent le microcontroleur.
La configuration à la sauce arduino est une configuration pour que les débutants aient le moins de problèmes.
Fichiers *.h
Si tu lis un tuto de C/C++ tu verra que le compilateur doit être informé de l'existance de variables ou de fonctions avant qu'elles soient appellées dans le programme, sinon il génère des erreurs.
Les fichiers h sont là pour cela.
Fichiers *.cpp
Ce sont les vrais fichiers qui contiennent le code.
Cas particulier de l'IDE avec plusieurs fichiers ino dans des onglets.
C'est de la cosmétique. Cela permet de découper un programme trop long en petit bouts.
Au final tous les fichiers ino sont ajoutés au fichier ino principal dans l'ordre alphabétique de leur nom.
C'est parfois pratique mais ce n'est pas de la programation en fichiers séparés.
Dans la programmation en fichiers séparés chaque fichier est indépendant et peu être réutilisé : c'est très proche de la notion de bibliothèque.
Cas particulier de l'atmega328pB.
Cette évolution de l'atmega328p n'a jamais été prise en charge par Arduino qui s'est toujours limité au 328p.
Il se trouve que Microchip a annoncé le 328p "Non recommandé pour les nouveaux produits" et à multiplié son prix par 2 par rapport au 328pB.
Bien évidement les fabricants de clones, une fois leurs stocks de 328p épuisés ne recommandent plus que des 328pB.
Il doit commencer à y avoir des adaptations non officielles du 328pB au fonctions arduino mais que valent-elles ?
En attendant le 328pB peut se gérer comme un 328p mais sans les petits plus du 328pB.