Arduino Forum

International => Nederlands => Topic started by: akatchi on Jan 17, 2017, 03:36 pm

Title: IRremote.h library werkt niet meer?
Post by: akatchi on Jan 17, 2017, 03:36 pm
Voorheen werkte deze library prima, nu telkens als ik probeer mijn code te compilen krijg ik deze error:
Code: [Select]
Arduino: 1.6.12 (Windows 10), Board:"Arduino/Genuino Uno"

Tone.cpp.o (symbol from plugin): In function `timer0_pin_port':

(.text+0x0): multiple definition of `__vector_7'

libraries\IRremote\IRremote.cpp.o (symbol from plugin):(.text+0x0): first defined here

collect2.exe: error: ld returned 1 exit status

Meerdere bibliotheken gevonden voor "IRremote.h"
Gebruikt: C:\Users\NAAM\Documents\Arduino\libraries\IRremote
Niet gebruikt: E:\Arduino\libraries\RobotIRremote
exit status 1
Fout bij het compileren van board Arduino/Genuino Uno

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

Ik heb verschillende libraries geprobeerd van de IRremote nu en krijg bij allemaal een error, voorheen niet. (Ik weet dat hij zegt 'Niet gebruikt: E:\Arduino\libraries\RobotIRremote' maar dat is niet waarom die niet werkt).
Hebben jullie deze error ook?
Title: Re: IRremote.h library werkt niet meer?
Post by: nicoverduin on Jan 17, 2017, 06:05 pm
Je hebt de libraries op 2 plekken staan. Oplossing is een van beide verwijderen. 
Title: Re: IRremote.h library werkt niet meer?
Post by: akatchi on Jan 17, 2017, 06:07 pm
Je hebt de libraries op 2 plekken staan. Oplossing is een van beide verwijderen.
Ik heb maar 1x IRremote library op de schijf C:, en de standaard Arduino RobotIRremote zit in schijf E:, maar ik heb geen 2x IRremote libraries.
Title: Re: IRremote.h library werkt niet meer?
Post by: akatchi on Jan 17, 2017, 06:12 pm
Ik heb nu de RobotIRremote verwijderd en nu is dit de error:

Code: [Select]
Arduino: 1.6.12 (Windows 10), Board:"Arduino/Genuino Uno"

Tone.cpp.o (symbol from plugin): In function `timer0_pin_port':

(.text+0x0): multiple definition of `__vector_7'

libraries\IRremote\IRremote.cpp.o (symbol from plugin):(.text+0x0): first defined here

collect2.exe: error: ld returned 1 exit status

exit status 1
Fout bij het compileren van board Arduino/Genuino Uno

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Title: Re: IRremote.h library werkt niet meer?
Post by: akatchi on Jan 17, 2017, 06:17 pm
Ook voorbeelden in de library compilen niet, allemaal met dezelfde error...
Title: Re: IRremote.h library werkt niet meer?
Post by: MAS3 on Jan 17, 2017, 11:03 pm
Hier gaat het om volgens mij.

Code: [Select]
Tone.cpp.o (symbol from plugin): In function `timer0_pin_port':

(.text+0x0): multiple definition of `__vector_7'



Op de een of andere manier word underscore underscore vector underscore 7 meerdere keren aangemaakt in de library.
Of heb je die __vector_7 ook nog globaal aangemaakt toevallig ?
Die globale zou je dan een andere naam moeten geven.
Title: Re: IRremote.h library werkt niet meer?
Post by: akatchi on Jan 18, 2017, 09:10 am
Hier gaat het om volgens mij.

Code: [Select]
Tone.cpp.o (symbol from plugin): In function `timer0_pin_port':

(.text+0x0): multiple definition of `__vector_7'



Op de een of andere manier word underscore underscore vector underscore 7 meerdere keren aangemaakt in de library.
Of heb je die __vector_7 ook nog globaal aangemaakt toevallig ?
Die globale zou je dan een andere naam moeten geven.

