#defineMuchas veces cuando desarrollamos alguna aplicación en Arduino nos damos cuenta que lo he hemos hecho funciona bien en el modelo concreto de Arduino y estamos usando, pero que fallaría en otro.

En otras ocasiones nos interesa usar código distinto según la placa que usemos (cuando accedemos directamente a los registros)

En esos casos podemos usar unas directivas de compilación que nos definen el tipo de placa y micro seleccionado.

Hay que dejar claro que esta detección se hace en tiempo de compilación, no en tiempo de ejecución, pero dado que desde el IDE de Arduino siempre se compila antes de transferir el código, el efecto es el mismo.

Existen estas constantes (hay muchas más) para la placas más utilizadas

Constante CPU Board
__AVR_ATmega168__ ATmega 168 Arduino Decimilia and older
__AVR_ATmega328P__ ATmega 328P Arduino Duemilanove and Uno
__AVR_ATmega1280__ ATmega 1280 Arduino Mega
__AVR_ATmega2560__ ATmega 2560 Arduino Mega 2560
__AVR_ATmega32U4__ ATmega 32U4 Arduino Leonardo
__SAM3X8E__ AT91SAM3X8E Arduino Due

y en tu código lo comprobamos de esta manera

#if not (defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__))
    #error Codigo para  Arduino Mega
#endif

En caso de haber seleccionado una placa distinta a la que estamos usando se produce un error de compilación.

También existen otras constantes,como ARDUINO para la versión del IDE o F_CPU para la frecuencia del reloj (útil para reescalar el tiempo)

Arduino FAQ: Cómo detectar desde código qué placa de Arduino se está usando
Etiquetado en: