Go Down

Topic: La funzione "Tone" va in conflitto con la libreria di ken Sheriff (Read 1 time) previous topic - next topic

toti94

Ragazzi ho riscontato un problema, quando compilo questo sketch:
Code: [Select]
#include <IRremote.h>
IRrecv ric(5);
decode_results risultato;
const int buzzer= 10;
#define t1 551520375 // codice tasto 1
#define t2 551504055
#define t3 551536695
#define t4 551495895
#define t5 551528535
#define t6 551512215
#define t7 551544855
#define t8 551491815
#define t9 551524455
void setup ()
{
  pinMode (buzzer, OUTPUT);
  ric.enableIRIn();
}
void loop ()
{
  switch (ric.decode(&risultato))
  {
    case t1: tone(buzzer, 500);delay (200); noTone (buzzer);break;
    case t2: tone(buzzer, 600);delay (200); noTone (buzzer);break;
    case t3: tone(buzzer, 700);delay (200); noTone (buzzer);break;
    case t4: tone(buzzer, 800);delay (200); noTone (buzzer);break;
    case t5: tone(buzzer, 900);delay (200); noTone (buzzer);break;
    case t6: tone(buzzer, 1000);delay (200); noTone (buzzer);break;
    case t7: tone(buzzer, 1100);delay (200); noTone (buzzer);break;
    case t8: tone(buzzer, 1200);delay (200); noTone (buzzer);break;
    case t9: tone(buzzer, 1300);delay (200); noTone (buzzer);break;
    default:;
  }
}

Mi da errore dicendo che c'è una multipla definizione di Tone da quanto ho capito :
core.a(Tone.cpp.o): In function `__vector_7':
C:\Users\Salvatore\Desktop\arduino-1.0.1\hardware\arduino\cores\arduino/Tone.cpp:523: multiple definition of `__vector_7'
IRremote\IRremote.cpp.o:C:\Users\Salvatore\Desktop\arduino-1.0.1\libraries\IRremote/IRremote.cpp:311: first defined here
Anche perchè quando tolgo la parte dello switch non mi da errore nella compilazione.
C'è un modo quindi per usare sia tone che la libreria IRremote?
Per il mio progetto devo usare sia il ricevitore IR sia il buzzer :\

leo72

Significa che entrambe le librerie stanno utilizzando lo stesso timer. Quindi così come sono, sono incompatibili fra loro.

toti94



leo72

Invece della Tone puoi pilotare tu stesso i registri di un timer e fargli generare la frequenza che vuoi. Così non disturbi l'IRremote.

toti94

di un timer O.o? quella funzione mi serve a far suonare il buzzer

leo72

E con cosa tu pensi la Tone lo faccia suonare il tuo buzzer?  :P

Comunque ho guardato il codice della IRremote ed ho visto che puoi cambiare timer.
Modifica il file IRremoteInt.h ed inverti commenti che trovi alle righe 66 e 67 (quelle relative all'Arduino Duemilanove, Diecimila ecc..) così da spostare la IRremote sul timer 1.

toti94


pako-94

ciao io ho lo stesso problema ma non riesco a scpostare la libreria del ir....cm devo fare????? grazie mille :)

leo72


alex27riva

Anch'io ho questo problema, voglio fare una pianola comandata con il telecomando della tv. Ma ricevo quest errore.
Qualcuno è riuscito a risolvere?
Come posso generare suoni senza la funzione tone()?
Arduino UNO starter kit.

leo72

Se dovete cambiare timer, la soluzione l'avevo già data:

Comunque ho guardato il codice della IRremote ed ho visto che puoi cambiare timer.
Modifica il file IRremoteInt.h ed inverti commenti che trovi alle righe 66 e 67 (quelle relative all'Arduino Duemilanove, Diecimila ecc..) così da spostare la IRremote sul timer 1.

alex27riva

ok, quindi basta che invertire i commenti e poi per trasmettere uso il pin 9?
Code: [Select]
// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, etc
#else
  //#define IR_USE_TIMER1   // tx = pin 9
  #define IR_USE_TIMER2     // tx = pin 3
#endif
Arduino UNO starter kit.

leo72


alex27riva

Arduino UNO starter kit.

Go Up