No debemos obsesionarnos tanto con ciertas cosas. El compilador realiza muchas optimizaciones sobre el código inicial. El utilizar #define o const va a ser traducido por el mismo código en muchas ocasiones, ya que en ambos casos se va a intentar cargar en el ensamblador como un literal. Si compilamos por ejemplo este código:
//const int HOLA=14;
#define HOLA 14
int a;
void setup()
{
int *puntero=&a;
*puntero=HOLA;
}
void loop()
{
}
Si comentamos el define y descomentamos el const, la compilación devuelve los mismos tamaños (programa 670 bytes, datos 11 bytes), y aunque no lo he comprobado, seguramente el ensamblador será idéntico. Incluso cambiando a const byte, se mantiene la igualdad.
Sin embargo, si intento referenciar la constante, al compilador no le queda otro remedio que establecerla en memoria (con un define esto sería imposible) y cambian las cosas (programa 670 bytes, datos 11 bytes):
const int HOLA=14;
//#define HOLA 14
int a;
void setup()
{
int *puntero=&HOLA;
*puntero=a;
}
void loop()
{
}
Resumiendo, pienso que las definiciones de constantes para pines y demás las deberíamos hacer como más cómodo o más bonito nos parezca. Otra cuestión son los tipos para las variables, y si deben ser locales o globales.