Ik heb de volgende code geprobeerd:
Play a Melody using the tone() function. Op het moment dat ik in het begin
#include <IRremote.h> toevoeg gaat het fout.
Er is een commentaar in tone.cpp dat aangeeft dat het alleen werkt met timer2 (of iets in die geest). Dus maar even graven in de IRremote bibliotheek. Open de file IRremoteInt.h en vind het onderstaande
//------------------------------------------------------------------------------
// Defines for Timer
Het zal ongeveer regel 230 zijn.
Net daarvoor heb je een stuk dat definieert welke timer gebruikt moet worden (begint bij regel 147 maar dat is niet zo relevant). Het eind van dat blok (net voor regel 230) bevat de volgende code
...
...
//ATtiny85
#elif defined(__AVR_ATtiny85__)
#define IR_USE_TIMER_TINY0 // tx = pin 1
// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, Nano, etc
// ATmega48, ATmega88, ATmega168, ATmega328
#else
//#define IR_USE_TIMER1 // tx = pin 9
#define IR_USE_TIMER2 // tx = pin 3
#endif
Verander de #else
#else
// 2017/01/20: verandert om timer 1 te gebruiken inplaats van standaard timer2
#define IR_USE_TIMER1 // tx = pin 9
//#define IR_USE_TIMER2 // tx = pin 3
#endif
De code zal nu timer 1 gebruiken in plaats van timer 2 en mijn probleem is opgelost. Vergeet niet het te documenteren. Geen garantie dat dit het oplost in jouw situatie aangezien je nog meer bibliotheken gebruikt.
Nu is er een (1) groot probleem met dit; al je bestaande (na compilatie) en toekomstige programmas zullen nu timer 1 gebruiken als je de IRremote bibliotheek gebruikt. Voor bestaande programmas kan dat erin resulteren dat ze nu niet meer compileren (waarschijnlijk __vector_11) en bij nieuwe programmas kun je dat probleem ook tegenkomen. De reden is dat er slechts een beperkt aantal timers beschikbaar is dus er zijn limieten aan wat je kunt bereiken.
Je kunt de IRremote bibliotheek ook lokaal gebruiken; ik heb dit niet verder bestudeerd om je daar nu mee verder te helpen.