Durée
À ma connaissance, vous ne pouvez pas détecter le type de carte, mais vous pouvez lire l'ID de l'appareil ATmega. Vérifiez cette question comment cela peut être fait: une signature d'appareil ATmega ou ATtiny peut-elle être lue pendant l'exécution? Notez cependant que lorsque vous utilisez cette méthode, plusieurs affectations de registre changeront, pas seulement le brochage. Par conséquent, votre code peut devenir beaucoup plus complexe. L'avantage est que si vous parvenez à contourner toutes les affectations de registre changeantes et autres dépendances matérielles, vous pouvez utiliser un seul fichier .hex pour programmer vos périphériques directement à partir de avrdude
.
Compiler le temps
Une autre façon de déterminer le type de carte / contrôleur est au moment de la compilation. Fondamentalement, vous compilez des parties du code ou définissez des macros en fonction du type de périphérique configuré dans l'IDE Arduino. Consultez cet exemple de code pour un exemple:
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define DEBUG_CAPTURE_SIZE 7168
#define CAPTURE_SIZE 7168
#elif defined(__AVR_ATmega328P__)
#define DEBUG_CAPTURE_SIZE 1024
#define CAPTURE_SIZE 1024
#else
#define DEBUG_CAPTURE_SIZE 532
#define CAPTURE_SIZE 532
#endif
Le fragment de code a été copié sans vergogne à partir de https://github.com/gillham/logic_analyzer/wiki Vérifiez ce code pour une astuce plus spécifique à l'appareil.
Selon le système d'exploitation de votre hôte, les types de contrôleurs pris en charge se trouvent dans le fichier suivant:
- Linux:
/usr/lib/avr/include/avr/io.h
- Les fenêtres:
...\Arduino\hardware\tools\avr\avr\include\avr\io.h
L'utilisation du préprocesseur C (par lequel le code ci-dessus est géré) est probablement hors de portée pour ce site. http://stackoverflow.com serait le meilleur endroit pour des questions détaillées.
Si vous êtes sous Linux, vous pouvez facilement trouver tous les types de contrôleurs pris en charge en tapant:
grep 'defined (__AVR' /usr/lib/avr/include/avr/io.h | sed 's/^[^(]*(\([^)]*\))/\1/'