Je veux écrire un croquis qui peut être compilé sur différentes cartes Arduino. Je veux afficher sur le PC quelle carte est actuellement connectée.
Cela signifie que l'utilisateur connecte le PC via un câble USB à la carte Arduino / Teensy dans laquelle exécute mon croquis et mon croquis indique au PC via Serial quelle carte est connectée. Sur le PC exécute mon application C # qui reçoit ces données et les affiche.
J'ai donc besoin du tableau qui a été sélectionné lors de la compilation du croquis:
J'ai trouvé le code sur https://github.com/backupbrain/ArduinoBoardManager mais il ne donne pas de résultats corrects (à part le fait que plusieurs cartes manquent).
Voici un extrait du code:
static const uint8_t BOARD_MICRO= 0x04;
....
#elif defined(__AVR_Atmega32U4__) // Yun 16Mhz, Micro, Leonardo, Esplora
static const uint8_t BOARD = 0x04;
static const uint8_t NUM_BITS = 8;
static const uint16_t CPU = __AVR_Atmega32U4__;
static const unsigned long SRAM_SIZE = 2500;
static const unsigned long EEPROM_SIZE = 1000;
static const unsigned long FLASH_SIZE = 32000;
#elif defined(.....
Donc, ce code donne le même résultat (BOARD = 0x04 = Micro) pour Yun 16MHz, Micro, Leonardo y Esplora.
Existe-t-il un moyen d'obtenir dans mon code C exactement la chaîne que l'utilisateur a sélectionnée dans le menu du compilateur Arduino?
Réponses:
Grâce à l'aide de Charlie Hanson et jantje, j'ai trouvé la solution universelle!
Parce que c'est dommage que chaque programmeur Arduino doive passer par la même peine pour comprendre comment obtenir le nom de la carte, je vais offrir mon code au public afin que tout le monde puisse simplement le copier et le coller.
C'est ici:
Vous pouvez même mettre ce code dans un nouveau fichier d'en-tête et # l'inclure dans votre projet.
PD Si vous souhaitez connaître en plus de la carte également le modèle de CPU, recherchez le fichier avr_cpunames.h
la source
notez que c'est un mod Windows quelque chose de similaire doit exister sur linux.
Le premier est simple et rapide. Modifiez simplement les fichiers platform.txt que vous utilisez comme décrit ci-dessous. L'inconvénient est que vous devrez modifier les fichiers platform.txt avec chaque version.
ajoutez -DBOARD = \ "$ {build.board} \" à la recette. Cela permettra
Ce qui vous donne la chaîne "ARDUINO_AVR_LEONARDO" (pour le leonardo) dans boardName.
La deuxième façon est de passer à un meilleur IDE (comme déjà proposé par d'autres). En tant que créateur du plugin eclipse arduino, je conseillerais d'utiliser le plugin eclipse arduino. Dans le plugin eclipse arduino, vous procédez comme suit: Faites un clic droit sur le projet-> propriétés-> arduino-> onglet "options de compilation"
dans le champ ajouter à C et C ++.
Cela rendra le code ci-dessus pour compiler
Adendum
Je ne savais pas que tu voulais le "joli nom". Je ne suis pas sûr que cela puisse être corrigé dans le platform.txt dans l'arduino IDE. Dans le plugin eclipse arduino, changez le fixe ci-dessus dans
pour obtenir le joli nom (pour leonardo "Arduino Leonardo") dans le tableau de définition.
la source
Les noms exacts dans le menu proviennent du fichier boards.txt de votre IDE Arduino (Arduino \ hardware \ arduino \ avr \ boards.txt). Je pense que vous devrez analyser le fichier par vous-même et y trouver la carte détectée.
la source
J'ai posé une question connexe il y a quelque temps.
Il existe un fichier interne * .h qui est créé par l'IDE et contient le type de carte qui a été sélectionné. La liste des options possibles est donnée dans la question liée, mais uniquement pour les cartes AVR. Je pense que la liste non AVR est beaucoup plus courte.
Il s'agit simplement d'ajouter des instructions conditionnelles pour envoyer au PC les informations correctes. Un exemple simple:
Si vous devez faire référence au type de carte plusieurs fois dans l'esquisse, utilisez le format suivant:
Ce dernier est beaucoup plus ordonné, même si vous n'en avez besoin
__BOARD_TYPE
qu'une seule fois, car il supprime le#ifdef
gros morceau de vos fonctions.Vous devrez bien sûr en écrire un pour chaque carte que vous attendez de votre utilisateur final, et vous devrez peut-être mettre à jour cette liste à mesure que de nouveaux modèles apparaissent.
la source
La réponse originale est obsolète car de nouveaux tableaux ont été ajoutés. Le test de base est correct, mais on ne sait pas d'où vient la liste des cartes.
Si vous localisez le
boards.txt
fichier et le parcourez (par exemple~\Library\Arduino\hardware\arduino\avr\boards.txt
sur un Mac), chaque carte aura une entrée dans le sens de<BOARD>.build.board=<NAME>
, par exemple, le MKR1000 aurait une ligne:mkr1000.build.board=SAMD_MKR1000
Le #define correspondant peut être généré en préfixant le
<NAME>
avecARDUINO_
ainsi dans cet exemple, le code suivant générera une erreur pour une carte MKR1000 ...#if defined(ARDUINO_SAMD_MKR1000) #error
la source