Pages: [1]   Go Down
Author Topic: FUNZIONE "tone(pinBuzzer,frequenza,durata)" non funzionante con libreria IR?  (Read 274 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 2
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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"
« Last Edit: May 18, 2014, 07:01:18 am by RaffaeleP » Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 111
Posts: 5875
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 :

Code:
// 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 ...  smiley-roll

Guglielmo
Logged

Search is Your friend ... or I am Your enemy !

Offline Offline
Newbie
*
Karma: 2
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
Code:
#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);
  }
}
Logged

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3240
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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ì
Code:
// 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ì
Code:
// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, etc
#else
  #define IR_USE_TIMER1   // tx = pin 9
  //#define IR_USE_TIMER2     // tx = pin 3
#endif


Logged

no comment

Offline Offline
Newbie
*
Karma: 2
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3240
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: May 18, 2014, 11:06:00 am by pablos » Logged

no comment

Offline Offline
Newbie
*
Karma: 2
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3240
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

no comment

Switzerland
Offline Offline
Faraday Member
**
Karma: 111
Posts: 5875
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@ pablos : pazienza pablos, devi avere pazienza ...  smiley-mr-green smiley-mr-green smiley-mr-green

Guglielmo
Logged

Search is Your friend ... or I am Your enemy !

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3240
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

servo.cpp alla riga 103 c'è questo
Code:
SIGNAL (TIMER1_COMPA_vect)
{
  handle_interrupts(_timer1, &TCNT1, &OCR1A);
}

IRremote.cpp alla riga 311 c'è questo
Code:
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
Logged

no comment

Offline Offline
Newbie
*
Karma: 2
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ç_ç
Logged

Offline Offline
Newbie
*
Karma: 2
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3240
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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 smiley (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
Code:
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  smiley-roll-blue
ciao

Ps: ma il titolo "FUNZIONE "tone(pinBuzzer,frequenza,durata)" non funzionante con libreria IR?" cosa centra con i tuoi errori servo e IRremote?
« Last Edit: May 19, 2014, 03:44:04 pm by pablos » Logged

no comment

Offline Offline
Newbie
*
Karma: 2
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: