Muchas 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)