Problème de compilation ou de téléversement ?

Il faut faire la différence entre les problèmes de compilation et les problèmes de téléversement.  Dans ce cours nous traitons seulement les problèmes de compilation. Les problèmes de compilation sont dus au programme : c’est qu’il y a une erreur à l’intérieur des lignes de code ou de la librairie. Alors que les problèmes de téléversement proviennent lors du téléchargement du programme sur la carte.

Comment savoir quel problème j’ai ?

Dans arduino ide, appuyez sur le bouton compilation sur la page de votre programme. Si celui-ci indique une erreur, alors vous êtes dans le bon cours. Si aucune erreur ne s’affiche, c’est surement un problème de téléversement. Vous pouvez alors voir notre cours sur ce sujet : https://arduinofactory.fr/probleme-televersement-arduino-toutes-les-solutions/

Les problèmes de syntaxe

Problème 1 : Oubli d’un void

Ceci est un problème de compilation assez fréquent. En effet, il se peut que notre programme n’ait pas besoin d’un void setup ou void loop pour fonctionner.  On peut voir ici que le void setup a été supprimé :

problème de compilation

Voici l’erreur que l’on obtient avec ce programme en le compilant :

erreur de compilation

On peut voir que le programme ne fonctionne pas car il manque le void setup. En effet pour n’importe quel programme Arduino que vous allez écrire, il doit y avoir le void loop et le void setup même s’ils sont vides.

Problème 2 : Oubli d’un caractère

Voici un exemple d’un oubli de caractère. En effet, il peut être très fréquent d’oublier un caractère comme un point-virgule dans votre programme :

Ici on peut voir que l’on a volontairement oublié un point-virgule sur la ligne pinMode(L1,OUTPUT), et en compilant le programme, le logiciel nous indique qu’il manque un caractère avant de fermer la balise. On voit donc que l’on est déjà bien aidé par le logiciel.

De plus voici l’erreur que l’on obtient :

arduino erreur

On peut voir que le logiciel nous indique qu’il manque un point-virgule. Il est donc assez facile de se rendre compte de notre erreur en lisant ce que nous indique le logiciel Arduino. Cela vaut pour un oublie de tout type de caractère.

Les problèmes de librairie

Les librairies sont des éléments indispensables sur Arduino : Elles permettent de simplifier l’utilisation des composants grâce à des fonctions préprogrammés.

Néanmoins les librairies peuvent être de vraies sources de tracas si elles sont mal installées, obsolète…

Dans ce cours nous allons voir une partie des erreurs que l’on peut obtenir avec une librairie.

Problème 1 : la librairie n’est pas installée

Une erreur qui arrive quand on est pressé est d’oublier d’installer la librairie utilisée dans le programme que l’on veut compiler. Voici le type d’erreur que l’on obtient :

Avec ceci surligné en rouge qui est la ligne de la librairie non installée :

Solution 1 : Vous devez pour cela installer la librairie

Il existe dans arduino Ide un manageur de librairie qui vous permet de mettre à jour vos librairies et d’en installer des nouvelles.

Pour pouvoir télécharger la librairie qui vous manque, vous pouvez taper le nom du composant que vous utilisez dans votre programme afin de ne plus avoir l’erreur.

arduino librairie

Solution 2 : Vous pouvez aussi décider d’installer vous-même une librairie sur arduino

Pour cela vous devez télécharger la librairie en format Zip.

Puis sur Arduino, en allant dans Croquis, vous pouvez ajouter votre librairie en zip :

arduino librairie

Problème 2 : Doublon de Librairie

Il se peut que vous ayez installé par erreur deux fois la même librairie et que donc le logiciel Arduino ide soit perdu.

Voici les différentes erreurs que vous pourriez obtenir :

