Arduino IDE #ifdef

13

Ich verwende meine Arduino IDE, um meine Skizze entweder auf ein Arduino oder ATTiny oder ATmega328 hochzuladen. Wie Sie wissen, kann jedes Gerät eine andere Pinbelegung haben. Unterstützt der Arduino-Compiler ifdefabhängig von der Karte , mit der ich verbunden bin?

Beispielsweise

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

Antworten:

13

Ja. Hier ist die Syntax:

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

Sie können für das Mega auch so etwas tun:

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

Unter der Annahme, dass die Implementierung für ATtiny korrekt ist, sollte Ihr Code folgendermaßen aussehen:

#if defined (__AVR_ATtiny85__)
       a=0; b=1; c=2;
#else
       //Arduino
       a=9; b=10; c=11
#endif
Anonymer Pinguin
quelle
In Arduino.h, __AVR_ATtiny85__verwendet wird ( die Hauptstadt T). Ich bin mir nicht sicher, ob es einen Unterschied macht.
geometrikal
1
Alternativ können Sie mit 1.5. + IDE den von Ihnen erstellten Board-Typ testen. Siehe Arduino-IDE-1.5 --- Hardware-Spezifikation von Drittanbietern . Beispiel "#if defined (ARDUINO_AVR_UNO)" oder ARDUINO_AVR_MEGA2560 oder ARDUINO_AVR_LEONARDO, etc ...
mpflaga