Ik heb niks veranderd in de library, zou ook niet weten hoe eigenlijk. Heb hem meerdere keren opnieuw gedownload en geinstalled.. hoe zou ik die een globale naam moeten geven? (gisteren kwam er toevallig een update uit voor deze library maar daar werd deze fout niet in opgelost).
Title: Re: IRremote.h library werkt niet meer?
Post by: nicoverduin on Jan 18, 2017, 10:32 am
Ik zou de ide installatie eens goed deinstalleren. Hierbij de de folder c:gebruikers/username/appdata/roaming/arduino15 opruimen
Title: Re: IRremote.h library werkt niet meer?
Post by: akatchi on Jan 18, 2017, 11:09 am
Ik zou de ide installatie eens goed deinstalleren. Hierbij de de folder c:gebruikers/username/appdata/roaming/arduino15 opruimen
Ga ik doen, dankje Nico. Ik raak dan toch niet mijn code's kwijt?
Title: Re: IRremote.h library werkt niet meer?
Post by: akatchi on Jan 18, 2017, 11:12 am
Ik zou de ide installatie eens goed deinstalleren. Hierbij de de folder c:gebruikers/username/appdata/roaming/arduino15 opruimen
Die map bestaat niet bij mij...
Title: Re: IRremote.h library werkt niet meer?
Post by: nicoverduin on Jan 18, 2017, 11:57 am
Bij staat ie zowel hier : C:\Users\Nico\AppData\Local\Arduino15
als hier: C:\Users\Nico\AppData\roaming\Arduino15
Mochten ze er staan dan beide verwijderen.
Het kan zijn dat je appdata folder verborgen is.
Title: Re: IRremote.h library werkt niet meer?
Post by: akatchi on Jan 19, 2017, 05:03 pm
C:\Users\Nico\AppData\Local\Arduino15
Die werkte voor mij als ik AppData invoerde in de balk, de map is inderdaad verborgen. Heb alles in het mapje verwijderd. Nu kijken of het werkt.
Title: Re: IRremote.h library werkt niet meer?
Post by: akatchi on Jan 19, 2017, 05:11 pm
Nog steeds dezelfde error na het mapje verwijderd te hebben:
Code: [Select]
Arduino: 1.6.12 (Windows 10), Board:"Arduino/Genuino Uno"

Tone.cpp.o (symbol from plugin): In function `timer0_pin_port':

(.text+0x0): multiple definition of `__vector_7'

libraries\IRremote\IRremote.cpp.o (symbol from plugin):(.text+0x0): first defined here

collect2.exe: error: ld returned 1 exit status

exit status 1
Fout bij het compileren van board Arduino/Genuino Uno

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Title: Re: IRremote.h library werkt niet meer?
Post by: nicoverduin on Jan 19, 2017, 05:45 pm
Je kan nog een nieuwere versie van de IDE proberen?
Title: Re: IRremote.h library werkt niet meer?
Post by: akatchi on Jan 19, 2017, 05:47 pm
Je kan nog een nieuwere versie van de IDE proberen?
Volgens mij heb ik de nieuwste al, moet ik Arduino verwijderen en dan weer opnieuw downloaden, of is er echt een updater voor ergens?
Title: Re: IRremote.h library werkt niet meer?
Post by: nicoverduin on Jan 19, 2017, 05:52 pm
En je moet natuurlijk wel ff de IDE deinstalleren voor een herinstallatie
Title: Re: IRremote.h library werkt niet meer?
Post by: akatchi on Jan 19, 2017, 05:53 pm
En je moet natuurlijk wel ff de IDE deinstalleren voor een herinstallatie
Raak ik dan mn codes kwijt?
Title: Re: IRremote.h library werkt niet meer?
Post by: nicoverduin on Jan 19, 2017, 05:55 pm
Eigenlijk is de beste manier met die IDE's is de zip file downloaden. Niet de installer. Die zip pak je uit op een andere lokatie. Bij mij is dat de D schijf in de root onder de naam Arduino_V1.12 bijv. Zo kun je verschillende versies van de IDE installeren. Updaten oid is er niet. En voor de Arduino ontwikkelaars is daar nog wel eea te verbeteren.
Alternatief zou de Arduino-eclipse IDE kunnen zijn van Jantje. Die werkt vele vele vele malen beter maar je hebt wel even een kleine leercurve.
Title: Re: IRremote.h library werkt niet meer?
Post by: nicoverduin on Jan 19, 2017, 05:56 pm
Raak ik dan mn codes kwijt?
Als het goed is staan al jouw sketches nu in Documenten/Arduino. Zo ja dan niet. 
Title: Re: IRremote.h library werkt niet meer?
Post by: akatchi on Jan 19, 2017, 07:07 pm
Als het goed is staan al jouw sketches nu in Documenten/Arduino. Zo ja dan niet.
Alles opnieuw geinstallerd nog steeds deze error..
Code: [Select]
Arduino: 1.8.1 (Windows 10), Board:"Arduino/Genuino Uno"

