Hi,
Ich bekomme eine Fehlermeldung,
die ich leider nicht gelöst bekomme.
Wenn ich die Zeile einfüge, um diese Bibliothek einzubinden,
bekomme ich nur bei meinem Code eine Fehlermeldung
Die komplette Fehlermeldung ist folgende:
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: error: ld returned 1 exit status
exit status 1
Fehler beim Kompilieren für das Board Arduino Uno.
Diese wird aber nur bei diesem Code ausgegeben,
wenn ich die oberste Bibliothek einbinde:
//Bibliotheken einbinden
#include "IRremote.h"
//Pins definieren
const int Motor_rechts_vor_Pin = 9;
const int Motor_links_vor_Pin = 5;
const int Motor_rechts_zurueck_Pin = 6;
const int Motor_links_zurueck_Pin = 3;
const int Infrarotsensor1_Pin = A1;
const int Infrarotsensor2_Pin = A2;
const int Infrarotsensor3_Pin = A3;
const int Lautsprecher_Pin = 2;
const int IR_Receiver_Pin = 11;
//Konstanten definieren
const int Infrarotschwelle = 600;
const int Standartgeschwindigkeit = 80;
const int Standartdrehwinkel = 40;
void setup() {
//Module starten
Serial.begin(9600);
//Pins deklarieren
pinMode(Motor_rechts_vor_Pin, OUTPUT);
pinMode(Motor_links_vor_Pin, OUTPUT);
pinMode(Motor_rechts_zurueck_Pin, OUTPUT);
pinMode(Motor_links_zurueck_Pin, OUTPUT);
}
void loop() {
//Defaulteinstellungen
digitalWrite(Motor_rechts_vor_Pin, false);
digitalWrite(Motor_links_vor_Pin, false);
digitalWrite(Motor_rechts_zurueck_Pin, false);
digitalWrite(Motor_links_zurueck_Pin, false);
//waten bis Power_Taster gedrückt
//Steuerung für das autonome Fahren
boolean Fehlerkontrolle = autonomes_Fahren();
//Fehlerkontrolle
switch (Fehlerkontrolle) {
case true:
SuccessTone();
Serial.println("Fahrt erfolgreich beendet");
case false:
ErrorTone();
Serial.println("ERROR");
Serial.println("Ein Fehler ist Aufgetreten");
}
delay(1000);
}
boolean autonomes_Fahren() {
//Überprüfung ob das Auto richtig positioniert ist
if(Infrarotkontrolle(1) == 0 && Infrarotkontrolle(2) == 1 && Infrarotkontrolle(3) == 0){
//Programmverlauf wird nicht unterbrochen
}else{
Serial.println("Bitte positionieren Sie das Auto richtig");
return false;
}
//Anfahren
analogWrite(Motor_rechts_vor_Pin, Standartgeschwindigkeit);
analogWrite(Motor_links_vor_Pin, Standartgeschwindigkeit);
//abtasten der Linie
while(Infrarotkontrolle(1) == 0 || Infrarotkontrolle(2) == 0 || Infrarotkontrolle(3) == 0) {
//wenn alles normal ist
if(Infrarotkontrolle(1) == 0 && Infrarotkontrolle(2) == 1 && Infrarotkontrolle(3) == 0) {
//Standartgeschwindigkeit
analogWrite(Motor_rechts_vor_Pin, Standartgeschwindigkeit);
analogWrite(Motor_links_vor_Pin, Standartgeschwindigkeit);
}else{
//wenn zu viele Orientierungspunkte zu erfassen sind
if(Infrarotkontrolle(1) == 1 && Infrarotkontrolle(2) == 0 && Infrarotkontrolle(3) == 1) {
Serial.println("es stehen zu viele Orientierungspunkte zur Verfügung");
return false;
}
//wenn keine Orientierungspunkte mehr zu erfassen sind
if(Infrarotkontrolle(1) == 0 && Infrarotkontrolle(2) == 0 && Infrarotkontrolle(3) == 0) {
Serial.println("es stehen keine Orientierungspunkte mehr zur Verfügung");
return false;
}else{
//Richtung erfassen
if(Infrarotkontrolle(1) == 1) {
//in seine Richtung drehen
Lenkung_vor(Standartgeschwindigkeit / 2, Standartdrehwinkel);
}
if(Infrarotkontrolle(3) == 1) {
//in seine Richtung drehen
Lenkung_vor(Standartgeschwindigkeit / 2, Standartdrehwinkel * -1);
}
}
}
}
//Fahrt beendet
return true;
}
int Infrarotkontrolle(int Infrarotsensor) {
//Übersetzung in den jeweiligen Infrarotsensor_Pin
int Infrarotsensor_Pin;
switch(Infrarotsensor) {
case 1:
Infrarotsensor_Pin = Infrarotsensor1_Pin;
break;
case 2:
Infrarotsensor_Pin = Infrarotsensor2_Pin;
break;
case 3:
Infrarotsensor_Pin = Infrarotsensor3_Pin;
break;
default:
Serial.println("Fehler bei den Infrarotpins");
return -1;
}
//Kontrolle, ob der Infrarotsensor eine schwarze Linie erkennt
if(analogRead(Infrarotsensor_Pin) > Infrarotschwelle) {
return 1;
}else{
return 0;
}
}
//Lenkung für vorwärts
void Lenkung_vor(int Geschwindigkeit, int Drehwinkel) {
//welche Richtung
if(Drehwinkel > 0) {
analogWrite(Motor_rechts_vor_Pin,Geschwindigkeit - Drehwinkel);
}else{
analogWrite(Motor_links_vor_Pin,Geschwindigkeit + Drehwinkel);
}
}
//Ton für Error
void ErrorTone() {
tone(Lautsprecher_Pin, 450);
delay(750);
noTone(Lautsprecher_Pin);
}
//Ton für Erfolg
void SuccessTone() {
tone(Lautsprecher_Pin, 196);
delay(300);
noTone(Lautsprecher_Pin);
delay(25);
tone(Lautsprecher_Pin, 196);
delay(400);
noTone(Lautsprecher_Pin);
}
Der Code ohne die Bibliothek funktioniert einwandfrei
und wurde auch schon in der Praxis getestet.
Komischerweise wird bei folgendem Code keine Fehlermeldung ausgegeben:
//www.elegoo.com
//2016.12.9
#include "IRremote.h"
const int IR_Receiver_Pin = 11; // Signal Pin des IR-Empfängers an Arduino Digital Pin 11
/*-----( Declare objects )-----*/
IRrecv irrecv(IR_Receiver_Pin); // Erstellen Instanz von 'irrecv'
decode_results results; // Erstellen Instanz von 'decode_results'
void setup() {
irrecv.enableIRIn(); // Startet den Empfänger
}
void loop() {
translateIR();
}
//IR-Daten empfangen
int translateIR() {
int received_data = -1;
//Haben wir ein IR-Signal erhalten?
if (irrecv.decode(&results)) {
//IR-Signal bestimmen
switch(results.value) {
case 0xFFA25D: received_data = 1; break; //POWER
case 0xFFE21D: received_data = 2; break; //FUNC/STOP
case 0xFF629D: received_data = 3; break; //VOL+
case 0xFF22DD: received_data = 4; break; //FAST BACK
case 0xFF02FD: received_data = 5; break; //PAUSE
case 0xFFC23D: received_data = 6; break; //FAST FORWARD
case 0xFFE01F: received_data = 7; break; //DOWN
case 0xFFA857: received_data = 8; break; //VOL-
case 0xFF906F: received_data = 9; break; //UP
case 0xFF9867: received_data = 10; break; //EQ
case 0xFFB04F: received_data = 11; break; //ST/REPT
case 0xFF6897: received_data = 12; break; //0
case 0xFF30CF: received_data = 13; break; //1
case 0xFF18E7: received_data = 14; break; //2
case 0xFF7A85: received_data = 15; break; //3
case 0xFF10EF: received_data = 16; break; //4
case 0xFF38C7: received_data = 17; break; //5
case 0xFF5AA5: received_data = 18; break; //6
case 0xFF42BD: received_data = 19; break; //7
case 0xFF4AB5: received_data = 20; break; //8
case 0xFF52AD: received_data = 21; break; //9
case 0xFFFFFFFF: received_data = -1; break; //REPEAT
default: received_data = -1; //other button
}
delay(100);
//Erhalte den nächsten Wert
irrecv.resume();
}
return received_data;
}
Würde mich sehr über eine Rückmeldung freuen.
Grüße Carl