tone() insieme alle librerie Irremote e servo [RISOLTO]

Sto cercando di far funzionare insieme un cicalino, un servo e un sensore ir che attiva esso.
siccome penso stiano usando lo stesso timer, volevo capire intanto se è fattibile utilizzarli tutti insieme modificando da IRremoteint.h l'assegnazione dei timer ma non ho ben compreso come..

Per ora ho assegnato:

servo su pin 9
cicalino su pin 8
e sensore ir su pin 11

e gli errori di compilazioni sono a gogo :slight_smile:

IRremote\IRremote.cpp.o: In function `MATCH(int, int)':
/IRremoteInt.h:179: multiple definition of `MATCH(int, int)'
ScattoIRSound.cpp.o:C:\Program Files (x86)\Arduino\libraries\IRremote/IRremoteInt.h:179: first defined here
IRremote\IRremote.cpp.o: In function `MATCH_MARK(int, int)':
/IRremoteInt.h:180: multiple definition of `MATCH_MARK(int, int)'
ScattoIRSound.cpp.o:C:\Program Files (x86)\Arduino\libraries\IRremote/IRremoteInt.h:180: first defined here
IRremote\IRremote.cpp.o: In function `MATCH_SPACE(int, int)':
/IRremoteInt.h:181: multiple definition of `MATCH_SPACE(int, int)'
ScattoIRSound.cpp.o:C:\Program Files (x86)\Arduino\libraries\IRremote/IRremoteInt.h:181: first defined here
core.a(Tone.cpp.o): In function `__vector_7':
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Tone.cpp:535: multiple definition of `__vector_7'
IRremote\IRremote.cpp.o:C:\Program Files (x86)\Arduino\libraries\IRremote/IRremote.cpp:311: first defined here

sulla libreria Irremoteint.h trovo questo:

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

grazie intanto

Tiro a indovinare.
Nello sketch hai incluso anche IRremoteint.h?

si.
ecco il codice completo:

// LIBRERIE

#include <Servo.h>
#include <IRremote.h>
#include <IRremoteInt.h>

// DICHIARAZIONI
int freq = 1047; 
int pinbuzz = 8;

int RECV_PIN = 11; // ricevitore IR 
IRrecv irrecv(RECV_PIN);
decode_results results;

Servo ServoMc;
int zero = 60; //posizione  1°
int media = 90; //posizione 2° finale

int pause=200;
int scatto=737;


void setup()
{
 ServoMc.attach(9);
Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}
 
void loop()
{
  if (irrecv.decode(&results)) {
   Serial.println(results.value,DEC);
   irrecv.resume(); // Ricevi prossimo valore
    
if (results.value == 52122){
  ServoMc.write(zero);
  delay(scatto);
   ServoMc.write(media);
   delay(scatto);
   tone(pinbuzz, freq);
   
    irrecv.resume(); // Receive the next value

Vedo ora che anche se cancello tone() il codice da errore lo stesso

precisamente cosi':

IRremote\IRremote.cpp.o: In function `MATCH(int, int)':
/IRremoteInt.h:179: multiple definition of `MATCH(int, int)'
ScattoIRSound.cpp.o:C:\Program Files (x86)\Arduino\libraries\IRremote/IRremoteInt.h:179: first defined here
IRremote\IRremote.cpp.o: In function `MATCH_MARK(int, int)':
/IRremoteInt.h:180: multiple definition of `MATCH_MARK(int, int)'
ScattoIRSound.cpp.o:C:\Program Files (x86)\Arduino\libraries\IRremote/IRremoteInt.h:180: first defined here
IRremote\IRremote.cpp.o: In function `MATCH_SPACE(int, int)':
/IRremoteInt.h:181: multiple definition of `MATCH_SPACE(int, int)'
ScattoIRSound.cpp.o:C:\Program Files (x86)\Arduino\libraries\IRremote/IRremoteInt.h:181: first defined here

http://forum.arduino.cc/index.php?topic=185262.0

LUCAAAAA grazie!
Ha funzionato. :% :%
Non bisognava includere la libreria <IRremoteint.h>
Prossima volta cerco meglio sul forum..lezione imparata :slight_smile:

Esatto Luca, includendo la IRremoteint che è già inclusa nella IRremote, la doppia inclusione genera errori.

PaoloP:
Esatto Luca, includendo la IRremoteint che è già inclusa nella IRremote, la doppia inclusione genera errori.

tu lo avevi gia "percepito" :smiley:

Stranamente la remoteint mi viene inclusa automaticamente quando aggiungo la libreria irremote...
Grazie Paolo!
OT: per ringraziarvi segnalo questa beta di simulatore di galleria del vento di Autodesk gratuito fino a fine anno
http://labs.autodesk.com/utilities/falcon

Innovativo e semplice da usare con profili propri.

METODO ALTERNATIVO senza la funzione tone() :

Successivamente all'euforia mi sono accorto all'atto pratico che comunque persiste un conflitto in quanto se si è nella condizione di usare insieme servomotori,funzioni tone() e altro che utilizza stessi timer di almeno uno dei due ,come ad esempio IRremote si è sempre in conflitto in un modo e nell'altro.. (almeno che non si usi arduino mega e si assegni il timer5 a IRremote che sembra funzionare)

Ho trovato questo codice che permette di usare l'altoparlante producendo melodie senza la funzione tone()
link: http://letsmakerobots.com/node/34477

in quest'esempio viene utilizzato un motore dc per produrre suono grazie alle proprietà dei magneti interni che tutti i dc possiedono
Il magnete permanente è nel corpo, l'elettromagnete è sul rotore. Il driver del motore (ponte"H" ) fa da amplificatore.

Il vantaggio è che lascia appunto il timer2 libero da usare per altri scopi.
Riadattandolo al mio caso ha funzionato pefettamente!

Spaceuniversal:
Stranamente la remoteint mi viene inclusa automaticamente quando aggiungo la libreria irremote...

State facendo confusione :wink:
La IRremoteInt non è una libreria aggiuntiva, ma è un sempice file .h che appartiene alla IRremote.
Quel file contiene il setup del timer da usare, nulla più.

Grazie Leo..quando l'ho aperto ho visto infatti.

ma che figata quell'articolo che hai messo del motore musicale spaceuniversal ahaha :smiley:
io ho fatto le musichette con la scintilla della candela invece :smiley: