[SOLUTION] : Corriger les erreurs récalcitrantes Intellisense dans Visual Code avec le plugin Arduino + Exporter en .bin

Crystal

il y a 6 ans

EDIT : Je tiens à préciser que cette solution ne marchera peut être pas pour tout le monde, pour des raisons obscures. En effet, chaque configuration étant différente, il est pas impossible qu'il y aie autre chose à modifier chez vous, je ne donne ici certaines indications, basées sur mon expérience :)

(Je mets à jour ce que je trouve au fil du temps).


Bonjour à tous, 

Comme beaucoup j'ai voulu utiliser à la base Visual Code et son plugin Arduino pour avoir un IDE un peu plus moderne. J'ai pour cela suivi l'excellent tutoriel de ce forum ici : Voir le tuto

Mais malgré les fichiers de config donnés, je me suis retrouvé avec des erreurs au niveau de l'include qui concerne Gamebuino-Meta.h. Il y a toujours un truc qui lui manquait. Après de multiples recherches, j'ai enfin trouvé la solution et je la partage ici pour ceux qui comme moi serait en galère à ce sujet. Je vais poster mon fichier de config en fin de topic, je vais d'abord expliquer ce qu'il se passe.

Tout d'abord, pour que cela marche, vous le savez peut être déjà mais il faut créer un fichier (ou Visual Code le crée tout seul, si vous ouvrez un dossier de travail depuis Visual Code), un fichier "c_cpp_properties.json" qui comprend la configuration pour le projet. Ce fichier contient les chemins nécessaires pour que Visual Code puisse retrouver les lib, le compilateur etc...Seulement voilà : 

- Les variable d'environnements de type "${HOME}" ne fonctionnent pas dans le fichier c_cpp_properties.json. J'ai lu cela en faisant des recherches, à priori c'est pas prit en charge par le fichier. Et effectivement si j'utilise ce genre de variables, cela ne marche pas.

- Il ne faut pas oublier de mentionner la version d'Arduino que vous utilisez (déjà dans le tutoriel de base si vous regardez bien).

La solution

1°) Pour le premier point, vous avez deux choix : Soit de mettre les chemins directement ("C:\Program...."), soit de définir des variables d'environnement dans le fichier (chose que moi j'ai fait).

2°) Pour le second point, il est déjà dans le tuto de ce site, il ne faut pas oublier la ligne dans la section "define" :  "ARDUINO=[votreVersionArduino]".

Voici donc le fichier final à quoi il ressemble, j'explique juste après le premier point.


{
    "env": {
        "USER.PATH": "C:/Users/[NomUtilisateur]",
        "PROGRAMFILESX86.PATH": "C:/Program Files (x86)"
    },

    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "${env:USER.PATH}/Local/Arduino15/packages/**",
                "${env:USER.PATH}/Documents/Arduino/libraries/Gamebuino_META/**",
                "${env:USER.PATH}/Documents/ArduinoData/packages/**",
                "${env:PROGRAMFILESX86.PATH}/Arduino/libraries/**",
                "${env:PROGRAMFILESX86.PATH}/Arduino/hardware/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "ARDUINO=10807",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.17134.0",
            "compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.15.26726/bin/Hostx64/x64/cl.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "msvc-x64"
        }
    ],
    "version": 4
}


Ce qu'il faut retenir

Avant la partie "Configuration", j'ai déclaré mes propres variables d'environnement. Je pointe vers les répertoires utilisateur et Program Files X86 de mon système avec mes propres variables. J'utilise ensuite ces variables juste après pour mes IncludePath sous la forme ${env:[NomDeLaVariable]".

Evidemment remplacez [NomUtilisateur] de la première ligne par le nom de votre compte sous Windows (le nom du répertoire utilisateur en somme).

Ne pas oublier dans la section "define" la ligne : "ARDUINO=10807". Remplacer "10807" par votre version, ici par ex c'est la ligne pour la version 1.87.

Enregistrez votre fichier, attendez quelques secondes que Visual Studio Code voit les changements et....profitez ;)



Il reste cependant un problème

VsCode ne comprend pas en compte tout de suite le fait qu'on utilise des fonctions qui sont dans d'autres fichiers .ino. Cela ne gène pas la compilation mais, l'intellisense vous fera une erreur sur ces fonctions. Je dois dire que je comprend pas moi même comment il fait mais bon, normalement il devrait finir par les trouver tout seul et faire disparaître l'erreur. Sachez qu'en règle générale, il faut un peu de temps à VsCode pour comprendre qu'il peut trouver ce qu'il cherche (quelques minutes). Concernant les soulignements rouges, la plupart du temps quand vous compilez vous voyez directement quand cela ne marche pas. Mais si jamais pour une raison ou une autre ce n'est pas le cas pour vous et qu'il vous met que les fonctions sont "introuvables" avec un soulignement rouge et que cela vous agace (je rappelle que VsCode met un peu de temps pour se mettre à jour...), il y a une solution simple : 

- Mettez votre curseur où l'erreur apparaît avec un soulignement rouge jusqu'à ce que la petite ampoule jaune apparaisse. Cliquez sur l'ampoule et choisissez : "Disable error squiggles" et vous serez tranquille (Cela enlève cependant tous les soulignements rouges qui indiquent potentiellement une erreur possible à la compilation).

Je vous conseille de sauver votre fichier json dans un coin pour le réutiliser pour vos prochains projets :)

Une dernière chose : 

Il serait bien de pouvoir faire un .bin non ? Pour cela rien de plus simple : 

- Vous avez du sélectionner la carte "Gamebuino" et le port sur lequel elle est connecté. De ce fait un fichier arduino.json a été créé dans le répertoire ".vscode". Ouvrez le et ajoutez à la fin juste avant l'accolade fermante : 

"output": "Build"

Maintenant que vous allez lancer une compilation ("Verify") il mettra dans un répertoire "Build" qui se trouvera dans le répertoire du projet, votre fichier .bin ;) 


Le moteur intellisense

Vous pouvez aussi modifier le moteur, pour ma part j'ai du le faire sur mon portable pour des raisons obscures. Pour cela j'ai ajouté à mon fichier settings.json (qui sont les paramètres utilisateurs de VsCode), cette ligne : 

"C_Cpp.intelliSenseEngine": "Tag Parser"


Bon code !

Aurélien Rodot

NEW il y a 6 ans

Hello, merci pour le partage :)

N'hésite pas à faire une création de type tuto plutôt qu'une discussion pour pas que ça ne se perde :)

jicehel

NEW il y a 6 ans

PS: Aurélien pour ce cas précis, il faudrait peut être mieux le fusionner avec le tuto existant comme c'est un peu un complément, non ?

Crystal

NEW il y a 6 ans

Il existe déjà un tuto sur Vscode donc je voulais pas faire de doublon, on va dire que c'est un complément ^^

jicehel

NEW il y a 6 ans

Oui, je pense en effet que l'auteur du tuto peut le mettre à jour / compléter avec ces information. Ca fera un point unique pour traiter ce sujet avec tous les éléments.

Aurélien Rodot

NEW il y a 6 ans

Yep, du coup tu aurais pu poster ça en commentaire du tuto initial pour pas s'y perdre en fait

Crystal

NEW il y a 6 ans

J'y ai aussi pensé, mais c'est plus qu'un commentaire non ^^ ? J'avais peur que cela fasse gros. Désolé si je n'ai pas pris la bonne décision.

Aurélien Rodot

il y a 6 ans

Aucun problème, je réfléchi juste à comment s'organiser pour s'y retrouver, comme le site évolue, pour détecter s'il y a des besoins de restructuration :)

jicehel

NEW il y a 6 ans

T'inquiètes, ce n'est pas grave. Ce qui compte c'est le contenu de ce que tu as trouvé. Aurélien donne juste des conseils pour optimiser les informations et veiller à la pérennité de ces informations. Idéalement, un programme ou un tuto => création. Un complément, une remarque, une critique sur un sujet existant quel qu'il soit (tuto, programme, discussion ou commentaire) => commentaire. Question, remarque, nouveau sujet qui n'a pas besoin de pouvoir être facilement retrouvé une fois l'échange fait ou la réponse obtenue => discussion. La remarque d'Aurélien est plus pour organiser un peu les échanges avec les personnes qui contribuent et encore merci pour cette participation bien utile  ;) 

Aurélien Rodot

NEW il y a 6 ans

Crystal Crystal

Aucun problème, je réfléchi juste à comment s'organiser pour s'y retrouver, comme le site évolue, pour détecter s'il y a des besoins de restructuration :)

Crystal

NEW il y a 6 ans

Vivi ne vous inquiétez pas, je ne prends pas la mouche comme cela moi ^^

Moi je pense qu'il faudrait un coin tutoriel et uniquement tutoriel, en gros séparer les tutos du reste. On peut imaginer dans Académie une partie "officiel" et une partie "communautaire" avec la même présentation, cela serait plus facile pour trouver les infos. Enfin c'est mon idée ^^

Aurélien Rodot

il y a 6 ans

C'est prévu ;)

Aurélien Rodot

NEW il y a 6 ans

Crystal Crystal

C'est prévu ;)

Steph

NEW il y a 6 ans

@Crystal Noir : Merci pour ces explications très utiles.


Je voulais juste revenir sur l'option "output" que l'on peut définir dans le fichier arduino.json. En effet, il faut prendre une précaution qui est mentionnée sur la page suivante : Visual Studio Code extension for Arduino.

Si l'option "output" n'est pas définie, [...] Arduino créera chaque fois un nouveau dossier de sortie temporaire, ce qui signifie qu'il ne pourra pas réutiliser le résultat intermédiaire de la construction précédente, ce qui entraînera une longue durée de vérification / téléchargement. Il est donc recommandé de définir ce champ. Arduino exige que le chemin de sortie ne soit ni l’espace de travail lui-même ni un sous-dossier de celui-ci, sinon il risque de ne pas fonctionner correctement. Par défaut, cette option n'est pas définie.

Crystal

il y a 6 ans

Tout à fait, merci pour cette précision. Par contre pour ma part, même avec mes configs, bizarrement cela ne fonctionne pas à chaque fois, et l'intellisense pinaille. Ca marche impec sur le PC de la maison et sur le portable cela ne fonctionne pas (en gros j'ai toujours une erreur), j'ai l'impression que leur système n'est pas super au point, mais dans la plupart des cas cela fonctionne il semblerait (un ami a testé et cela a marché aussi).

Crystal

NEW il y a 6 ans

Steph Steph

Tout à fait, merci pour cette précision. Par contre pour ma part, même avec mes configs, bizarrement cela ne fonctionne pas à chaque fois, et l'intellisense pinaille. Ca marche impec sur le PC de la maison et sur le portable cela ne fonctionne pas (en gros j'ai toujours une erreur), j'ai l'impression que leur système n'est pas super au point, mais dans la plupart des cas cela fonctionne il semblerait (un ami a testé et cela a marché aussi).