Go Down

Topic: IRremote.h library werkt niet meer? (Read 4543 times) previous topic - next topic

nicoverduin

En je moet natuurlijk wel ff de IDE deinstalleren voor een herinstallatie
Met vriendelijke groet / kindest regards
Nico Verduin
www.verelec.nl
Do not PM me for personal consultancy unless you are willing to pay for it.

akatchi

En je moet natuurlijk wel ff de IDE deinstalleren voor een herinstallatie
Raak ik dan mn codes kwijt?

nicoverduin

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.
Met vriendelijke groet / kindest regards
Nico Verduin
www.verelec.nl
Do not PM me for personal consultancy unless you are willing to pay for it.

nicoverduin

Raak ik dan mn codes kwijt?
Als het goed is staan al jouw sketches nu in Documenten/Arduino. Zo ja dan niet. 
Met vriendelijke groet / kindest regards
Nico Verduin
www.verelec.nl
Do not PM me for personal consultancy unless you are willing to pay for it.

akatchi

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.

nicoverduin

Nou zet dan je sketch hier maar ff neer
Met vriendelijke groet / kindest regards
Nico Verduin
www.verelec.nl
Do not PM me for personal consultancy unless you are willing to pay for it.

shooter

Je hebt nog steeds 2 keer de lib irremote in je libraries staan, wellicht verstopt in een andere
paul deelen
shooter@home.nl
making controls with codesys PLC and arduino

nicoverduin

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......
Met vriendelijke groet / kindest regards
Nico Verduin
www.verelec.nl
Do not PM me for personal consultancy unless you are willing to pay for it.

akatchi

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

sterretje

#24
Jan 20, 2017, 09:47 am Last Edit: Jan 20, 2017, 10:13 am by sterretje
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 :(
If you understand an example, use it.
If you don't understand an example, don't use it.

Electronics engineer by trade, software engineer by profession. Trying to get back into electronics after 15 years absence.

sterretje

#25
Jan 20, 2017, 11:40 am Last Edit: Jan 20, 2017, 11:42 am by sterretje
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
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.
If you understand an example, use it.
If you don't understand an example, don't use it.

Electronics engineer by trade, software engineer by profession. Trying to get back into electronics after 15 years absence.

akatchi

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
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?

sterretje

#27
Jan 20, 2017, 08:34 pm Last Edit: Jan 20, 2017, 08:38 pm by sterretje
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.
If you understand an example, use it.
If you don't understand an example, don't use it.

Electronics engineer by trade, software engineer by profession. Trying to get back into electronics after 15 years absence.

akatchi

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.

MAS3

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.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

Go Up