Go Down

Topic: tone() insieme alle librerie Irremote e servo [RISOLTO] (Read 995 times) previous topic - next topic

Spaceuniversal

Aug 30, 2013, 08:01 pm Last Edit: Aug 31, 2013, 10:40 am by Spaceuniversal Reason: 1
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 :)

Code: [Select]

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


grazie intanto

PaoloP

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

Spaceuniversal

#2
Aug 30, 2013, 11:20 pm Last Edit: Aug 30, 2013, 11:34 pm by Spaceuniversal Reason: 1
si.
ecco il codice completo:
Code: [Select]

// 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':
Code: [Select]

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

lucaleo

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

Spaceuniversal

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

PaoloP

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

lucaleo


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


tu lo avevi gia "percepito" :D

Spaceuniversal

#7
Aug 31, 2013, 12:26 am Last Edit: Aug 31, 2013, 11:22 am by Spaceuniversal Reason: 1
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!

leo72


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

State facendo confusione  ;)
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ù.

Spaceuniversal

#9
Aug 31, 2013, 10:51 am Last Edit: Aug 31, 2013, 10:52 am by Spaceuniversal Reason: 1
Grazie Leo..quando l'ho aperto ho visto infatti.

lucaleo

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

Go Up