Arduino IDE #ifdef

13

Korzystam z Arduino IDE, aby przesłać mój szkic do Arduino, ATTiny lub ATmega328. Jak wiadomo, każde urządzenie może mieć inny pinout. Czy kompilator Arduino obsługuje ifdef, w zależności od płyty, z którą jestem podłączony?

Na przykład

#ifdef Attiny85
       a=0; b=1; c=2;
#else
       // arduino
       a=9; b=10; c=11;
#endif
PhillyNJ
źródło

Odpowiedzi:

13

Tak. Oto składnia:

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

Możesz również zrobić coś takiego dla Mega:

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

Zakładając, że implementacja ATtiny jest poprawna, twój kod powinien wyglądać następująco:

#if defined (__AVR_ATtiny85__)
       a=0; b=1; c=2;
#else
       //Arduino
       a=9; b=10; c=11
#endif
Anonimowy pingwin
źródło
W Arduino.h, __AVR_ATtiny85__jest używany (kapitał T). Nie jestem jednak pewien, czy to robi jakąkolwiek różnicę.
geometrikal
2
alternatywnie za pomocą 1.5. + IDE możesz przetestować z budowanym typem planszy. Zobacz Arduino-IDE-1.5 --- Specyfikacja sprzętu innej firmy . Przykład „# jeśli zdefiniowano (ARDUINO_AVR_UNO)” lub ARDUINO_AVR_MEGA2560 lub ARDUINO_AVR_LEONARDO itp.
mpflaga,