Build-opties gewijzigd, alles wordt opnieuw gebuild
Tone.cpp.o (symbol from plugin): In function `timer0_pin_port':

(.text+0x0): multiple definition of `__vector_7'

libraries\IRremote\IRremote.cpp.o (symbol from plugin):(.text+0x0): first defined here

collect2.exe: error: ld returned 1 exit status

Meerdere bibliotheken gevonden voor "IRremote.h"
Gebruikt: C:\Users\NAAM\Documents\Arduino\libraries\IRremote
Niet gebruikt: E:\Arduino\libraries\RobotIRremote
Niet gebruikt: E:\Arduino\libraries\IRremote
exit status 1
Fout bij het compileren van board Arduino/Genuino Uno

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Title: Re: IRremote.h library werkt niet meer?
Post by: nicoverduin on Jan 19, 2017, 08:12 pm
Nou zet dan je sketch hier maar ff neer
Title: Re: IRremote.h library werkt niet meer?
Post by: shooter on Jan 19, 2017, 08:14 pm
Je hebt nog steeds 2 keer de lib irremote in je libraries staan, wellicht verstopt in een andere
Title: Re: IRremote.h library werkt niet meer?
Post by: nicoverduin on Jan 19, 2017, 08:21 pm
Je hebt nog steeds 2 keer de lib irremote in je libraries staan, wellicht verstopt in een andere
Volgens mij worden het er zelfs steeds meer......
Title: Re: IRremote.h library werkt niet meer?
Post by: akatchi on Jan 19, 2017, 10:30 pm
Je hebt nog steeds 2 keer de lib irremote in je libraries staan, wellicht verstopt in een andere
Nee kijk mijn Library zet ik op schijf E: waar Arduino ook is op geïnstalleerd, al zet ik de Library IRremote erin dan plaatst die hem ook automatisch in C: bij documents Arduino.

Maar ik ben erachter gekomen dat het niet aan de library zelf licht. Ik had wat testjes gedaan en op de ene code werkt die wel en de andere niet. Ik denk dat het misschien komt door een combinatie van vele libraries door elkaar misschien?

Ik wil mijn code wel neerzetten maar hij is 400 regels..
Deze libraries gebruik ik: LiquidCrystal_I2C, SPI, EEPROM, Wire, IRremote, MFRC255
Title: Re: IRremote.h library werkt niet meer?
Post by: sterretje on Jan 20, 2017, 09:47 am
Je hebt 'simpel' een interrupt conflict. Een kleine testcode die alleen de tone library gebruikt en een kleine testcode die alleen de IRremote library gebruikt en beiden zouden moeten werken.

Een van de links die ik vond tijdens een beetje onderzoek geeft aan dat er een newtone library is; geen idee of het werkt.

