Arduino IDE #ifdef

13

Eu uso meu IDE do Arduino para fazer upload do meu sketch para um Arduino ou ATTiny ou ATmega328. Como você sabe, cada dispositivo pode ter uma pinagem diferente. O compilador Arduino suporta ifdef, dependendo da placa à qual estou conectado?

Por exemplo

#ifdef Attiny85
       a=0; b=1; c=2;
#else
       // arduino
       a=9; b=10; c=11;
#endif
PhillyNJ
fonte

Respostas:

13

Sim. Aqui está a sintaxe:

#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
    //Code here
#endif

Você também pode fazer algo assim para o Mega:

#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
    //Code here
#endif

Supondo que a implementação do ATtiny esteja correta, seu código deve ser assim:

#if defined (__AVR_ATtiny85__)
       a=0; b=1; c=2;
#else
       //Arduino
       a=9; b=10; c=11
#endif
Pinguim anônimo
fonte
Em Arduino.h, __AVR_ATtiny85__é usado (capital T). Não tenho certeza se isso faz alguma diferença.
geometrikal
2
Como alternativa, usando o 1.5. + IDE, você pode testar o tipo de placa que está construindo. Consulte Arduino-IDE-1.5 --- Especificação de hardware de terceiros . Exemplo "#if definido (ARDUINO_AVR_UNO)" ou ARDUINO_AVR_MEGA2560 ou ARDUINO_AVR_LEONARDO, etc ...
mpflaga