multiple definition of `__vector_7′

ou

C:\Program Files (x86)\Arduino\libraries\Adafruit_Circuit_Playground\utility\Adafruit_CPlay_Mic.cpp: In member function ‘int Adafruit_CPlay_Mic::peak(uint16_t)’: C:\Program Files (x86)\Arduino\libraries\Adafruit_Circuit_Playground\utility\Adafruit_CPlay_Mic.cpp:28:37: error: ‘analogPinToChannel’ was not declared in this scope channel = analogPinToChannel(4); // Pin A4 to ADC channel C:\Program Files (x86)\Arduino\libraries\Adafruit_Circuit_Playground\utility\Adafruit_CPlay_Mic.cpp: In member function ‘void Adafruit_CPlay_Mic::capture(int16_t*, uint8_t)’: C:\Program Files (x86)\Arduino\libraries\Adafruit_Circuit_Playground\utility\Adafruit_CPlay_Mic.cpp:89:37: error: ‘analogPinToChannel’ was not declared in this scope channel = analogPinToChannel(4); // Pin A4 to ADC channel’

Pour régler ce souci vous devez aller dans le dossier qui contient toute vos bibliothèques et supprimer le doublon.

Pour cela vous devez aller dans Document, puis le dossier Arduino et librairies.

Voici la liste des librairies. Vous pouvez supprimer les doublons.

Problème 3 : Installation d’une librairie obsolète

Voici un exemple de librairie obsolète : On peut voir ici qu’il y a des fichiers plus supportés par Arduino ide après la version 1.0. La Libraire doit donc être mise à jour.

In file included from capture_relai.cpp:1: D:\arduino\arduino-1.0\libraries\VirtualWire/VirtualWire.h:14:20: error: wiring.h: No such file or directory In file included from capture_relai.cpp:1: D:\arduino\arduino-1.0\libraries\VirtualWire/VirtualWire.h:59: error: variable or field ‘vw_set_tx_pin’ declared void D:\arduino\arduino-1.0\libraries\VirtualWire/VirtualWire.h:59: error: ‘uint8_t’ was not declared in this scope D:\arduino\arduino-1.0\libraries\VirtualWire/VirtualWire.h:63: error: variable or field ‘vw_set_rx_pin’ declared void D:\arduino\arduino-1.0\libraries\VirtualWire/VirtualWire.h:63: error: ‘uint8_t’ was not declared in this scope D:\arduino\arduino-1.0\libraries\VirtualWire/VirtualWire.h:67: error: variable or field ‘vw_set_ptt_pin’ declared void D:\arduino\arduino-1.0\libraries\VirtualWire/VirtualWire.h:67: error: ‘uint8_t’ was not declared in this scope D:\arduino\arduino-1.0\libraries\VirtualWire/VirtualWire.h:71: error: variable or field ‘vw_set_ptt_inverted’ declared void D:\arduino\arduino-1.0\libraries\VirtualWire/VirtualWire.h:71: error: ‘uint8_t’ was not declared in this scope D:\arduino\arduino-1.0\libraries\VirtualWire/VirtualWire.h:76: error: variable or field ‘vw_setup’ declared void D:\arduino\arduino-1.0\libraries\VirtualWire/VirtualWire.h:76: error: ‘uint16_t’ was not declared in this scope D:\arduino\arduino-1.0\libraries\VirtualWire/VirtualWire.h:95: error: ‘uint8_t’ does not name a type D:\arduino\arduino-1.0\libraries\VirtualWire/VirtualWire.h:101: error: ‘uint8_t’ does not name a type D:\arduino\arduino-1.0\libraries\VirtualWire/VirtualWire.h:104: error: ‘uint8_t’ does not name a type D:\arduino\arduino-1.0\libraries\VirtualWire/VirtualWire.h:109: error: ‘uint8_t’ does not name a type capture_relai.cpp: In function ‘void setup()’: capture_relai:12: error: ‘vw_set_ptt_inverted’ was not declared in this scope capture_relai:13: error: ‘vw_setup’ was not declared in this scope capture_relai:14: error: ‘vw_set_tx_pin’ was not declared in this scope capture_relai.cpp: In function ‘void loop()’: capture_relai:23: error: cannot convert ‘float’ to ‘const char*’ in initialization capture_relai:25: error: ‘vw_send’ was not declared in this scope

Il est possible que la librairie que vous utilisiez soit obsolète par rapport à la version d’Arduino IDE utilisée, surtout si vous avez fait la mise à jour d’Arduino IDE mais pas des librairies.

Pour régler ce souci, vous devez aller dans sketch puis manage librairies :

Changer ensuite dans type pour avoir les librairies déjà installées et vous pourrez voir si vous devez les mettre à jour :

Librairie manageur

On peut voir ici que la librairie Bridge peut être mise à jour en cliquant sur udapte.

Dernière Solution Bonus : Se passer de librairie

Si toute fois vous avez du mal à installer une librairie ou bien que vous vouliez vous en passer, sachez qu’elle n’est pas obligatoire !

Pour cela vous devez ajouter au code les lignes dont vous avez besoin dans votre code.

Voici un exemple que l’on a fait dans le cours Stepper motor ou l’on remplace la librairie  :

#include
const int stepsPerRevolution = 2048; // A modifier pour qu'il corresponde au nombre de pas par tour
const int pasParMinute = 15; // La plage réglable du pas à pas est de 0 à 17
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11); // initialisation des pins stepper moteur
void setup() {
    myStepper.setSpeed(pasParMinute) ;
}
void loop() {
    myStepper.step(stepsPerRevolution) ; // dans une direction
    delay(500);
    myStepper.step(-stepsPerRevolution) ; // dans l’autre direction
    delay(500);
}

Par : (On déclare les pins que l’on va utiliser sur la carte arduino pour faire fonctionner le moteur pas à pas) :

#include
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11

Et : (On déclare les variables pour le sens du moteur, le nombre de pas)

#include
int Steps = 0;
boolean Direction = true;
unsigned long last_time;
unsigned long currentMillis ;
int steps_left=4095;
long time;

Enfin: (On declare les pins en sortie pour pouvoir les commander)

#include
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);

Voici un exemple de comment vous passez de la librairie stepper.h. Pour en savoir plus sur cette librairie cliquer ici

Problème Antivirus

Un autre problème qui peut survenir est que votre antivirus bloque l’accès au dossier dont arduino Ide à besoin pour compiler. On va donc vous afficher un problème de droits (d’accès aux fichiers & dossiers) comme on peut le voir ici :

#include
“Arduino : 1.8.0 (Windows 10), Carte : “Arduino/Genuino Uno” c:\users\julien\desktop\arduino\arduino-1.8.0\hardware\tools\avr\bin../lib/gcc/avr/4.9.2/../../../../avr/bin/ar.exe: unable to rename ‘core\core.a’; reason: Permission denied exit status 1 Erreur de compilation pour la carte Arduino/Genuino Uno Ce rapport pourrait être plus détaillé avec l’option “Afficher les résultats détaillés de la compilation” activée dans Fichier -> Préférences.”

Pour régler cette erreur, on va vous proposer plusieurs solutions :

Solution 1 :  Désactiver votre antivirus

Il se peut que celui bloque l’accès à vos fichiers lorsque Arduino Ide essaie de compiler. Pour cela essayer de le désactiver ou bien de faire une exception pour ce logiciel.

Solution 2 : Réinstaller Arduino Ide

En effet, il se peut qu’il y ait des problèmes dans les permissions qui ont été données au dossier. Pour cela on vous conseils de réinstaller votre Ide. De plus il se peut qu’il y ait des soucis dans le compilateur que vous avez installés.

Si néanmoins le problème, on vous conseille de passer à la section suivante sur l’éditeur Arduino Ide en ligne.

Arduino Ide Editor Online

Si jamais les problèmes sur votre Ide n’ont pas été résolue, on a trouvé une solution en ligne qui pourrait régler votre souci. En effet, le logiciel Arduino Ide étant installé sur des machines différentes, il se peut qu’il ne fonctionne pas forcément bien partout. C’est pour cela que si vous avez du mal à compiler un programme vous pouvez utiliser l’éditeur Arduino Ide en ligne.

Cet éditeur vous propose toutes les options que celui que vous avez téléchargé, mais comme il est hébergé sur le site Arduino vous n’aurez pas de problème de compatibilité.

Voici le lien pour s’y connecter : Arduino Editor Ide

Une fois votre compte crée, voici ce que l’on obtient :

On vous propose tout d’abord d’importer le programme que vous voulez compiler. Il faudra l’exporter depuis Arduino Ide en zip et en y ajoutant un dossier « Libraries » en y mettant les librairies que vous voulez importer :

Si vous cliquez sur yes voici le programme une fois importé :

On voit ici le code que vous avez importé. En haut il y a le bouton sauvegarder et vérifier. Ceci va vous permettre de compiler votre programme en ligne.

Vous pouvez ajouter d’autre librairie manuellement en cliquant sur Libraries :

Une liste de librairie déjà installée sera indiqué et si vous ne trouvez pas celle que vous souhaitez vous pouvez l’installer avec le Library Manager :

Vous pouvez aussi choisir votre carte pour téléverser le programme, mais pour cela vous devrez télécharger le mini logiciel suivant :

Ce logiciel permettra de faire la liaison entre la carte Arduino et l’éditeur en ligne. Vous pouvez retrouver ce logiciel à cette adresse : https://create.arduino.cc/getting-started/plugin/welcome

Une fois le logiciel téléchargé, il vous faut suivre les étapes :

Après avoir accepté le règlement, on va vous demandez si vous souhaitez utiliser le logiciel sur un autre navigateur web que vous utilisez actuellement :

Une fois le logiciel installé, nous pouvons revenir à l’interface d’Arduino Ide Editor pour téléverser votre programme.

Conclusion

J’espère que ce cours vous aidez à régler vos problèmes de compilation. Il est difficile de régler tous les soucis de compilation, c’est pour cela que l’on a souhaitez vous présenter le logiciel Arduino Ide Editor qui est une solution valable pour les problèmes de compilation actuels et du futur.

N’hésitez pas à regarder notre cours sur les problèmes de téléversement si vous obtenez un problème de téléversement à la suite de votre problème de compilation : https://arduinofactory.fr/probleme-televersement-arduino-toutes-les-solutions/