Vervolgens moet je een (1) van de twee fixen ;) Beetje werk om het te begrijpen ;) En mogelijk niet altijd mogelijk :(
Title: Re: IRremote.h library werkt niet meer?
Post by: sterretje on Jan 20, 2017, 11:40 am
Ik heb de volgende code geprobeerd: Play a Melody using the tone() function (https://www.arduino.cc/en/Tutorial/ToneMelody?from=Tutorial.Tone). 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
Code: [Select]
//------------------------------------------------------------------------------
// 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
Code: [Select]
...
...
//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
Code: [Select]
#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.
Title: Re: IRremote.h library werkt niet meer?
Post by: akatchi on Jan 20, 2017, 04:36 pm
Ik heb de volgende code geprobeerd: Play a Melody using the tone() function (https://www.arduino.cc/en/Tutorial/ToneMelody?from=Tutorial.Tone). 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
Code: [Select]
//------------------------------------------------------------------------------
// 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
Code: [Select]
...
...
//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
Code: [Select]
#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.
Wow had niet gedacht dat het probleem zo ingewikkeld lag...
Het heeft gewerkt, je bent een held bedankt!

Ik snap alleen niet wat ik nu veranderd hebt? Wat heeft dit voor gevolgen dan? En wat voor 'timer' gewoon letterlijk een timer die mijn tijd bij houdt zoals de millis()? Maar voor wat dan?
Title: Re: IRremote.h library werkt niet meer?
Post by: sterretje on Jan 20, 2017, 08:34 pm
Er zijn slechts 3 timers in de 328 micro zoals gebruikt in bv de Uno. Een aantal bibliotheken hebben timers nodig. Zoals gezegd gebruikt de toon functie timer 2. De IRremote gebruikt standaard ook timer 2 als je een 328 micro hebt. Een van de twee moet je veranderen zoals ik al zei.

Wat je nu veranderd hebt dat je in de IRremote bibliotheek hebt aangegeven dat deze timer 1 moet gebruiken. Je kunt in de gegeven file zoeken naar bv USE_TIMER1. Ik heb de bibliotheek niet bij de hand maar denk dat er een aantal #ifdefs zijn die bepalen wat er gecompileerd wordt.

De millis() functie gebruikt timer 0 als ik me niet vergis. Ik vermoed dat de meeste bibliotheken daar met hun tengels vanaf blijven.

PWM gebruikt ook de timers. Ik heb het nooit geprobeerd maar vermoed dat zekere PWM pinnen niet goed zullen werken als je de toon functie gebruikt of als je de IRremote bibliotheek gebruikt. En dat mogelijk zonder foutmelding (beetje teveel werk op dit moment om het precies uit te zoeken, ik doe dat als ik het nodig heb ;) ).

Je zult de volledige datasheet van de 328 micro moeten downloaden om te begrijpen hoe de timers precies werken.
Title: Re: IRremote.h library werkt niet meer?
Post by: akatchi on Jan 21, 2017, 12:16 pm
Er zijn slechts 3 timers in de 328 micro zoals gebruikt in bv de Uno. Een aantal bibliotheken hebben timers nodig. Zoals gezegd gebruikt de toon functie timer 2. De IRremote gebruikt standaard ook timer 2 als je een 328 micro hebt. Een van de twee moet je veranderen zoals ik al zei.

Wat je nu veranderd hebt dat je in de IRremote bibliotheek hebt aangegeven dat deze timer 1 moet gebruiken. Je kunt in de gegeven file zoeken naar bv USE_TIMER1. Ik heb de bibliotheek niet bij de hand maar denk dat er een aantal #ifdefs zijn die bepalen wat er gecompileerd wordt.

De millis() functie gebruikt timer 0 als ik me niet vergis. Ik vermoed dat de meeste bibliotheken daar met hun tengels vanaf blijven.

PWM gebruikt ook de timers. Ik heb het nooit geprobeerd maar vermoed dat zekere PWM pinnen niet goed zullen werken als je de toon functie gebruikt of als je de IRremote bibliotheek gebruikt. En dat mogelijk zonder foutmelding (beetje teveel werk op dit moment om het precies uit te zoeken, ik doe dat als ik het nodig heb ;) ).

Je zult de volledige datasheet van de 328 micro moeten downloaden om te begrijpen hoe de timers precies werken.
Oh wow dat wist ik niet, maar bedoel je moet een timer bijvoorbeeld eentje die begint op 0 seconden, eentje die begint op 60 seconden, en eentje die begint op 20 seconden ofzo? Of bedoel je iets heel anders met timer.
Title: Re: IRremote.h library werkt niet meer?
Post by: MAS3 on Jan 21, 2017, 04:12 pm
Graag niet een hele post quoten in de eerstvolgende reply AUB.

De laatste regel die sterretje schreef is het antwoord op wat je je afvraagt.
Het heeft niets met eerder of later starten van een timer te maken.
Title: Re: IRremote.h library werkt niet meer?
Post by: akatchi on Jan 21, 2017, 05:18 pm
Het heeft niets met eerder of later starten van een timer te maken.
Oke bedankt, en ik zal het niet meer doen!