FUNZIONE "tone(pinBuzzer,frequenza,durata)" non funzionante con libreria IR?

Mi spiego meglio è possibile che la funzione tone non funzioni con la libreria" #include <IRremote.h>" ?
Ho provato due programmi diversi "tone funziona e anche IRremote" ma quando su una if piazzo la funzione tone mi da un'errore, ed è la funzione tone a provocare questo errore poiché se la levo funziona tutto.
L'errore: "core.a(Tone.cpp.o): In function __vector_7': C:\Program Files\Arduino\hardware\arduino\cores\arduino/Tone.cpp:535: multiple definition of __vector_7'
IRremote\IRremote.cpp.o:C:\Program Files\Arduino\libraries\IRremote/IRremote.cpp:311: first defined here"

Si, probbailmente vanno in conflitto sui Timer che usano ....
... guarda il file IRremote.h, all'inizio hai la possibilità di cambiare il Timer che usa :

// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, etc
#else
  //#define IR_USE_TIMER1   // tx = pin 9
  #define IR_USE_TIMER2     // tx = pin 3
#endif

prova spostandolo su Timer1 ... :roll_eyes:

Guglielmo

Scusami @Gugliemo per la mia ignoranza ma, dove devo mettere quella scritta ?
Questo è il mio programma, si ricorda nel mio scorso post avevo risolto il sensore pir usando la funzione tone all'interno del programma perchè il delay stoppava arduino, Cioè risolto uno ne trovo un'altro errore..
Il programma è il seguente:

#include<Servo.h>
#include <IRremote.h> 
int receiver = 11; 
IRrecv irrecv(receiver); 
decode_results results;
const byte pinPulsante=6;
int pinPir=7;
int pinLed=8;
int pinFoto=A0;
int statoPulsante=0;
int statoPir=0;
int statoFoto=0;
int ledGia=13;
int ledSta=2;
int pinBuzzer=3;
int frequenza=200;
int durata=2000;
Servo servo1;
void setup()
{
  Serial.begin(9600); 
  irrecv.enableIRIn();
  pinMode(pinPir,INPUT_PULLUP);
  pinMode(pinLed,OUTPUT);
  pinMode(ledGia,OUTPUT);
  pinMode(ledSta,OUTPUT);
  pinMode(pinFoto,INPUT);
  pinMode(pinBuzzer,OUTPUT);
  pinMode(pinPulsante,INPUT);
  servo1.attach(9);
  servo1.write(0);
}
void loop()
{
  statoPir= digitalRead(pinPir);
  statoFoto= analogRead(pinFoto);
  statoPulsante=digitalRead(pinPulsante);
 
  if (irrecv.decode(&results)) 
  {
    Serial.println(results.value, HEX); 
    irrecv.resume();
  }

  if ( results.value == 0x8B8510E8){ 
    digitalWrite(ledSta, HIGH);   
  } 
  if ( results.value == 0x6825E53E){
    digitalWrite(ledSta, LOW);   
   
  }  
   if (statoPulsante==HIGH){
    digitalWrite(pinLed,HIGH);
    servo1.write(0);
    delay(6000);
    Serial.println(statoPulsante);
  }
  else {
    digitalWrite(pinLed,LOW);
    servo1.write(140);
    delay(300);
  }
  if (statoFoto<=500){
    Serial.println(statoFoto);
    digitalWrite(ledGia,HIGH);
    delay(15);

  }
  else {
    digitalWrite(ledGia,LOW);
    delay(15);

  }
  if(statoPir==LOW) {
   tone(pinBuzzer,frequenza,durata);
   delay(2000);
  }
}

non devi aggiungere nulla, devi aprire il file della libreria IRremoteint.h che si trova in
C:\Program Files (x86)\Arduino\libraries\IRremote
righe 66/67

da così

// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, etc
#else
  //#define IR_USE_TIMER1   // tx = pin 9
  #define IR_USE_TIMER2     // tx = pin 3
#endif

a così

// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, etc
#else
  #define IR_USE_TIMER1   // tx = pin 9
  //#define IR_USE_TIMER2     // tx = pin 3
#endif

Dentro questa cartella ci sono piu file, quale devo aprire e come ?

leggi bene te l'ho scritto
devi aprire il file della libreria IRremoteint.h che si trova in
C:\Program Files (x86)\Arduino\libraries\IRremote
con un editor di testo ... tasto destro "apri con" blocco note ... note pad ..
la modifica non entra se non ricompili lo sketch su arduino

IRremote è una cartella, non un file per questo non posso modificarla con un file di testo, andando per esclusione sono riuscito a farlo comunque dentro il file "IRremoteInt"
Fatto questo adesso mi da quest'errore:

IRremote\IRremote.cpp.o: In function __vector_11': C:\Program Files\Arduino\libraries\IRremote/IRremote.cpp:311: multiple definition of __vector_11'
Servo\Servo.cpp.o:C:\Program Files\Arduino\libraries\Servo/Servo.cpp:103: first defined here

mi prendi in giro?
scusa ma io cosa ho scritto nei post precedenti ?
me lo rileggi piano piano ad alta voce? :smiley:

@ pablos : pazienza pablos, devi avere pazienza ... :grin: :grin: :grin:

Guglielmo

servo.cpp alla riga 103 c'è questo

SIGNAL (TIMER1_COMPA_vect)
{
  handle_interrupts(_timer1, &TCNT1, &OCR1A);
}

IRremote.cpp alla riga 311 c'è questo

ISR(TIMER_INTR_NAME)
{
  TIMER_RESET;

direi che è sempre un problema di timer
ha commentato la riga giusta con // e decommentato l'altra? nel file IRremoteInt.h

Ah, mizzica scusami, sono 10 ore che cerco di risolversi sto problema da solo, e non avevo letto la parte di sopra, ti sto scrivendo da un cellulare androir della samsung mini pocket con uno schermo un pò piccolo ahaha
Scusami ancora, in ogni caso ancora non sto risolvendo! HELP ME ç_ç

Guarda io non ne capisco molto, questo per me è un hobby, perfavore se non disturbo spiegami passo passo cosa devo fare, perchè mi da sempre questo errore nonostante io ho guardato..
IRremote\IRremote.cpp.o: In function __vector_11': C:\Program Files\Arduino\libraries\IRremote/IRremote.cpp:311: multiple definition of __vector_11'
Servo\Servo.cpp.o:C:\Program Files\Arduino\libraries\Servo/Servo.cpp:103: first defined here

questo per me è un hobby, perfavore se non disturbo spiegami passo passo cosa devo fare, perchè mi da sempre questo errore nonostante io ho guardato..

anche per me è un hobby, intanto ho letto tutti i tuoi post precedenti per capire che arduino hai, ma non ho trovato nulla sul tuo modello, penso sia una UNO
Comunque se tu avessi cercato su google come ho fatto io, avresti trovato che il tuo errore è molto famoso usando insieme le lib
#include<Servo.h>
#include <IRremote.h>
io non ho mai usato servo con arduino, ma per risolvere il problema comincerei a cercare e leggere tutto internet :slight_smile: (usando anche i traduttori), prima o poi la soluzione esce, se poi qualcuno del forum ha riscontrato e risolto il problema personalmente e te lo scrive tanto meglio.
Tieni conto che l'interrupt 0 lo usa il millis, il delay e non può essere utilizzato
interrupt dei vari modelli

Board	       int.0  int.1  int.2   int.3   int.4   int.5
Uno, Ethernet	2	3	 	 	 	 
Mega2560	2	3	21	20	19	18
Leonardo	3	2	0	1	7

http://forum.arduino.cc/index.php?topic=167525.0;wap2
http://letsmakerobots.com/content/solved-strange-compilation-error
https://forum.sparkfun.com/viewtopic.php?f=32&t=34032
https://github.com/shirriff/Arduino-IRremote/issues/5
http://adafruit.com/forums/viewtopic.php?f=25&t=34328
http://forum.arduino.cc/index.php?topic=102519.0;wap2
http://forum.arduino.cc/index.php?topic=22630.0
e altri

ho intravisto leggendo velocemente che qualcuno ha applicato il reset degli interrupt dopo aver ricevuto il segnale IR
Altri hanno risolto comprando una mega, non ho approfondito l'argomento, penso che da qui in poi sia compito tuo esplorare e leggerti tutto, un po' di materiale ce l'hai :roll_eyes:
ciao

Ps: ma il titolo "FUNZIONE "tone(pinBuzzer,frequenza,durata)" non funzionante con libreria IR?" cosa centra con i tuoi errori servo e IRremote?

Cosa intenti per interrupt ?
Ho provato a leggere i vari link che mi hai inviato ma sono un pò difficile da capire, in ogni caso rispondendo alla tua domanda prima pensavo fosse la funzione "tone()" perché se mettevo digitalWrite funzionava tutto..
Comunque non ho ancora risolto ma non posso rispondere in tempi brevi, perché sono molto impegnato, se questa discussione può restare in cronologia tra un mesetto circa che mi finisce la scuola e termino con le ultime interrogazioni ed i due concorsi a cui sto partecipando mi cimenterò nuovamente in questi problemi.
Grazie pablos per l'aiuto. A preso