Hola buenas tardes. Tengo un arduino mega. Mi problema es que he estado manejando el chip l293d para manejar motores y un teclado con pantalla para un control de acceso. Los programas independientes me compilan y me funcionan bien. Pero a la hora de meterlo todo en un programa me sale este error al compilar:
Arduino:1.8.5 (Windows 10), Tarjeta:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"
Tone.cpp.o (symbol from plugin): In function `timer0_pin_port':
(.text+0x0): multiple definition of `__vector_13'
libraries\IRremote\IRremote.cpp.o (symbol from plugin):(.text+0x0): first defined here
c:/program files (x86)/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.9.2/../../../../avr/bin/ld.exe: Disabling relaxation: it will not work with multiple definitions
collect2.exe: error: ld returned 1 exit status
exit status 1
Error compilando para la tarjeta Arduino/Genuino Mega or Mega 2560.
Este reporte podría tener más información con
"Mostrar salida detallada durante la compilación"
opción habilitada en Archivo -> Preferencias.
Aqui dejo el codigo:
//L293D
#include <IRremote.h>
//Lcd
#include <LiquidCrystal_PCF8574.h>
#include <Wire.h>
//Libreria teclado
#include <Keypad.h>
//Buzzer
#define buzzer 30
//Led
#define led_verde 32
#define led_rojo 31
//L293D
#define receptor_ir 2
#define habilita_G 6 // Enable Pin for motor 1
#define motor_G1 7 // Control pin 1 for motor 1
#define motor_G2 8
#define habilita_P 3 // Enable Pin for motor 1
#define motor_P1 4 // Control pin 1 for motor 1
#define motor_P2 5
//L293D
IRrecv irrecv(receptor_ir);
decode_results mando_cod;
//LCD
LiquidCrystal_PCF8574 lcd(0x3F);
int cursor = 5;
int clave = 0;
int luz = 0;
int tiempo = 0;
//Teclado
const byte filas = 4;
const byte colum = 4;
byte pin_filas [] = {22,23,24,25};
byte pin_colum [] = {26,27,28,29};
char teclas [filas][colum] =
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
char codigo_secreto[4]={'1','9','9','4'};
Keypad teclado = Keypad (makeKeymap (teclas),pin_filas,pin_colum,filas,colum);
int intento = 0;
int posicion = 0;
void setup()
{
//L293D
irrecv.enableIRIn();
pinMode( habilita_G, OUTPUT);
pinMode( motor_G1, OUTPUT);
pinMode( motor_G2, OUTPUT);
pinMode( habilita_P, OUTPUT);
pinMode( motor_P1, OUTPUT);
pinMode( motor_P2, OUTPUT);
Serial.begin(9600);
//Led,buffer
pinMode (led_verde, OUTPUT);
pinMode (led_rojo, OUTPUT);
pinMode (buzzer, OUTPUT);
digitalWrite (led_rojo,HIGH);
digitalWrite (led_verde,LOW);
lcd.begin (16,2);
lcd.noBlink();
lcd.setCursor (0,0);
lcd.print ("Introduzca clave: ");
lcd.setCursor (cursor,1);
}
void loop()
{
//L293D
if (irrecv.decode(&mando_cod))
{
Serial.print("0x");
Serial.println(mando_cod.value, HEX);
switch(mando_cod.value)
{
case 0x30137BB8://7
analogWrite(habilita_G, 255);
digitalWrite(motor_G1, HIGH);
digitalWrite(motor_G2, LOW);
delay(1700);
digitalWrite(habilita_G, LOW);
digitalWrite(motor_G1, LOW);
digitalWrite(motor_G2, LOW);
break;
case 0x613F0C2D://4
analogWrite(habilita_P, 255);
digitalWrite(motor_P1, HIGH);
digitalWrite(motor_P2, LOW);
delay(1200);
digitalWrite(habilita_P, LOW);
digitalWrite(motor_P1, LOW);
digitalWrite(motor_P2, LOW);
break;
case 0xC17C1F16:
digitalWrite(habilita_P, LOW);
digitalWrite(motor_P1, LOW);
digitalWrite(motor_P2, LOW);
break;
case 0x722B04B6://9
analogWrite(habilita_G, 255);
digitalWrite(motor_G1, LOW);
digitalWrite(motor_G2, HIGH);
delay(1600);
digitalWrite(habilita_G, LOW);
digitalWrite(motor_G1, LOW);
digitalWrite(motor_G2, LOW);
break;
case 0x91799AD5://6
analogWrite(habilita_P, 255);
digitalWrite(motor_P1, LOW);
digitalWrite(motor_P2, HIGH);
delay(1000);
digitalWrite(habilita_P, LOW);
digitalWrite(motor_P1, LOW);
digitalWrite(motor_P2, LOW);
break;
default:
irrecv.resume();
}
irrecv.resume();
}
//Teclado,buffer,led,lcd
char pulsacion = teclado.getKey();
if (pulsacion != 0)
{
if (pulsacion != '#' && pulsacion != '' && clave == 0 )
{
lcd.print ('');
cursor++;
tone(buzzer,300);
delay(200);
noTone(buzzer);
if (pulsacion == codigo_secreto[posicion])
{
posicion++;
}
if(posicion == 4)
{
lcd.setCursor (0,0);
delay (200);
lcd.setCursor (5,1);
lcd.clear();
lcd.print ("Clave correcta");
delay (1000);
lcd.noBlink();
clave =1;
digitalWrite(led_rojo,LOW);
digitalWrite (led_verde,HIGH);
}
if(pulsacion != codigo_secreto[posicion-1] )
{
intento ++;
if (intento == 1)
{
lcd.clear ();
lcd.print ("Quedan 2 intentos");
delay (1000);
lcd.clear ();
lcd.print ("Introduzca clave: ");
posicion = 0;
}
if (intento == 2)
{
lcd.clear ();
lcd.print ("Queda 1 intento");
delay (1000);
lcd.clear ();
lcd.print ("Introduzca clave: ");
posicion = 0;
}
if (intento == 3)
{
int fuera = 0;
if(fuera == 0)
{
cursor = 5 ;
posicion = 0;
lcd.clear();
lcd.setCursor (0,1);
lcd.print ("Llamando policia");
if(pulsacion !='A'){
tone (buzzer,350);
delay (500);
tone (buzzer,150);
delay (500);
fuera = 1;
}
}
intento = 0;
}
}
}
}
if(pulsacion == '#' && luz == 0)
{
lcd.setBacklight(255);
luz = 1;
pulsacion = 0;
}
if (pulsacion == '*')
{
posicion = 0;
pulsacion = 0;
cursor = 5 ;
clave = 0;
posicion = 0;
lcd.clear();
lcd.setCursor (0,0);
lcd.print("Introduzca clave: ");
lcd.setCursor (5,1);
intento = 0;
lcd.setBacklight(0);
luz = 0;
digitalWrite (led_rojo,HIGH);
digitalWrite (led_verde,LOW);
}
}
Muchas gracias