When I use Buzzer and IR in same sketch impossible, error:
Tone.cpp.o (symbol from plugin): In function `timer0_pin_port':
(.text+0x0): multiple definition of `__vector_7'
libraries\IRremote\IRremote.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
Error compilando para la tarjeta Arduino/Genuino Uno.
Solution please? thanks!
My code:
#include <IRremote.h>
#include <IRremoteInt.h>
/////////////////////// UNAI //////////////////////////
int receptor = 7;
IRrecv irrecv(receptor);
decode_results codigo;
/////////////////////////MIC///////////////////////////
int MIC = 6;
int VALOR;
int ESTADO;
////////////////////Temp & Humed///////////////////////
#include <DHT.h>
#include <DHT_U.h>
int SENSOR = 12;
int TEMPERATURA;
int HUMEDAD;
DHT dht(SENSOR, DHT11);
//////////////////////////LCD//////////////////////////
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin); // START LCD
//////////////////////////SOUND/////////////////////////
int duration=250;
int fMin=2000;
int fMax=3250;
int i=0;
//////////////////////////LED//////////////////////////
int led1 = 2;
int led2 = 4;
//////////////////////////ULTRASONIC///////////////////
#define Pecho 9
#define Ptrig 8
long duracion, distancia;
//////////////////////////////////////////////////////
void setup() {
pinMode(MIC, INPUT);
Serial.begin(9600); // TEMP Y HUMED SENSOR
dht.begin();
//Define the LCD as 16 column by 2 rows
lcd.begin (16,2);
//Switch on the backlight
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
//////////IR///////
Serial.begin(9600);
irrecv.enableIRIn(); // INICIA LA RECEPCIÓN
/////////////////////////////////////
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
Serial.begin (9600); // inicializa el puerto serial a 9600 baudios
pinMode(Pecho, INPUT); // define el pin 6 como entrada (echo)
pinMode(Ptrig, OUTPUT); // define el pin 7 como salida (triger)
pinMode(13,1); // define el pin 13 como salida
}
void loop() {
if (irrecv.decode(&codigo))
{
Serial.println(codigo.value, HEX);
if (codigo.value==0xFF02FD)//CÓDIGO DEL NÚMERO CERO PARA ACTIVAR LED
{
lcd.setCursor(0,0);
lcd.print("HOLA");
}
}
digitalWrite(Ptrig, LOW);
delayMicroseconds(2);
digitalWrite(Ptrig, HIGH); // genera el pulso de triger por 10ms
delayMicroseconds(10);
digitalWrite(Ptrig, LOW);
duracion = pulseIn(Pecho, HIGH);
distancia = (duracion/2) / 29; // calcula la distancia en centimetros
if (distancia >= 500 || distancia <= 0){ // si la distancia en mayor a 500cm o menor a 0cm
}
else {
lcd.setCursor(0,0);
lcd.print ("Hello Status: OK");
lcd.setCursor(0,1);
lcd.print(distancia);
lcd.print(" CM ");
Serial.print(distancia); // envia el valor de la distancia por el puerto serial
Serial.println("cm"); // le coloca a la distancia los centimetros "cm"
digitalWrite(13,0); // en bajo el pin 13
TEMPERATURA = dht.readTemperature(); // obtencion de valor de temperatura
HUMEDAD = dht.readHumidity(); // obtencion de valor de humedad
Serial.print("Temperatura: "); // escritura en monitor serial de los valores
Serial.print(TEMPERATURA);
Serial.print(" Humedad: ");
Serial.print(HUMEDAD);
lcd.setCursor(7,1);
lcd.print(TEMPERATURA);
lcd.print ("C ");
lcd.setCursor(12,1);
lcd.print(HUMEDAD);
lcd.print("%h");
}
if (distancia <= 20 && distancia >= 1){
do{
digitalWrite(13, 1); // enciende el pin 13
// enciende buzzer alarma
for (i=fMax;i>=fMin; i--)
tone(13, i, duration);
//hace saltar luces de alarma
digitalWrite(led1,HIGH);
delay(75);
digitalWrite(led1,LOW);
delay(75);
digitalWrite(led2,HIGH);
delay(75);
digitalWrite(led2,LOW);
delay(75);
Serial.println("WARNING!.......");
lcd.setCursor(0,0);
lcd.print ("WARNING! "); delay(50);
lcd.setCursor(11,0);
lcd.print ( distancia);
lcd.print (" CM ");
lcd.setCursor(0,1);
lcd.print ("Press 0 to STOP ");
}while(distancia >= 1);
delay(100); // Indica que se ha encendido la alarma por el puerto serial
}
VALOR = digitalRead(MIC);
Serial.print (ESTADO);
if (VALOR == HIGH){
do {
// enciende buzzer alarma
for (i=fMax;i>=fMin; i--)
tone(13, i, duration);
//hace saltar luces de alarma
digitalWrite(led1,HIGH);
delay(75);
digitalWrite(led1,LOW);
delay(75);
digitalWrite(led2,HIGH);
delay(75);
digitalWrite(led2,LOW);
delay(75);
Serial.println("WARNING!.......");
lcd.setCursor(0,0);
lcd.print ("WARNING! "); delay(50);
lcd.setCursor(9,0);
lcd.print ("SOUND ");
lcd.setCursor(0,1);
lcd.print ("Press 0 to STOP ");
}while (distancia >= 1);
}
delay (100);
}
Thanks!